Skip to content

Commit 60e8a88

Browse files
committed
Edge Control: add board support
1 parent 7b48336 commit 60e8a88

File tree

7 files changed

+130
-11
lines changed

7 files changed

+130
-11
lines changed

.github/workflows/compile-examples.yml

+8
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ jobs:
7070
type: renesas_uno
7171
- fqbn: arduino:esp32:nano_nora
7272
type: arduino_esp32
73+
- fqbn: arduino:mbed_edge:edge_control
74+
type: mbed_edge
7375

7476

7577
# make board type-specific customizations to the matrix jobs
@@ -212,6 +214,12 @@ jobs:
212214
- name: Arduino_ESP32_OTA
213215
sketch-paths: |
214216
- examples/ArduinoIoTCloud-DeferredOTA
217+
# Edge Control
218+
- board:
219+
type: mbed_edge
220+
platforms: |
221+
# Install mbed_edge platform via Boards Manager
222+
- name: arduino:mbed_edge
215223
# ESP8266 boards
216224
- board:
217225
type: esp8266

library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ sentence=This library allows connecting to the Arduino IoT Cloud service.
66
paragraph=It provides a ConnectionManager to handle connection/disconnection, property-change updates and events callbacks. The supported boards are MKR GSM, MKR1000 and WiFi101.
77
category=Communication
88
url=https://github.com/arduino-libraries/ArduinoIoTCloud
9-
architectures=mbed,samd,esp8266,mbed_nano,mbed_portenta,mbed_nicla,esp32,mbed_opta,mbed_giga,renesas_portenta,renesas_uno
9+
architectures=mbed,samd,esp8266,mbed_nano,mbed_portenta,mbed_nicla,esp32,mbed_opta,mbed_giga,renesas_portenta,renesas_uno,mbed_edge
1010
includes=ArduinoIoTCloud.h
1111
depends=Arduino_ConnectionHandler,Arduino_DebugUtils,ArduinoMqttClient,ArduinoECCX08,RTCZero,Adafruit SleepyDog Library,Arduino_ESP32_OTA,Arduino_Portenta_OTA

src/AIoTC_Config.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151
#define BOARD_STM32H7
152152
#endif
153153

154-
#if defined(ARDUINO_UNOR4_WIFI)
154+
#if defined(ARDUINO_UNOR4_WIFI) || defined(ARDUINO_EDGE_CONTROL)
155155
#define BOARD_HAS_SECRET_KEY
156156
#define HAS_TCP
157157
#endif

src/ArduinoIoTCloudTCP.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
#include "tls/utility/CryptoUtil.h"
4040
#endif
4141

42-
#ifdef ARDUINO_ARCH_ESP32
42+
#ifdef BOARD_HAS_SECRET_KEY
4343
#include "tls/AIoTCUPCert.h"
4444
#endif
4545

