ThingPlug Test
Dependents: WizFi310_ThingPlug_Test WizFi310_ThingPlug_Test_P
Fork of WizFi310Interface by
Diff: WizFi310Interface.cpp
- Revision:
- 4:176b6f3addd6
- Parent:
- 3:dae9a0924a73
- Child:
- 5:72212beb817c
--- a/WizFi310Interface.cpp Wed Apr 12 05:18:09 2017 +0000 +++ b/WizFi310Interface.cpp Mon Apr 17 06:44:26 2017 +0000 @@ -100,6 +100,7 @@ int id; nsapi_protocol_t proto; bool connected; + uint16_t port; }; int WizFi310Interface::socket_open(void **handle, nsapi_protocol_t proto) @@ -154,12 +155,29 @@ int WizFi310Interface::socket_bind(void *handle, const SocketAddress &address) { - return NSAPI_ERROR_UNSUPPORTED; + struct wizfi310_socket *socket = (struct wizfi310_socket *)handle; + socket->port = address.get_port(); + + return 0; } int WizFi310Interface::socket_listen(void *handle, int backlog) { - return NSAPI_ERROR_UNSUPPORTED; + int cid=-1; + struct wizfi310_socket *socket = (struct wizfi310_socket *)handle; + + if((cid = _wizfi310.listen(WizFi310::PROTO_TCP, socket->port)) == -1 ) + { + return NSAPI_ERROR_DEVICE_ERROR; + } + if(cid >= WIZFI310_SOCKET_COUNT) + { + return NSAPI_ERROR_NO_SOCKET; + } + _ids[cid] = true; + socket->id = cid; + socket->connected = false; + return 0; } int WizFi310Interface::socket_connect(void *handle, const SocketAddress &addr) @@ -187,7 +205,30 @@ int WizFi310Interface::socket_accept(void **handle, void *server) { - return NSAPI_ERROR_UNSUPPORTED; + struct wizfi310_socket *socket = (struct wizfi310_socket *)server; + struct wizfi310_socket *new_socket = new struct wizfi310_socket; + + if( !new_socket ) + { + return NSAPI_ERROR_NO_SOCKET; + } + + memset(new_socket, 0, sizeof(new_socket)); + + for(int cid=0; cid<WIZFI310_SOCKET_COUNT; cid++) + { + if( _wizfi310.accept(cid) != -1 ) + { + _ids[cid] = true; + new_socket->id = cid; + new_socket->connected = true; + + *handle = new_socket; + return 0; + } + } + + return NSAPI_ERROR_WOULD_BLOCK; } int WizFi310Interface::socket_send(void *handle, const void *data, unsigned size) @@ -206,9 +247,12 @@ struct wizfi310_socket *socket = (struct wizfi310_socket *)handle; int32_t recv = _wizfi310.recv(socket->id, (char*)data, size); - if (recv <= 0) { + if (recv == 0) { return NSAPI_ERROR_WOULD_BLOCK; } + else if(recv == -1){ + return NSAPI_ERROR_NO_SOCKET; + } return recv; }