Socket interface for C027Interface. Implements the NetworkSocketAPI

Dependencies:   C027_Support

Dependents:   HelloC027Interface U_Blox_DeviceConnector U_Blox_DeviceConnector U-Blox_Client

Fork of LWIPInterface by NetworkSocketAPI

Revision:
22:69ea34ad7fc6
Parent:
21:0c4d90bc84af
Child:
23:5e320842ccad
--- a/C027Interface.cpp	Mon Mar 27 14:10:06 2017 -0500
+++ b/C027Interface.cpp	Mon Mar 27 15:54:45 2017 -0500
@@ -16,6 +16,7 @@
 
 #include "C027Interface.h"
 #include "mbed.h"
+#include <math.h>
 
 
 // C027Interface implementation
@@ -171,9 +172,11 @@
 
 int C027Interface::socket_send(void *handle, const void *data, unsigned size)
 {
-    struct c027_socket *socket = (struct c027_socket *)handle;
+    m.lock();
+		struct c027_socket *socket = (struct c027_socket *)handle;
 
     int sent = _mdm->socketSend(socket->socket, (const char *)data, size);
+		m.unlock();
     if (sent == SOCKET_ERROR) {
         return NSAPI_ERROR_DEVICE_ERROR;
     }
@@ -183,17 +186,21 @@
 
 int C027Interface::socket_recv(void *handle, void *data, unsigned size)
 {
-    struct c027_socket *socket = (struct c027_socket *)handle;
+    m.lock();
+		struct c027_socket *socket = (struct c027_socket *)handle;
     
 		if (!_mdm->socketReadable(socket->socket)) {
+				m.unlock();
         return NSAPI_ERROR_WOULD_BLOCK;
     }
-    
-    int recv = _mdm->socketRecv(socket->socket, (char *)data, size);
+
+		int size_r = size >= 200 ? 200 : size;
+
+    int recv = _mdm->socketRecv(socket->socket, (char *)data, size_r);
+		m.unlock();
     if (recv == SOCKET_ERROR) {
         return NSAPI_ERROR_DEVICE_ERROR;
     }
-    
     return recv;
 }
 
@@ -239,8 +246,10 @@
 {
     while(running){
         for (int i = 0; i < NUMSOCKETS; i++){
+						m.lock();
             int readable = _mdm->socketReadable(i);
-            if (readable != 1) {
+						m.unlock();
+            if (readable != -1 && readable != 0) {
                 event();        
             }
         }