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:
19:fed715eb9c83
Parent:
18:d2ad48926718
Child:
21:0c4d90bc84af
--- a/C027Interface.cpp	Thu Mar 23 21:59:18 2017 +0000
+++ b/C027Interface.cpp	Fri Mar 24 19:32:12 2017 +0000
@@ -23,22 +23,10 @@
     : _debug(debug)
 {
     strcpy(_pin, simpin);
+    running = false;
 }
 
-nsapi_error_t C027Interface::set_credentials(const char *apn, const char *username, const char *password)
-{
-    memset(_apn, 0, sizeof(_apn));
-    strncpy(_apn, apn, sizeof(_apn));
-
-    memset(_username, 0, sizeof(_username));
-    strncpy(_username, username, sizeof(_username));
-    
-    memset(_password, 0, sizeof(_password));
-    strncpy(_password, password, sizeof(_password));
-    return 0;
-}
-
-nsapi_error_t C027Interface::connect()
+int C027Interface::connect(const char *apn, const char *username, const char *password)
 {
     // create the modem
     _mdm = new MDMSerial;
@@ -66,7 +54,7 @@
     
     if (mdmOk) {
         // join the internet connection 
-        MDMParser::IP ip = _mdm->join(_apn, _username, _password);
+        MDMParser::IP ip = _mdm->join(apn, username, password);
         _ip_address.set_ip_bytes(&ip, NSAPI_IPv4);
         mdmOk = (ip != NOIP);
     }
@@ -74,13 +62,6 @@
     return mdmOk ? 0 : NSAPI_ERROR_DEVICE_ERROR;
 }
 
-nsapi_error_t C027Interface::connect(const char *apn, const char *username, const char *password)
-{
-    
-    set_credentials(apn, username, password);
-    return connect();
-}
-
 int C027Interface::disconnect()
 {
     if (!_mdm->disconnect()) {
@@ -157,7 +138,7 @@
     return 0;
 }
 
-nsapi_error_t C027Interface::socket_accept(nsapi_socket_t server, nsapi_socket_t *handle, SocketAddress *address)
+int C027Interface::socket_accept(void **handle, void *server)
 {
     return NSAPI_ERROR_UNSUPPORTED;
 }
@@ -227,17 +208,32 @@
     return recv;
 }
 
-void C027Interface::_run()
+void C027Interface::socket_check()
 {
-    while (true) {
-        _callback(_data);
-        wait(0.25f);
-    }
+    struct c027_socket *socket = (struct c027_socket *)_handle;
+    while(running){
+            if (_mdm->socketReadable(socket->socket)) {
+                    event();
+                    break;
+            }
+            wait(1);
+        }
+        running = false;
+}
+    
+
+void C027Interface::event(){
+    _callback(_data);
 }
 
 void C027Interface::socket_attach(void *handle, void (*callback)(void *), void *data)
 {
     _callback = callback;
     _data = data;
-    _thread.start(this, &C027Interface::_run);
+    _handle = &handle;
+    if(!running){
+        running = true;
+        _thread.start(this, &C027Interface::socket_check);
+    }
 }
+