Skip to content

Commit 7e1bfeb

Browse files
authored
Merge pull request #7 from arduino-libraries/networkId
NetworkId refactor and MKR board support
2 parents b8005de + 87036a5 commit 7e1bfeb

File tree

5 files changed

+77
-34
lines changed

5 files changed

+77
-34
lines changed

.github/workflows/compile-examples.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ jobs:
2020
# libraries to install for all boards
2121
UNIVERSAL_LIBRARIES: |
2222
- source-path: ./
23-
- name: Arduino_CloudUtils
2423
- name: Arduino_SecureElement
24+
- source-url: https://github.com/arduino/Arduino_CloudUtils.git
25+
version: 0.0.1
2526
# sketch paths to compile (recursive) for all boards
2627
UNIVERSAL_SKETCH_PATHS: |
2728
- examples/uniqueHWId

src/networkId.cpp

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,72 @@
99
*/
1010

1111
#include "networkId.h"
12+
#include <Arduino_HEX.h>
1213

1314
bool networkId::begin() {
14-
#if defined(ARDUINO_SAMD_MKRWIFI1010) || \
15-
defined(ARDUINO_SAMD_NANO_33_IOT)
16-
WiFi.setTimeout(0);
17-
return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35");
18-
#elif defined(ARDUINO_PORTENTA_H7_M7) || \
19-
defined(ARDUINO_NICLA_VISION) || \
20-
defined(ARDUINO_GIGA)
21-
WiFi.setTimeout(0);
22-
return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35", ENC_TYPE_TKIP);
23-
#elif defined(ARDUINO_PORTENTA_C33) || \
15+
#if defined(ARDUINO_NANO_RP2040_CONNECT) || \
16+
defined(ARDUINO_SAMD_MKRWIFI1010) || \
17+
defined(ARDUINO_SAMD_NANO_33_IOT) || \
2418
defined(ARDUINO_UNOR4_WIFI)
2519
WiFi.setTimeout(0);
26-
return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35");
27-
#elif defined(ARDUINO_NANO_RP2040_CONNECT)
20+
int result = WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35");
21+
WiFi.setTimeout(10000);
22+
return (result != WL_NO_SHIELD) ? true : false;
23+
#elif defined(ARDUINO_PORTENTA_C33)
24+
return true;
25+
#elif defined(ARDUINO_SAMD_MKRNB1500)
26+
return _modem.begin();
27+
#elif defined(ARDUINO_SAMD_MKRGSM1400)
28+
return _modem.begin();
29+
#elif defined(ARDUINO_SAMD_MKRWAN1300) || \
30+
defined(ARDUINO_SAMD_MKRWAN1310)
31+
return _modem.begin(EU868);
32+
#elif defined(ARDUINO_PORTENTA_H7_M7) || \
33+
defined(ARDUINO_NICLA_VISION) || \
34+
defined(ARDUINO_GIGA)
2835
WiFi.setTimeout(0);
29-
return !!WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35");
36+
int result = WiFi.begin("In33dm4c4ddr35", "In33dm4c4ddr35", ENC_TYPE_TKIP);
37+
WiFi.setTimeout(10000);
38+
return ( result != WL_NO_SHIELD) ? true : false;
3039
#elif defined(ARDUINO_OPTA)
31-
return !!Ethernet.begin(NULL, 0, 0);
40+
Ethernet.begin(NULL, 0, 0);
41+
return true;
42+
#else
43+
return false;
3244
#endif
3345
}
3446

