diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index d69786d..0815c6c 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -20,8 +20,9 @@ jobs: # libraries to install for all boards UNIVERSAL_LIBRARIES: | - source-path: ./ - - name: Arduino_CloudUtils - name: Arduino_SecureElement + - source-url: https://github.com/arduino/Arduino_CloudUtils.git + version: 0.0.1 # sketch paths to compile (recursive) for all boards UNIVERSAL_SKETCH_PATHS: | - examples/uniqueHWId diff --git a/src/networkId.cpp b/src/networkId.cpp index 18abdef..804d3a2 100644 --- a/src/networkId.cpp +++ b/src/networkId.cpp @@ -9,52 +9,72 @@ */ #include "networkId.h" +#include bool networkId::begin() { -#if defined(ARDUINO_SAMD_MKRWIFI1010) || \ - defined(ARDUINO_SAMD_NANO_33_IOT) - WiFi.setTimeout(0); - return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35"); -#elif defined(ARDUINO_PORTENTA_H7_M7) || \ - defined(ARDUINO_NICLA_VISION) || \ - defined(ARDUINO_GIGA) - WiFi.setTimeout(0); - return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35", ENC_TYPE_TKIP); -#elif defined(ARDUINO_PORTENTA_C33) || \ +#if defined(ARDUINO_NANO_RP2040_CONNECT) || \ + defined(ARDUINO_SAMD_MKRWIFI1010) || \ + defined(ARDUINO_SAMD_NANO_33_IOT) || \ defined(ARDUINO_UNOR4_WIFI) WiFi.setTimeout(0); - return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35"); -#elif defined(ARDUINO_NANO_RP2040_CONNECT) + int result = WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35"); + WiFi.setTimeout(10000); + return (result != WL_NO_SHIELD) ? true : false; +#elif defined(ARDUINO_PORTENTA_C33) + return true; +#elif defined(ARDUINO_SAMD_MKRNB1500) + return _modem.begin(); +#elif defined(ARDUINO_SAMD_MKRGSM1400) + return _modem.begin(); +#elif defined(ARDUINO_SAMD_MKRWAN1300) || \ + defined(ARDUINO_SAMD_MKRWAN1310) + return _modem.begin(EU868); +#elif defined(ARDUINO_PORTENTA_H7_M7) || \ + defined(ARDUINO_NICLA_VISION) || \ + defined(ARDUINO_GIGA) WiFi.setTimeout(0); - return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35"); + int result = WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35", ENC_TYPE_TKIP); + WiFi.setTimeout(10000); + return ( result != WL_NO_SHIELD) ? true : false; #elif defined(ARDUINO_OPTA) - return !!Ethernet.begin(NULL, 0, 0); + Ethernet.begin(NULL, 0, 0); + return true; +#else + return false; #endif } bool networkId::get(uint8_t *in, uint32_t size) { -#if IFACE_MAC_ADDR_LENGTH == 0 +#if NETWORK_ID_SIZE == 0 (void)in; (void)size; return false; #else - if (size < IFACE_MAC_ADDR_LENGTH) { + if (size < NETWORK_ID_SIZE) { return false; } -#if defined(ARDUINO_SAMD_MKRWIFI1010) || \ - defined(ARDUINO_SAMD_NANO_33_IOT) - WiFi.macAddress(in); -#elif defined(ARDUINO_PORTENTA_H7_M7) || \ - defined(ARDUINO_NICLA_VISION) || \ +#if defined(ARDUINO_NANO_RP2040_CONNECT) || \ + defined(ARDUINO_SAMD_MKRWIFI1010) || \ + defined(ARDUINO_SAMD_NANO_33_IOT) || \ + defined(ARDUINO_PORTENTA_C33) || \ + defined(ARDUINO_UNOR4_WIFI) || \ + defined(ARDUINO_PORTENTA_H7_M7) || \ + defined(ARDUINO_NICLA_VISION) || \ defined(ARDUINO_GIGA) WiFi.macAddress(in); -#elif defined(ARDUINO_PORTENTA_C33) || \ - defined(ARDUINO_UNOR4_WIFI) - WiFi.macAddress(in); -#elif defined(ARDUINO_NANO_RP2040_CONNECT) - WiFi.macAddress(in); #elif defined(ARDUINO_OPTA) Ethernet.MACAddress(in); +#elif defined(ARDUINO_SAMD_MKRNB1500) || \ + defined(ARDUINO_SAMD_MKRGSM1400) + String imei = _modem.getIMEI(); + /* Remove luhn check digit to keep things even */ + imei.remove(15); + THEXT::decode(imei, in, size); +#elif defined(ARDUINO_SAMD_MKRWAN1300) || \ + defined(ARDUINO_SAMD_MKRWAN1310) + return THEXT::decode(_modem.deviceEUI(), in, size); +#else + return false; #endif return true; #endif diff --git a/src/networkId.h b/src/networkId.h index 1bcc5ae..0127c32 100644 --- a/src/networkId.h +++ b/src/networkId.h @@ -17,18 +17,30 @@ defined(ARDUINO_NICLA_VISION) || \ defined(ARDUINO_GIGA) #include - #define IFACE_MAC_ADDR_LENGTH WL_MAC_ADDR_LENGTH + #define NETWORK_ID_SIZE WL_MAC_ADDR_LENGTH +#elif defined(ARDUINO_SAMD_MKRNB1500) + #include + /* We don't take in account Luhn check digit */ + #define NETWORK_ID_SIZE 7 +#elif defined(ARDUINO_SAMD_MKRGSM1400) + #include + /* We don't take in account Luhn check digit */ + #define NETWORK_ID_SIZE 7 +#elif defined(ARDUINO_SAMD_MKRWAN1300) || \ + defined(ARDUINO_SAMD_MKRWAN1310) + #include + #define NETWORK_ID_SIZE 8 #elif defined(ARDUINO_PORTENTA_C33) #include - #define IFACE_MAC_ADDR_LENGTH WL_MAC_ADDR_LENGTH + #define NETWORK_ID_SIZE WL_MAC_ADDR_LENGTH #elif defined(ARDUINO_UNOR4_WIFI) #include - #define IFACE_MAC_ADDR_LENGTH 6 + #define NETWORK_ID_SIZE 6 #elif defined(ARDUINO_OPTA) #include - #define IFACE_MAC_ADDR_LENGTH 6 + #define NETWORK_ID_SIZE 6 #else - #define IFACE_MAC_ADDR_LENGTH 0 + #define NETWORK_ID_SIZE 0 #endif /* @@ -48,4 +60,14 @@ class networkId { public: bool begin(); bool get(uint8_t *in, uint32_t size); + +private: +#if defined(ARDUINO_SAMD_MKRNB1500) + NBModem _modem; +#elif defined(ARDUINO_SAMD_MKRGSM1400) + GSMModem _modem; +#elif defined(ARDUINO_SAMD_MKRWAN1300) || \ + defined(ARDUINO_SAMD_MKRWAN1310) + LoRaModem _modem; +#endif }; diff --git a/src/uniqueHWId.cpp b/src/uniqueHWId.cpp index 1105b47..37d6ed4 100644 --- a/src/uniqueHWId.cpp +++ b/src/uniqueHWId.cpp @@ -29,7 +29,7 @@ bool UniqueHWId::get(uint8_t* in, uint32_t size) { if (!_nId.get(&in[offset], size - offset)) { return false; } - offset += IFACE_MAC_ADDR_LENGTH; + offset += NETWORK_ID_SIZE; if (!_sId.get(&in[offset], size - offset)) { return false; } diff --git a/src/uniqueHWId.h b/src/uniqueHWId.h index 13bf504..cb47557 100644 --- a/src/uniqueHWId.h +++ b/src/uniqueHWId.h @@ -21,7 +21,7 @@ class UniqueHWId { public: static constexpr int BOARD_PROVISIONING_ID_SIZE = UC_UID_SIZE + - IFACE_MAC_ADDR_LENGTH + + NETWORK_ID_SIZE + CRYPTO_SN_SIZE; bool begin();