diff --git a/examples/utility/Provisioning_2.0/CSRHandler.cpp b/examples/utility/Provisioning_2.0/CSRHandler.cpp index 1a6101e4b..8235db14a 100644 --- a/examples/utility/Provisioning_2.0/CSRHandler.cpp +++ b/examples/utility/Provisioning_2.0/CSRHandler.cpp @@ -193,6 +193,42 @@ uint32_t CSRHandlerClass::getTimestamp() { return ts; } +bool CSRHandlerClass::parseDateFromStr(char *str) { + char *tok[3]; + int i = 1; + tok[0] = strtok(str, "-"); + for (; i < 3; i++) { + char *t = strtok(NULL, "-"); + if(t == NULL){ + break; + } + tok[i] = t; + } + if (i < 3) { + return false; + } + + char *day = strtok(tok[2], "T"); + char *time = strtok(NULL, "T"); + + if(time == NULL){ + return false; + } + + char *hour = strtok(time, ":"); + + if(strlen(tok[0]) != 4 || strlen(tok[1]) != 2 || strlen(day) != 2 || strlen(hour) != 2){ + return false; + } + + _issueYear = atoi(tok[0]); + _issueMonth = atoi(tok[1]); + _issueDay = atoi(day); + _issueHour = atoi(hour); + + return true; +} + CSRHandlerClass::CSRHandlerStates CSRHandlerClass::handleBuildCSR() { if (!_certForCSR) { _certForCSR = new ECP256Certificate(); @@ -296,7 +332,7 @@ CSRHandlerClass::CSRHandlerStates CSRHandlerClass::handleParseResponse() { if(i < 6 || strlen(token[0]) != 36 || strlen(token[1]) != 40 || strlen(token[2]) < 10 || strlen(token[3]) != 32 || strlen(token[4]) != 64 || strlen(token[5]) != 64 - || sscanf(token[2], "%4d-%2d-%2dT%2d", &_issueYear, &_issueMonth, &_issueDay, &_issueHour) != 4){ + || !parseDateFromStr(token[2])){ updateNextRequestAt(); DEBUG_ERROR("CSRH::%s Error parsing response, retrying in %d ms", __FUNCTION__, _nextRequestAt - millis()); return CSRHandlerStates::REQUEST_SIGNATURE; diff --git a/examples/utility/Provisioning_2.0/CSRHandler.h b/examples/utility/Provisioning_2.0/CSRHandler.h index ae5956b7e..dcc2bc479 100644 --- a/examples/utility/Provisioning_2.0/CSRHandler.h +++ b/examples/utility/Provisioning_2.0/CSRHandler.h @@ -63,6 +63,7 @@ class CSRHandlerClass { uint32_t jitter(uint32_t base = JITTER_BASE, uint32_t max = JITTER_MAX); bool postRequest(const char *url, String &postData); uint32_t getTimestamp(); + bool parseDateFromStr(char *str); CSRHandlerStates handleBuildCSR(); CSRHandlerStates handleRequestSignature(); CSRHandlerStates handleWaitingResponse(); diff --git a/examples/utility/Provisioning_2.0/Provisioning_2.0.ino b/examples/utility/Provisioning_2.0/Provisioning_2.0.ino index 7f8f44ceb..d0d8bd357 100644 --- a/examples/utility/Provisioning_2.0/Provisioning_2.0.ino +++ b/examples/utility/Provisioning_2.0/Provisioning_2.0.ino @@ -15,7 +15,7 @@ #include #include "utility/LEDFeedback.h" -const char *SKETCH_VERSION = "0.3.3"; +const char *SKETCH_VERSION = "0.4.1"; enum class DeviceState { HARDWARE_CHECK, diff --git a/examples/utility/Provisioning_2.0/SecretsHelper.h b/examples/utility/Provisioning_2.0/SecretsHelper.h index bdb6354d1..fba33e25b 100644 --- a/examples/utility/Provisioning_2.0/SecretsHelper.h +++ b/examples/utility/Provisioning_2.0/SecretsHelper.h @@ -14,6 +14,11 @@ inline String GetUHWID() { UniqueHWId Id; if (Id.begin()) { +#ifdef ARDUINO_NANO_RP2040_CONNECT + /*Delay added for avoiding device crashes + on Nano RP2040 Connect when reading the UHWID */ + delay(100); +#endif return Id.get(); } return ""; diff --git a/examples/utility/Provisioning_2.0/thingProperties.h b/examples/utility/Provisioning_2.0/thingProperties.h index 7f51fa6ca..9d2a6cdd7 100644 --- a/examples/utility/Provisioning_2.0/thingProperties.h +++ b/examples/utility/Provisioning_2.0/thingProperties.h @@ -12,6 +12,7 @@ #include #include #include +#include "Arduino_NetworkConfigurator.h" #include "configuratorAgents/agents/BLEAgent.h" #include "configuratorAgents/agents/SerialAgent.h" diff --git a/src/AIoTC_Config.h b/src/AIoTC_Config.h index b0fba96a3..bd1187765 100644 --- a/src/AIoTC_Config.h +++ b/src/AIoTC_Config.h @@ -155,7 +155,8 @@ #endif #if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_NICLA_VISION) || defined(ARDUINO_OPTA) || defined(ARDUINO_GIGA) \ - || defined(ARDUINO_UNOR4_WIFI) || defined(ARDUINO_PORTENTA_C33) + || defined(ARDUINO_UNOR4_WIFI) || defined(ARDUINO_PORTENTA_C33) || defined(ARDUINO_NANO_RP2040_CONNECT) \ + || defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT) #define NETWORK_CONFIGURATOR_ENABLED (1) #else #define NETWORK_CONFIGURATOR_ENABLED (0)