@@ -172,6 +172,8 @@ int ArduinoIoTCloudTCP::begin(bool const enable_watchdog, String brokerAddress,
172172
#else
173173
_sslClient.setCACertBundle(x509_crt_bundle);
174174
#endif
175+
#elif defined(ARDUINO_EDGE_CONTROL)
176+
_sslClient.appendCustomCACert(AIoTUPCert);
175177
#endif
176178

177179
_mqttClient.setClient(_sslClient);

src/ArduinoIoTCloudTCP.h

+2
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
152152
WiFiClientSecure _sslClient;
153153
#elif defined(ARDUINO_UNOR4_WIFI)
154154
WiFiSSLClient _sslClient;
155+
#elif defined(ARDUINO_EDGE_CONTROL)
156+
GSMSSLClient _sslClient;
155157
#elif defined(ARDUINO_PORTENTA_C33)
156158
ArduinoIoTCloudCertClass _cert;
157159
SSLClient _sslClient;

src/tls/AIoTCUPCert.h

+110
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,116 @@ static const unsigned char x509_crt_bundle[] = {
226226
};
227227
unsigned int x509_crt_bundle_len = 2164;
228228

229+
#elif defined (ARDUINO_EDGE_CONTROL)
230+
/*
231+
* https://www.amazontrust.com/repository/AmazonRootCA1.pem
232+
* https://www.amazontrust.com/repository/AmazonRootCA2.pem
233+
* https://www.amazontrust.com/repository/AmazonRootCA3.pem
234+
* https://www.amazontrust.com/repository/AmazonRootCA4.pem
235+
* https://www.amazontrust.com/repository/SFSRootCAG2.pem
236+
*/
237+
static const char AIoTUPCert[] =
238+
"-----BEGIN CERTIFICATE-----\n"
239+
"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n"
240+
"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n"
241+
"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n"
242+
"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n"
243+
"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n"
244+
"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n"
245+
"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n"
246+
"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n"
247+
"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n"
248+
"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n"
249+
"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n"
250+
"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n"
251+
"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n"
252+
"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n"
253+
"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n"
254+
"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n"
255+
"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n"
256+
"rqXRfboQnoZsG4q5WTP468SQvvG5\n"
257+
"-----END CERTIFICATE-----\n"
258+
"-----BEGIN CERTIFICATE-----\n"
259+
"MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF\n"
260+
"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n"
261+
"b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL\n"
262+
"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n"
263+
"b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK\n"
264+
"gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ\n"
265+
"W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg\n"
266+
"1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K\n"
267+
"8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r\n"
268+
"2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me\n"
269+
"z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR\n"
270+
"8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj\n"
271+
"mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz\n"
272+
"7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6\n"
273+
"+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI\n"
274+
"0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n"
275+
"Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm\n"
276+
"UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2\n"
277+
"LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY\n"
278+
"+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS\n"
279+
"k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl\n"
280+
"7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm\n"
281+
"btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl\n"
282+
"urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+\n"
283+
"fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63\n"
284+
"n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE\n"
285+
"76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H\n"
286+
"9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT\n"
287+
"4PsJYGw=\n"
288+
"-----END CERTIFICATE-----\n"
289+
"-----BEGIN CERTIFICATE-----\n"
290+
"MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n"
291+
"MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n"
292+
"Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n"
293+
"A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n"
294+
"Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n"
295+
"ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n"
296+
"QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n"
297+
"ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n"
298+
"BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n"
299+
"YyRIHN8wfdVoOw==\n"
300+
"-----END CERTIFICATE-----\n"
301+
"-----BEGIN CERTIFICATE-----\n"
302+
"MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\n"
303+
"MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n"
304+
"Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n"
305+
"A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n"
306+
"Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\n"
307+
"9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\n"
308+
"M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\n"
309+
"/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\n"
310+
"MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\n"
311+
"CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\n"
312+
"1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n"
313+
"-----END CERTIFICATE-----\n"
314+
"-----BEGIN CERTIFICATE-----\n"
315+
"MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx\n"
316+
"EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\n"
317+
"HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs\n"
318+
"ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\n"
319+
"MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD\n"
320+
"VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy\n"
321+
"ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy\n"
322+
"dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\n"
323+
"hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p\n"
324+
"OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2\n"
325+
"8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K\n"
326+
"Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe\n"
327+
"hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk\n"
328+
"6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw\n"
329+
"DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q\n"
330+
"AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI\n"
331+
"bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB\n"
332+
"ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z\n"
333+
"qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\n"
334+
"iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn\n"
335+
"0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN\n"
336+
"sSi6\n"
337+
"-----END CERTIFICATE-----\n";
338+
#else
229339

230340
#endif /* #ifdef ARDUINO_ARCH_ESP32 */
231341

src/utility/watchdog/Watchdog.cpp

+5-8
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@
3434

3535
#ifdef ARDUINO_ARCH_MBED
3636
# include <watchdog_api.h>
37-
# define PORTENTA_H7_WATCHDOG_MAX_TIMEOUT_ms (32760)
38-
# define NANO_RP2040_WATCHDOG_MAX_TIMEOUT_ms (8389)
37+
# define PORTENTA_H7_WATCHDOG_MAX_TIMEOUT_ms (32760)
38+
# define NANO_RP2040_WATCHDOG_MAX_TIMEOUT_ms (8389)
39+
# define EDGE_CONTROL_WATCHDOG_MAX_TIMEOUT_ms (32760)
3940
#endif /* ARDUINO_ARCH_MBED */
4041

4142
#include <Arduino_ConnectionHandler.h>
@@ -97,6 +98,8 @@ static void mbed_watchdog_enable()
9798
cfg.timeout_ms = PORTENTA_H7_WATCHDOG_MAX_TIMEOUT_ms;
9899
#elif defined(ARDUINO_NANO_RP2040_CONNECT)
99100
cfg.timeout_ms = NANO_RP2040_WATCHDOG_MAX_TIMEOUT_ms;
101+
#elif defined(ARDUINO_EDGE_CONTROL)
102+
cfg.timeout_ms = EDGE_CONTROL_WATCHDOG_MAX_TIMEOUT_ms;
100103
#else
101104
# error "You need to define the maximum possible timeout for this architecture."
102105
#endif
@@ -132,13 +135,7 @@ static void mbed_watchdog_enable_network_feed(const bool use_ethernet)
132135
void mbed_watchdog_trigger_reset()
133136
{
134137
watchdog_config_t cfg;
135-
#if defined(BOARD_STM32H7)
136-
cfg.timeout_ms = 1;
137-
#elif defined(ARDUINO_NANO_RP2040_CONNECT)
138138
cfg.timeout_ms = 1;
139-
#else
140-
# error "You need to define the maximum possible timeout for this architecture."
141-
#endif
142139

143140
if (hal_watchdog_init(&cfg) == WATCHDOG_STATUS_OK) {
144141
is_watchdog_enabled = true;

0 commit comments

Comments
 (0)