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:
- 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); + } } +