ThingPlug Test
Dependents: WizFi310_ThingPlug_Test WizFi310_ThingPlug_Test_P
Fork of WizFi310Interface by
Revision 4:176b6f3addd6, committed 2017-04-17
- Comitter:
- kaizen
- Date:
- Mon Apr 17 06:44:26 2017 +0000
- Parent:
- 3:dae9a0924a73
- Child:
- 5:72212beb817c
- Commit message:
- Added TCP Server Function
Changed in this revision
| WizFi310Interface.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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;
}
