diff --git a/src/arduino-base.cmake b/src/arduino-base.cmake index c3cdf33..6e4eb47 100644 --- a/src/arduino-base.cmake +++ b/src/arduino-base.cmake @@ -1,5 +1,5 @@ set(ARDUINO_BASE_LIBDIR /opt/arduino-1.8.5) -set(ARDUINO_SAMD_DIR $ENV{HOME}/.arduino15/packages/arduino/hardware/samd/1.6.16) +set(ARDUINO_SAMD_DIR $ENV{HOME}/.arduino15/packages/arduino/hardware/samd/1.6.17) set(ARDUINO_INCLUDE_DIRS ${ARDUINO_SAMD_DIR}/cores/arduino diff --git a/src/connection.cpp b/src/connection.cpp index 6763665..dc44331 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -17,21 +17,19 @@ *******************************************************************************/ #include -#include -#include -#include +#include #include "connection.h" connection_t * connection_find(connection_t * connList, - EthernetUDP * udpConnection) + int sock) { connection_t * connP; connP = connList; while (connP != nullptr) { - if (connP->udpConnection == udpConnection) + if (connP->sock == sock) { return connP; } @@ -43,8 +41,9 @@ connection_t * connection_find(connection_t * connList, connection_t * connection_new_incoming(connection_t * connList, - EthernetUDP * udpConnection, - IPAddress * remoteIp, + int sock, + Sodaq_nbIOT * nbIOT, + char * remoteIpStr, uint16_t port) { connection_t * connP; @@ -52,32 +51,33 @@ connection_t * connection_new_incoming(connection_t * connList, connP = (connection_t *)malloc(sizeof(connection_t)); if (connP != nullptr) { - connP->udpConnection = udpConnection; - connP->remoteIp = remoteIp; + int remoteIpLen = strlen(remoteIpStr)+1; + connP->remoteIpStr = (char*)malloc(remoteIpLen); +// memset(connP->remoteIpStr, 0, remoteIpLen); + strncpy(connP->remoteIpStr, remoteIpStr, remoteIpLen); + + connP->nbIOT = nbIOT; + connP->sock = sock; connP->port = port; connP->next = connList; + + SerialUSB.print(F("connP->remoteIpStr: ")); + SerialUSB.println(connP->remoteIpStr); } return connP; } -/** - * @todo add some sort of sanity checking to see if its possible to connect - * @param connList - * @param udpConnection - * @param remoteIp - * @param port - * @return - */ + connection_t * connection_create(connection_t * connList, - EthernetUDP * udpConnection, - IPAddress * remoteIp, + int sock, + Sodaq_nbIOT * nbIOT, + char * remoteIpStr, uint16_t port) { connection_t * connP = nullptr; - - if(*remoteIp != 0) { - connP = connection_new_incoming(connList, udpConnection, remoteIp, port); + if(*remoteIpStr != NULL) { + connP = connection_new_incoming(connList, sock, nbIOT, remoteIpStr, port); } return connP; } @@ -90,6 +90,7 @@ void connection_free(connection_t * connList) connection_t * nextP; nextP = connList->next; + free(connList->remoteIpStr); free(connList); connList = nextP; @@ -101,10 +102,7 @@ int connection_send(connection_t *connP, uint8_t * buffer, size_t length) { - SerialOut.println(F("connection_send() start")); - connP->udpConnection->beginPacket(*(connP->remoteIp), connP->port); - connP->udpConnection->write(buffer, length); - connP->udpConnection->endPacket(); + connP->nbIOT->sendSocket(connP->sock, connP->remoteIpStr, connP->port, buffer, length); return 0; } @@ -118,13 +116,11 @@ uint8_t lwm2m_buffer_send(void * sessionH, if (connP == nullptr) { -// fprintf(stderr, "#> failed sending %lu bytes, missing connection\r\n", length); return COAP_500_INTERNAL_SERVER_ERROR ; } if (-1 == connection_send(connP, buffer, length)) { -// fprintf(stderr, "#> failed sending %lu bytes\r\n", length); return COAP_500_INTERNAL_SERVER_ERROR ; } diff --git a/src/connection.h b/src/connection.h index d6b337f..876db4b 100644 --- a/src/connection.h +++ b/src/connection.h @@ -23,9 +23,6 @@ #include #include -#include -#include - #define LWM2M_STANDARD_PORT_STR "5683" #define LWM2M_STANDARD_PORT 5683 #define LWM2M_DTLS_PORT_STR "5684" @@ -36,26 +33,29 @@ typedef struct _connection_t { struct _connection_t * next; - EthernetUDP * udpConnection; - IPAddress * remoteIp; + int sock; + Sodaq_nbIOT * nbIOT; + char * remoteIpStr; uint16_t port; } connection_t; //int create_socket(const char * portStr, int ai_family); connection_t * connection_find(connection_t * connList, - EthernetUDP * udpConnection); + int sock); connection_t * connection_new_incoming(connection_t * connList, - EthernetUDP * udpConnection, - IPAddress * remoteIp, + int sock, + Sodaq_nbIOT * nbIOT, + char * remoteIp, uint16_t port); connection_t * connection_create(connection_t * connList, - EthernetUDP * udpConnection, - IPAddress * remoteIp, + int sock, + Sodaq_nbIOT * nbIOT, + char * remoteIp, uint16_t port); void connection_free(connection_t * connList); -int connection_send(connection_t *connP, uint8_t * buffer, size_t length); +int connection_send(connection_t *connP, char * buffer, size_t length); #endif diff --git a/src/shared.cmake b/src/shared.cmake index c20d3fd..b747314 100644 --- a/src/shared.cmake +++ b/src/shared.cmake @@ -11,16 +11,16 @@ if(DTLS) set(SHARED_SOURCES ${SHARED_SOURCES} ${TINYDTLS_SOURCES} - ${SHARED_SOURCES_DIR}/dtlsconnection.c) - + ${SHARED_SOURCES_DIR}/dtlsconnection.cpp) + set(SHARED_INCLUDE_DIRS - ${SHARED_SOURCES_DIR} + ${SHARED_SOURCES_DIR} ${TINYDTLS_SOURCES_DIR}) - + set(SHARED_DEFINITIONS -DWITH_TINYDTLS) else() set(SHARED_SOURCES - ${SHARED_SOURCES} + ${SHARED_SOURCES} ${SHARED_SOURCES_DIR}/connection.cpp) set(SHARED_INCLUDE_DIRS ${SHARED_SOURCES_DIR})