ThingPlug Test

Dependents:   WizFi310_ThingPlug_Test WizFi310_ThingPlug_Test_P

Fork of WizFi310Interface by WIZnet

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;
 }