summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/net
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/net')
-rw-r--r--fw/fe310/eos/net/Makefile2
-rw-r--r--fw/fe310/eos/net/cell.c84
-rw-r--r--fw/fe310/eos/net/cell.h12
-rw-r--r--fw/fe310/eos/net/sock.c117
-rw-r--r--fw/fe310/eos/net/sock.h13
-rw-r--r--fw/fe310/eos/net/wifi.c36
-rw-r--r--fw/fe310/eos/net/wifi.h5
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);