diff options
Diffstat (limited to 'fw/fe310/eos/net')
-rw-r--r-- | fw/fe310/eos/net/Makefile | 2 | ||||
-rw-r--r-- | fw/fe310/eos/net/cell.c | 84 | ||||
-rw-r--r-- | fw/fe310/eos/net/cell.h | 12 | ||||
-rw-r--r-- | fw/fe310/eos/net/sock.c | 117 | ||||
-rw-r--r-- | fw/fe310/eos/net/sock.h | 13 | ||||
-rw-r--r-- | fw/fe310/eos/net/wifi.c | 36 | ||||
-rw-r--r-- | fw/fe310/eos/net/wifi.h | 5 |
7 files changed, 157 insertions, 112 deletions
diff --git a/fw/fe310/eos/net/Makefile b/fw/fe310/eos/net/Makefile index fc65454..0646956 100644 --- a/fw/fe310/eos/net/Makefile +++ b/fw/fe310/eos/net/Makefile @@ -1,6 +1,6 @@ include ../../common.mk -obj = rng.o pwr.o wifi.o sock.o cell.o +obj = rng.o wifi.o sock.o cell.o lib = ../../libeos-net.a diff --git a/fw/fe310/eos/net/cell.c b/fw/fe310/eos/net/cell.c index 96216ba..c0c77af 100644 --- a/fw/fe310/eos/net/cell.c +++ b/fw/fe310/eos/net/cell.c @@ -10,21 +10,21 @@ static eos_evt_handler_t evt_handler[EOS_CELL_MAX_MTYPE]; -static void cell_handle_msg(unsigned char type, unsigned char *buffer, uint16_t len) { +static void cell_handle_msg(unsigned char type, unsigned char *buffer, uint16_t buf_len) { unsigned char mtype; unsigned char idx; - if ((buffer == NULL) || (len < 1)) { - eos_net_bad_handler(type, buffer, len); + if ((buffer == NULL) || (buf_len < 1)) { + eos_net_bad_handler(type, buffer, buf_len); return; } mtype = buffer[0]; idx = (mtype & EOS_CELL_MTYPE_MASK) >> 4; if ((idx < EOS_CELL_MAX_MTYPE) && evt_handler[idx]) { - evt_handler[idx](mtype & ~EOS_CELL_MTYPE_MASK, buffer, len); + evt_handler[idx](mtype & ~EOS_CELL_MTYPE_MASK, buffer, buf_len); } else { - eos_net_bad_handler(type, buffer, len); + eos_net_bad_handler(type, buffer, buf_len); } } @@ -52,32 +52,32 @@ eos_evt_handler_t eos_cell_get_handler(unsigned char mtype) { int eos_cell_send_buffer(unsigned char *buffer, uint16_t buf_len, uint16_t offset, int sync) { buffer -= offset; - return eos_net_send_async(EOS_NET_MTYPE_CELL, buffer, buf_len + offset, 1); + return _eos_net_send(EOS_NET_MTYPE_CELL, buffer, buf_len + offset, !sync, 1); } -int eos_cell_status_parse(unsigned char *buffer, uint16_t len, uint8_t *status, uint8_t *connected) { - if (len < 2) return EOS_ERR_SIZE; +int eos_cell_status_parse(unsigned char *buffer, uint16_t buf_len, uint8_t *status, uint8_t *connected) { + if (buf_len < 2) return EOS_ERR_SIZE; if (buffer[0] != (EOS_CELL_MTYPE_DEV | EOS_CELL_MTYPE_STATUS)) return EOS_ERR_NET; buffer++; - len--; + buf_len--; *status = buffer[0]; buffer++; - len--; + buf_len--; if (*status == EOS_CELL_STATUS_PPP) { - if (len < 1) return EOS_ERR_SIZE; + if (buf_len < 1) return EOS_ERR_SIZE; if (connected) *connected = buffer[0]; buffer++; - len--; + buf_len--; } return EOS_OK; } int eos_cell_status(uint8_t *status, uint8_t *connected, unsigned char *buffer) { unsigned char type; - uint16_t len; + uint16_t buf_len; int do_release; int rv; @@ -88,10 +88,10 @@ int eos_cell_status(uint8_t *status, uint8_t *connected, unsigned char *buffer) } type = EOS_NET_MTYPE_CELL; - len = 1; + buf_len = 1; buffer[0] = EOS_CELL_MTYPE_DEV | EOS_CELL_MTYPE_STATUS; - rv = eos_net_xchg(&type, buffer, &len); + rv = eos_net_xchg(&type, buffer, &buf_len); if (rv) goto cell_status_fin; if (type != EOS_NET_MTYPE_CELL) { @@ -99,7 +99,7 @@ int eos_cell_status(uint8_t *status, uint8_t *connected, unsigned char *buffer) goto cell_status_fin; } - rv = eos_cell_status_parse(buffer, len, status, connected); + rv = eos_cell_status_parse(buffer, buf_len, status, connected); cell_status_fin: if (do_release) eos_net_free(buffer, 1); @@ -132,7 +132,7 @@ int eos_cell_uart_give(unsigned char *buffer, int sync) { return _eos_net_send(EOS_NET_MTYPE_CELL, buffer, 1, async, 1); } -unsigned char *eos_cell_uart_data_buffer(uint16_t *offset) { +unsigned char *eos_cell_uart_data_alloc(uint16_t *offset) { unsigned char *buffer; buffer = eos_net_alloc(); @@ -185,7 +185,7 @@ int eos_cell_voice_hangup(unsigned char *buffer, int sync) { return _eos_net_send(EOS_NET_MTYPE_CELL, buffer, 1, async, 1); } -unsigned char *eos_cell_voice_pcm_buffer(uint16_t *offset) { +unsigned char *eos_cell_voice_pcm_alloc(uint16_t *offset) { unsigned char *buffer; buffer = eos_net_alloc(); @@ -197,7 +197,7 @@ unsigned char *eos_cell_voice_pcm_buffer(uint16_t *offset) { int eos_cell_sms_send(char *addr, char *txt, unsigned char *buffer, int sync) { int async; size_t addr_len, txt_len; - uint16_t len; + uint16_t buf_len; addr_len = strlen(addr); txt_len = strlen(txt); @@ -221,48 +221,48 @@ int eos_cell_sms_send(char *addr, char *txt, unsigned char *buffer, int sync) { buffer[3] = EOS_CELL_SMS_ADDRTYPE_OTHER; } buffer[4] = addr_len; - len = 5; - memcpy(buffer + len, addr, addr_len); - len += addr_len; - memcpy(buffer + len, txt, txt_len); - len += txt_len; - return _eos_net_send(EOS_NET_MTYPE_CELL, buffer, len, async, 1); + buf_len = 5; + memcpy(buffer + buf_len, addr, addr_len); + buf_len += addr_len; + memcpy(buffer + buf_len, txt, txt_len); + buf_len += txt_len; + return _eos_net_send(EOS_NET_MTYPE_CELL, buffer, buf_len, async, 1); } -int _eos_cell_sms_parse(unsigned char *buffer, uint16_t len, char **addr, uint16_t *addr_len, char **txt, uint16_t *txt_len) { +int _eos_cell_sms_parse(unsigned char *buffer, uint16_t buf_len, char **addr, uint16_t *addr_len, char **txt, uint16_t *txt_len) { uint16_t _addr_len; - if (len < 4 + EOS_CELL_SMS_SIZE_TS) return EOS_ERR_SIZE; + if (buf_len < 4 + EOS_CELL_SMS_SIZE_TS) return EOS_ERR_SIZE; if (buffer[0] != (EOS_CELL_MTYPE_SMS | EOS_CELL_MTYPE_SMS_MSG)) return EOS_ERR_NET; buffer += 3 + EOS_CELL_SMS_SIZE_TS; - len -= 3 + EOS_CELL_SMS_SIZE_TS; + buf_len -= 3 + EOS_CELL_SMS_SIZE_TS; _addr_len = *buffer; if (_addr_len > EOS_CELL_SMS_SIZE_ADDR) return EOS_ERR_SIZE; - if ((_addr_len == 0) || (len < (_addr_len + 1))) return EOS_ERR_SIZE; + if ((_addr_len == 0) || (buf_len < (_addr_len + 1))) return EOS_ERR_SIZE; if (addr && addr_len) { *addr = buffer + 1; *addr_len = _addr_len; } buffer += _addr_len + 1; - len -= _addr_len + 1; + buf_len -= _addr_len + 1; - if (len > EOS_CELL_SMS_SIZE_TXT) return EOS_ERR_SIZE; + if (buf_len > EOS_CELL_SMS_SIZE_TXT) return EOS_ERR_SIZE; if (txt && txt_len) { *txt = buffer; - *txt_len = len; + *txt_len = buf_len; } return EOS_OK; } -int eos_cell_sms_parse(unsigned char *buffer, uint16_t len, char *addr, uint16_t addr_size, char *txt, uint16_t txt_size) { +int eos_cell_sms_parse(unsigned char *buffer, uint16_t buf_len, char *addr, uint16_t addr_size, char *txt, uint16_t txt_size) { char *_addr, *_txt; uint16_t _addr_len, _txt_len; int rv; - rv = _eos_cell_sms_parse(buffer, len, &_addr, &_addr_len, &_txt, &_txt_len); + rv = _eos_cell_sms_parse(buffer, buf_len, &_addr, &_addr_len, &_txt, &_txt_len); if (rv) return rv; if (addr_size < _addr_len + 1) return EOS_ERR_SIZE; if (txt_size < _txt_len + 1) return EOS_ERR_SIZE; @@ -276,7 +276,7 @@ int eos_cell_sms_parse(unsigned char *buffer, uint16_t len, char *addr, uint16_t int eos_cell_pdp_get(unsigned char atype, char *arg, uint16_t arg_size, unsigned char *buffer) { unsigned char type; - uint16_t len; + uint16_t buf_len; int do_release; int rv; @@ -287,24 +287,24 @@ int eos_cell_pdp_get(unsigned char atype, char *arg, uint16_t arg_size, unsigned } type = EOS_NET_MTYPE_CELL; - len = 1; + buf_len = 1; buffer[0] = EOS_CELL_MTYPE_PDP | atype; - rv = eos_net_xchg(&type, buffer, &len); + rv = eos_net_xchg(&type, buffer, &buf_len); if (rv) goto cell_pdp_get_fin; - if ((type != EOS_NET_MTYPE_CELL) || (len == 0) || (buffer[0] != EOS_CELL_MTYPE_PDP | atype)) { + if ((type != EOS_NET_MTYPE_CELL) || (buf_len == 0) || (buffer[0] != EOS_CELL_MTYPE_PDP | atype)) { rv = EOS_ERR_NET; goto cell_pdp_get_fin; } - len--; - if ((len > EOS_CELL_PDP_SIZE_ARG) || (len > arg_size - 1)) { + buf_len--; + if ((buf_len > EOS_CELL_PDP_SIZE_ARG) || (buf_len > arg_size - 1)) { rv = EOS_ERR_SIZE; goto cell_pdp_get_fin; } - memcpy(buffer + 1, arg, len); - arg[len] = '\0'; + memcpy(buffer + 1, arg, buf_len); + arg[buf_len] = '\0'; cell_pdp_get_fin: if (do_release) eos_net_free(buffer, 1); diff --git a/fw/fe310/eos/net/cell.h b/fw/fe310/eos/net/cell.h index ac334e9..3264022 100644 --- a/fw/fe310/eos/net/cell.h +++ b/fw/fe310/eos/net/cell.h @@ -1,4 +1,5 @@ #include <stdint.h> + #include "../event.h" #define EOS_CELL_MTYPE_DEV 0x10 @@ -27,7 +28,6 @@ #define EOS_CELL_MTYPE_VOICE_END 7 #define EOS_CELL_MTYPE_VOICE_MISS 8 #define EOS_CELL_MTYPE_VOICE_BUSY 9 -#define EOS_CELL_MTYPE_VOICE_ERR 10 #define EOS_CELL_MTYPE_SMS_MSG 1 #define EOS_CELL_MTYPE_SMS_LIST 2 @@ -73,20 +73,20 @@ void eos_cell_set_handler(unsigned char mtype, eos_evt_handler_t handler); eos_evt_handler_t eos_cell_get_handler(unsigned char mtype); int eos_cell_send_buffer(unsigned char *buffer, uint16_t buf_len, uint16_t offset, int sync); -int eos_cell_status_parse(unsigned char *buffer, uint16_t len, uint8_t *status, uint8_t *connected); +int eos_cell_status_parse(unsigned char *buffer, uint16_t buf_len, uint8_t *status, uint8_t *connected); int eos_cell_status(uint8_t *status, uint8_t *connected, unsigned char *buffer); int eos_cell_uart_take(unsigned char *buffer, int sync); int eos_cell_uart_give(unsigned char *buffer, int sync); -unsigned char *eos_cell_uart_data_buffer(uint16_t *offset); +unsigned char *eos_cell_uart_data_alloc(uint16_t *offset); int eos_cell_voice_dial(char *num, unsigned char *buffer, int sync); int eos_cell_voice_answer(unsigned char *buffer, int sync); int eos_cell_voice_hangup(unsigned char *buffer, int sync); -unsigned char *eos_cell_voice_pcm_buffer(uint16_t *offset); +unsigned char *eos_cell_voice_pcm_alloc(uint16_t *offset); int eos_cell_sms_send(char *addr, char *txt, unsigned char *buffer, int sync); -int _eos_cell_sms_parse(unsigned char *buffer, uint16_t len, char **addr, uint16_t *addr_len, char **txt, uint16_t *txt_len); -int eos_cell_sms_parse(unsigned char *buffer, uint16_t len, char *addr, uint16_t addr_size, char *txt, uint16_t txt_size); +int _eos_cell_sms_parse(unsigned char *buffer, uint16_t buf_len, char **addr, uint16_t *addr_len, char **txt, uint16_t *txt_len); +int eos_cell_sms_parse(unsigned char *buffer, uint16_t buf_len, char *addr, uint16_t addr_size, char *txt, uint16_t txt_size); int eos_cell_pdp_get(unsigned char atype, char *arg, uint16_t arg_size, unsigned char *buffer); int eos_cell_pdp_set(unsigned char atype, char *arg, unsigned char *buffer, int sync); diff --git a/fw/fe310/eos/net/sock.c b/fw/fe310/eos/net/sock.c index c9934e8..c55b8e8 100644 --- a/fw/fe310/eos/net/sock.c +++ b/fw/fe310/eos/net/sock.c @@ -10,26 +10,40 @@ static eos_evt_handler_t evt_handler[EOS_SOCK_MAX_SOCK]; -static void sock_handle_msg(unsigned char type, unsigned char *buffer, uint16_t len) { +static void sock_handle_msg(unsigned char type, unsigned char *buffer, uint16_t buf_len) { unsigned char sock; + int i; - if ((buffer == NULL) || (len < 2)) { - eos_net_bad_handler(type, buffer, len); - return; - } - - sock = buffer[1]; - if ((sock == 0) || (sock > EOS_SOCK_MAX_SOCK) || (evt_handler[sock - 1] == NULL)) { - eos_net_bad_handler(type, buffer, len); + if ((buffer == NULL) || (buf_len < 2)) { + eos_net_bad_handler(type, buffer, buf_len); return; } switch(buffer[0]) { - case EOS_SOCK_MTYPE_PKT: - evt_handler[sock - 1](type, buffer, len); + case EOS_SOCK_MTYPE_PKT: { + sock = buffer[1]; + if ((sock == 0) || (sock > EOS_SOCK_MAX_SOCK) || (evt_handler[sock - 1] == NULL)) { + eos_net_bad_handler(type, buffer, buf_len); + return; + } + evt_handler[sock - 1](type, buffer, buf_len); + break; + } + + case EOS_SOCK_MTYPE_CLOSE: { + for (i=1; i<buf_len; i++) { + sock = buffer[i]; + if ((sock == 0) || (sock > EOS_SOCK_MAX_SOCK) || (evt_handler[sock - 1] == NULL)) { + eos_net_bad_handler(type, buffer, buf_len); + return; + } + evt_handler[sock - 1](type, buffer, buf_len); + } break; + } + default: - eos_net_bad_handler(type, buffer, len); + eos_net_bad_handler(type, buffer, buf_len); break; } } @@ -54,7 +68,7 @@ eos_evt_handler_t eos_sock_get_handler(unsigned char sock) { int eos_sock_open_udp(eos_evt_handler_t handler, unsigned char *buffer) { unsigned char type; - uint16_t len; + uint16_t buf_len; int do_release; int rv, sock; @@ -65,23 +79,23 @@ int eos_sock_open_udp(eos_evt_handler_t handler, unsigned char *buffer) { } type = EOS_NET_MTYPE_SOCK; - len = 1; + buf_len = 1; buffer[0] = EOS_SOCK_MTYPE_OPEN_DGRAM; - rv = eos_net_xchg(&type, buffer, &len); + rv = eos_net_xchg(&type, buffer, &buf_len); if (rv) goto sock_open_udp_fin; if (type != EOS_NET_MTYPE_SOCK) { rv = EOS_ERR_NET; goto sock_open_udp_fin; } - if (len < 2) { + if (buf_len < 2) { rv = EOS_ERR_SIZE; goto sock_open_udp_fin; } sock = buffer[1]; - if (sock == 0) { + if ((sock == 0) || (sock > EOS_SOCK_MAX_SOCK)) { rv = EOS_ERR_NET; goto sock_open_udp_fin; } @@ -108,7 +122,29 @@ void eos_sock_close(unsigned char sock, unsigned char *buffer) { eos_sock_set_handler(sock, NULL); } -static int sock_send(unsigned char sock, unsigned char *msg, uint16_t msg_len, EOSNetAddr *addr, unsigned char *buffer) { +int eos_sock_pkt_alloc(unsigned char **buffer, unsigned char *pkt, size_t pkt_len) { + *buffer = NULL; + + if (pkt && (pkt_len + EOS_SOCK_SIZE_UDP_HDR > EOS_NET_SIZE_BUF)) return EOS_ERR_SIZE; + + *buffer = eos_net_alloc(); + *buffer += EOS_SOCK_SIZE_UDP_HDR; + if (pkt) memcpy(*buffer, pkt, pkt_len); + + return EOS_OK; +} + +unsigned char *eos_sock_buf2pkt(unsigned char *buf, uint16_t buf_len) { + if (buf_len < EOS_SOCK_SIZE_UDP_HDR) return NULL; + + return buf + EOS_SOCK_SIZE_UDP_HDR; +} + +unsigned char *eos_sock_pkt2buf(unsigned char *pkt) { + return pkt - EOS_SOCK_SIZE_UDP_HDR; +} + +static void sock_sendto(unsigned char sock, EOSNetAddr *addr, unsigned char *buffer) { buffer[0] = EOS_SOCK_MTYPE_PKT; buffer[1] = sock; buffer += 2; @@ -117,46 +153,47 @@ static int sock_send(unsigned char sock, unsigned char *msg, uint16_t msg_len, E buffer[0] = addr->port >> 8; buffer[1] = addr->port; buffer += sizeof(addr->port); - if (msg) { - if (msg_len + EOS_SOCK_SIZE_UDP_HDR > EOS_NET_SIZE_BUF) return EOS_ERR_SIZE; - memcpy(buffer, msg, msg_len); - } - - return EOS_OK; } -int eos_sock_sendto(unsigned char sock, unsigned char *msg, size_t msg_len, EOSNetAddr *addr, unsigned char *buffer) { +int eos_sock_sendto(unsigned char sock, EOSNetAddr *addr, unsigned char *buffer, uint16_t buf_len, unsigned char more) { int rv; - rv = sock_send(sock, msg, msg_len, addr, buffer); - if (rv) return rv; + buffer -= EOS_SOCK_SIZE_UDP_HDR; + sock_sendto(sock, addr, buffer); - return eos_net_send(EOS_NET_MTYPE_SOCK, buffer, msg_len + EOS_SOCK_SIZE_UDP_HDR); + rv = eos_net_send(EOS_NET_MTYPE_SOCK, buffer, buf_len + EOS_SOCK_SIZE_UDP_HDR, more); + return rv; } -int eos_sock_sendto_async(unsigned char sock, unsigned char *msg, size_t msg_len, EOSNetAddr *addr, unsigned char *buffer, unsigned char more) { +int eos_sock_sendto_sync(unsigned char sock, EOSNetAddr *addr, unsigned char *buffer, uint16_t buf_len) { int rv; - rv = sock_send(sock, msg, msg_len, addr, buffer); - if (rv) return rv; + buffer -= EOS_SOCK_SIZE_UDP_HDR; + sock_sendto(sock, addr, buffer); - return eos_net_send_async(EOS_NET_MTYPE_SOCK, buffer, msg_len + EOS_SOCK_SIZE_UDP_HDR, more); + rv = eos_net_send_sync(EOS_NET_MTYPE_SOCK, buffer, buf_len + EOS_SOCK_SIZE_UDP_HDR); + return rv; } -int eos_sock_recvfrom(unsigned char *buffer, uint16_t len, unsigned char *msg, size_t msg_size, EOSNetAddr *addr) { - if (len < EOS_SOCK_SIZE_UDP_HDR) return EOS_ERR_SIZE; +int eos_sock_recvfrom(unsigned char *buffer, uint16_t buf_len, EOSNetAddr *addr, unsigned char *pkt, size_t pkt_size) { + if (buf_len < EOS_SOCK_SIZE_UDP_HDR) return EOS_ERR_SIZE; + if (buffer[0] == EOS_SOCK_MTYPE_CLOSE) return EOS_SOCK_ERR_CLOSED; if (buffer[0] != EOS_SOCK_MTYPE_PKT) return EOS_ERR_NET; buffer += 2; - memcpy(addr->host, buffer, sizeof(addr->host)); + if (addr) { + memcpy(addr->host, buffer, sizeof(addr->host)); + } buffer += sizeof(addr->host); - addr->port = (uint16_t)buffer[0] << 8; - addr->port |= (uint16_t)buffer[1]; + if (addr) { + addr->port = (uint16_t)buffer[0] << 8; + addr->port |= (uint16_t)buffer[1]; + } buffer += sizeof(addr->port); - if (msg) { - if (msg_size < len - EOS_SOCK_SIZE_UDP_HDR) return EOS_ERR_SIZE; - memcpy(msg, buffer, len - EOS_SOCK_SIZE_UDP_HDR); + if (pkt) { + if (pkt_size < buf_len - EOS_SOCK_SIZE_UDP_HDR) return EOS_ERR_SIZE; + memcpy(pkt, buffer, buf_len - EOS_SOCK_SIZE_UDP_HDR); } return EOS_OK; diff --git a/fw/fe310/eos/net/sock.h b/fw/fe310/eos/net/sock.h index e2f8637..8dbb111 100644 --- a/fw/fe310/eos/net/sock.h +++ b/fw/fe310/eos/net/sock.h @@ -1,4 +1,5 @@ #include <stdint.h> + #include "../event.h" #define EOS_SOCK_MTYPE_PKT 0 @@ -11,6 +12,8 @@ #define EOS_IPv4_ADDR_SIZE 4 +#define EOS_SOCK_ERR_CLOSED -1021 + typedef struct EOSNetAddr { unsigned char host[EOS_IPv4_ADDR_SIZE]; uint16_t port; @@ -23,6 +26,10 @@ eos_evt_handler_t eos_sock_get_handler(unsigned char sock); int eos_sock_open_udp(eos_evt_handler_t handler, unsigned char *buffer); void eos_sock_close(unsigned char sock, unsigned char *buffer); -int eos_sock_sendto(unsigned char sock, unsigned char *msg, size_t msg_len, EOSNetAddr *addr, unsigned char *buffer); -int eos_sock_sendto_async(unsigned char sock, unsigned char *msg, size_t msg_len, EOSNetAddr *addr, unsigned char *buffer, unsigned char more); -int eos_sock_recvfrom(unsigned char *buffer, uint16_t len, unsigned char *msg, size_t msg_size, EOSNetAddr *addr); +int eos_sock_pkt_alloc(unsigned char **buffer, unsigned char *pkt, size_t pkt_len); +unsigned char *eos_sock_buf2pkt(unsigned char *buf, uint16_t buf_len); +unsigned char *eos_sock_pkt2buf(unsigned char *pkt); + +int eos_sock_sendto(unsigned char sock, EOSNetAddr *addr, unsigned char *buffer, uint16_t buf_len, unsigned char more); +int eos_sock_sendto_sync(unsigned char sock, EOSNetAddr *addr, unsigned char *buffer, uint16_t buf_len); +int eos_sock_recvfrom(unsigned char *buffer, uint16_t buf_len, EOSNetAddr *addr, unsigned char *pkt, size_t pkt_size); diff --git a/fw/fe310/eos/net/wifi.c b/fw/fe310/eos/net/wifi.c index ebbb9ca..1391121 100644 --- a/fw/fe310/eos/net/wifi.c +++ b/fw/fe310/eos/net/wifi.c @@ -10,19 +10,19 @@ static eos_evt_handler_t evt_handler[EOS_WIFI_MAX_MTYPE]; -static void wifi_handle_msg(unsigned char type, unsigned char *buffer, uint16_t len) { +static void wifi_handle_msg(unsigned char type, unsigned char *buffer, uint16_t buf_len) { unsigned char mtype; - if ((buffer == NULL) || (len < 1)) { - eos_net_bad_handler(type, buffer, len); + if ((buffer == NULL) || (buf_len < 1)) { + eos_net_bad_handler(type, buffer, buf_len); return; } mtype = buffer[0]; if ((mtype < EOS_WIFI_MAX_MTYPE) && evt_handler[mtype]) { - evt_handler[mtype](mtype, buffer, len); + evt_handler[mtype](mtype, buffer, buf_len); } else { - eos_net_bad_handler(type, buffer, len); + eos_net_bad_handler(type, buffer, buf_len); } } @@ -44,28 +44,28 @@ eos_evt_handler_t eos_wifi_get_handler(unsigned char mtype) { return NULL; } -int eos_wifi_status_parse(unsigned char *buffer, uint16_t len, uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssid_size) { - if (len < 2) return EOS_ERR_SIZE; +int eos_wifi_status_parse(unsigned char *buffer, uint16_t buf_len, uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssid_size) { + if (buf_len < 2) return EOS_ERR_SIZE; if (buffer[0] != EOS_WIFI_MTYPE_STATUS) return EOS_ERR_NET; buffer++; - len--; + buf_len--; *status = buffer[0]; buffer++; - len--; + buf_len--; switch (*status) { case EOS_WIFI_STATUS_GOT_IP: - if (len < sizeof(uint32_t)) return EOS_ERR_SIZE; + if (buf_len < sizeof(uint32_t)) return EOS_ERR_SIZE; if (ip_addr) memcpy(ip_addr, buffer, sizeof(uint32_t)); buffer += sizeof(uint32_t); - len -= sizeof(uint32_t); + buf_len -= sizeof(uint32_t); case EOS_WIFI_STATUS_CONNECTED: if (ssid) { - if ((len == 0) || (len > EOS_WIFI_SIZE_SSID) || (len > ssid_size - 1)) return EOS_ERR_SIZE; - memcpy(ssid, buffer, len); - ssid[len] = '\0'; + if ((buf_len == 0) || (buf_len > EOS_WIFI_SIZE_SSID) || (buf_len > ssid_size - 1)) return EOS_ERR_SIZE; + memcpy(ssid, buffer, buf_len); + ssid[buf_len] = '\0'; } break; } @@ -74,7 +74,7 @@ int eos_wifi_status_parse(unsigned char *buffer, uint16_t len, uint8_t *status, int eos_wifi_status(uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssid_size, unsigned char *buffer) { unsigned char type; - uint16_t len; + uint16_t buf_len; int do_release; int rv; @@ -85,17 +85,17 @@ int eos_wifi_status(uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssi } type = EOS_NET_MTYPE_WIFI; - len = 1; + buf_len = 1; buffer[0] = EOS_WIFI_MTYPE_STATUS; - rv = eos_net_xchg(&type, buffer, &len); + rv = eos_net_xchg(&type, buffer, &buf_len); if (rv) goto wifi_status_fin; if (type != EOS_NET_MTYPE_WIFI) { rv = EOS_ERR_NET; goto wifi_status_fin; } - rv = eos_wifi_status_parse(buffer, len, status, ip_addr, ssid, ssid_size); + rv = eos_wifi_status_parse(buffer, buf_len, status, ip_addr, ssid, ssid_size); wifi_status_fin: if (do_release) eos_net_free(buffer, 1); diff --git a/fw/fe310/eos/net/wifi.h b/fw/fe310/eos/net/wifi.h index 93d2fc4..800723e 100644 --- a/fw/fe310/eos/net/wifi.h +++ b/fw/fe310/eos/net/wifi.h @@ -1,4 +1,5 @@ #include <stdint.h> + #include "../event.h" #define EOS_WIFI_MTYPE_STATUS 0 @@ -24,10 +25,10 @@ void eos_wifi_init(void); void eos_wifi_set_handler(unsigned char mtype, eos_evt_handler_t handler); eos_evt_handler_t eos_wifi_get_handler(unsigned char mtype); -int eos_wifi_status_parse(unsigned char *buffer, uint16_t len, uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssid_size); +int eos_wifi_status_parse(unsigned char *buffer, uint16_t buf_len, uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssid_size); int eos_wifi_status(uint8_t *status, uint8_t ip_addr[], char *ssid, uint16_t ssid_size, unsigned char *buffer); int eos_wifi_start(unsigned char *buffer, int sync); int eos_wifi_stop(unsigned char *buffer, int sync); int eos_wifi_scan(unsigned char *buffer, int sync); int eos_wifi_connect(char *ssid, char *pwd, unsigned char *buffer, int sync); -int eos_wifi_disconnect(unsigned char *buffer, int sync);
\ No newline at end of file +int eos_wifi_disconnect(unsigned char *buffer, int sync); |