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:
- 21:0c4d90bc84af
- Parent:
- 19:fed715eb9c83
- Child:
- 22:69ea34ad7fc6
diff -r be7a08046b6d -r 0c4d90bc84af C027Interface.cpp --- a/C027Interface.cpp Mon Mar 27 15:57:50 2017 +0000 +++ b/C027Interface.cpp Mon Mar 27 14:10:06 2017 -0500 @@ -26,7 +26,25 @@ running = false; } -int C027Interface::connect(const char *apn, const char *username, const char *password) +C027Interface::~C027Interface() +{ + _thread.join(); +} + +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() { // create the modem _mdm = new MDMSerial; @@ -54,13 +72,20 @@ 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); } 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() { @@ -138,7 +163,8 @@ return 0; } -int C027Interface::socket_accept(void **handle, void *server) +nsapi_error_t C027Interface::socket_accept(nsapi_socket_t server, + nsapi_socket_t *handle, SocketAddress *address) { return NSAPI_ERROR_UNSUPPORTED; } @@ -158,7 +184,8 @@ int C027Interface::socket_recv(void *handle, void *data, unsigned size) { struct c027_socket *socket = (struct c027_socket *)handle; - if (!_mdm->socketReadable(socket->socket)) { + + if (!_mdm->socketReadable(socket->socket)) { return NSAPI_ERROR_WOULD_BLOCK; } @@ -210,27 +237,32 @@ void C027Interface::socket_check() { - struct c027_socket *socket = (struct c027_socket *)_handle; while(running){ - if (_mdm->socketReadable(socket->socket)) { - event(); - break; + for (int i = 0; i < NUMSOCKETS; i++){ + int readable = _mdm->socketReadable(i); + if (readable != 1) { + event(); } - wait(1); } - running = false; + wait(1); + } + running = false; } void C027Interface::event(){ - _callback(_data); + for (int i = 0; i < NUMSOCKETS; i++){ + if (_cbs[i].callback) { + _cbs[i].callback(_cbs[i].data); + } + } } void C027Interface::socket_attach(void *handle, void (*callback)(void *), void *data) { - _callback = callback; - _data = data; - _handle = &handle; + struct c027_socket *socket = (struct c027_socket *)handle; + _cbs[socket->socket].callback = callback; + _cbs[socket->socket].data = data; if(!running){ running = true; _thread.start(this, &C027Interface::socket_check);