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
Diff: C027Interface.cpp
- 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(); } }