1
+ /*
2
+ This file is part of the Arduino_CloudUtils library.
3
+
4
+ Copyright (c) 2024 Arduino SA
5
+
6
+ This Source Code Form is subject to the terms of the Mozilla Public
7
+ License, v. 2.0. If a copy of the MPL was not distributed with this
8
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+ */
10
+
11
+ #include " ucid.h"
12
+
13
+ namespace arduino { namespace ucid {
14
+
15
+ bool get (uint8_t *in, uint32_t size) {
16
+ if (size < UC_UID_SIZE) {
17
+ return false ;
18
+ }
19
+ #if defined(ARDUINO_SAMD_MKRWIFI1010) || \
20
+ defined (ARDUINO_SAMD_NANO_33_IOT)
21
+ (*(uint32_t *)(&in[0x0 ])) = __builtin_bswap32 (*(volatile uint32_t *)(0x0080A00C ));
22
+ (*(uint32_t *)(&in[0x4 ])) = __builtin_bswap32 (*(volatile uint32_t *)(0x0080A040 ));
23
+ (*(uint32_t *)(&in[0x8 ])) = __builtin_bswap32 (*(volatile uint32_t *)(0x0080A044 ));
24
+ (*(uint32_t *)(&in[0xC ])) = __builtin_bswap32 (*(volatile uint32_t *)(0x0080A048 ));
25
+ #elif defined(ARDUINO_PORTENTA_H7_M7) || \
26
+ defined (ARDUINO_NICLA_VISION) || \
27
+ defined (ARDUINO_OPTA) || \
28
+ defined (ARDUINO_GIGA)
29
+ (*(uint32_t *)(&in[0x0 ])) = __builtin_bswap32 (HAL_GetUIDw0 ());
30
+ (*(uint32_t *)(&in[0x4 ])) = __builtin_bswap32 (HAL_GetUIDw1 ());
31
+ (*(uint32_t *)(&in[0x8 ])) = __builtin_bswap32 (HAL_GetUIDw2 ());
32
+ #elif defined(ARDUINO_PORTENTA_C33) || \
33
+ defined (ARDUINO_UNOR4_WIFI)
34
+ const bsp_unique_id_t * t = R_BSP_UniqueIdGet ();
35
+ (*(uint32_t *)(&in[0x0 ])) = __builtin_bswap32 (t->unique_id_words [0x0 ]);
36
+ (*(uint32_t *)(&in[0x4 ])) = __builtin_bswap32 (t->unique_id_words [0x1 ]);
37
+ (*(uint32_t *)(&in[0x8 ])) = __builtin_bswap32 (t->unique_id_words [0x2 ]);
38
+ (*(uint32_t *)(&in[0xC ])) = __builtin_bswap32 (t->unique_id_words [0x3 ]);
39
+ #elif defined(ARDUINO_NANO_RP2040_CONNECT)
40
+ uint8_t id[UC_UID_SIZE];
41
+ flash_get_unique_id (id);
42
+ (*(uint32_t *)(&in[0x0 ])) = __builtin_bswap32 (*(uint32_t *)&id[0x0 ]);
43
+ (*(uint32_t *)(&in[0x4 ])) = __builtin_bswap32 (*(uint32_t *)&id[0x4 ]);
44
+ #endif
45
+ return true ;
46
+ }
47
+
48
+ }} // arduino::ucid
0 commit comments