3547
bool networkId::get(uint8_t *in, uint32_t size) {
36-
#if IFACE_MAC_ADDR_LENGTH == 0
48+
#if NETWORK_ID_SIZE == 0
3749
(void)in;
3850
(void)size;
3951
return false;
4052
#else
41-
if (size < IFACE_MAC_ADDR_LENGTH) {
53+
if (size < NETWORK_ID_SIZE) {
4254
return false;
4355
}
44-
#if defined(ARDUINO_SAMD_MKRWIFI1010) || \
45-
defined(ARDUINO_SAMD_NANO_33_IOT)
46-
WiFi.macAddress(in);
47-
#elif defined(ARDUINO_PORTENTA_H7_M7) || \
48-
defined(ARDUINO_NICLA_VISION) || \
56+
#if defined(ARDUINO_NANO_RP2040_CONNECT) || \
57+
defined(ARDUINO_SAMD_MKRWIFI1010) || \
58+
defined(ARDUINO_SAMD_NANO_33_IOT) || \
59+
defined(ARDUINO_PORTENTA_C33) || \
60+
defined(ARDUINO_UNOR4_WIFI) || \
61+
defined(ARDUINO_PORTENTA_H7_M7) || \
62+
defined(ARDUINO_NICLA_VISION) || \
4963
defined(ARDUINO_GIGA)
5064
WiFi.macAddress(in);
51-
#elif defined(ARDUINO_PORTENTA_C33) || \
52-
defined(ARDUINO_UNOR4_WIFI)
53-
WiFi.macAddress(in);
54-
#elif defined(ARDUINO_NANO_RP2040_CONNECT)
55-
WiFi.macAddress(in);
5665
#elif defined(ARDUINO_OPTA)
5766
Ethernet.MACAddress(in);
67+
#elif defined(ARDUINO_SAMD_MKRNB1500) || \
68+
defined(ARDUINO_SAMD_MKRGSM1400)
69+
String imei = _modem.getIMEI();
70+
/* Remove luhn check digit to keep things even */
71+
imei.remove(15);
72+
THEXT::decode(imei, in, size);
73+
#elif defined(ARDUINO_SAMD_MKRWAN1300) || \
74+
defined(ARDUINO_SAMD_MKRWAN1310)
75+
return THEXT::decode(_modem.deviceEUI(), in, size);
76+
#else
77+
return false;
5878
#endif
5979
return true;
6080
#endif

src/networkId.h

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,30 @@
1717
defined(ARDUINO_NICLA_VISION) || \
1818
defined(ARDUINO_GIGA)
1919
#include <WiFi.h>
20-
#define IFACE_MAC_ADDR_LENGTH WL_MAC_ADDR_LENGTH
20+
#define NETWORK_ID_SIZE WL_MAC_ADDR_LENGTH
21+
#elif defined(ARDUINO_SAMD_MKRNB1500)
22+
#include <MKRNB.h>
23+
/* We don't take in account Luhn check digit */
24+
#define NETWORK_ID_SIZE 7
25+
#elif defined(ARDUINO_SAMD_MKRGSM1400)
26+
#include <MKRGSM.h>
27+
/* We don't take in account Luhn check digit */
28+
#define NETWORK_ID_SIZE 7
29+
#elif defined(ARDUINO_SAMD_MKRWAN1300) || \
30+
defined(ARDUINO_SAMD_MKRWAN1310)
31+
#include <MKRWAN.h>
32+
#define NETWORK_ID_SIZE 8
2133
#elif defined(ARDUINO_PORTENTA_C33)
2234
#include <WiFiC3.h>
23-
#define IFACE_MAC_ADDR_LENGTH WL_MAC_ADDR_LENGTH
35+
#define NETWORK_ID_SIZE WL_MAC_ADDR_LENGTH
2436
#elif defined(ARDUINO_UNOR4_WIFI)
2537
#include <WiFi.h>
26-
#define IFACE_MAC_ADDR_LENGTH 6
38+
#define NETWORK_ID_SIZE 6
2739
#elif defined(ARDUINO_OPTA)
2840
#include <Ethernet.h>
29-
#define IFACE_MAC_ADDR_LENGTH 6
41+
#define NETWORK_ID_SIZE 6
3042
#else
31-
#define IFACE_MAC_ADDR_LENGTH 0
43+
#define NETWORK_ID_SIZE 0
3244
#endif
3345

3446
/*
@@ -48,4 +60,14 @@ class networkId {
4860
public:
4961
bool begin();
5062
bool get(uint8_t *in, uint32_t size);
63+
64+
private:
65+
#if defined(ARDUINO_SAMD_MKRNB1500)
66+
NBModem _modem;
67+
#elif defined(ARDUINO_SAMD_MKRGSM1400)
68+
GSMModem _modem;
69+
#elif defined(ARDUINO_SAMD_MKRWAN1300) || \
70+
defined(ARDUINO_SAMD_MKRWAN1310)
71+
LoRaModem _modem;
72+
#endif
5173
};

src/uniqueHWId.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ bool UniqueHWId::get(uint8_t* in, uint32_t size) {
2929
if (!_nId.get(&in[offset], size - offset)) {
3030
return false;
3131
}
32-
offset += IFACE_MAC_ADDR_LENGTH;
32+
offset += NETWORK_ID_SIZE;
3333
if (!_sId.get(&in[offset], size - offset)) {
3434
return false;
3535
}

src/uniqueHWId.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class UniqueHWId {
2121

2222
public:
2323
static constexpr int BOARD_PROVISIONING_ID_SIZE = UC_UID_SIZE +
24-
IFACE_MAC_ADDR_LENGTH +
24+
NETWORK_ID_SIZE +
2525
CRYPTO_SN_SIZE;
2626

2727
bool begin();

0 commit comments

Comments
 (0)