Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
revoxhere
GitHub Repository: revoxhere/duino-coin
Path: blob/master/Arduino_Code/uniqueID.h
925 views
1
// Copyright © Luiz Henrique Cassettari. All rights reserved.
2
// Licensed under the MIT license.
3
4
#pragma GCC optimize ("-Ofast")
5
6
#ifndef _ARDUINO_UNIQUE_ID_H_
7
#define _ARDUINO_UNIQUE_ID_H_
8
9
#include <Arduino.h>
10
11
#if defined(ARDUINO_ARCH_AVR)
12
#include <avr/boot.h>
13
#ifndef SIGRD
14
#define SIGRD 5
15
#endif
16
#elif defined(ARDUINO_ARCH_ESP8266)
17
#elif defined(ARDUINO_ARCH_ESP32)
18
#elif defined(ARDUINO_ARCH_SAM)
19
#elif defined(ARDUINO_ARCH_SAMD)
20
#elif defined(ARDUINO_ARCH_STM32)
21
#elif defined(TEENSYDUINO)
22
#elif defined(ARDUINO_ARCH_MBED_RP2040) || defined(ARDUINO_ARCH_RP2040)
23
//#include <pico/unique_id.h>
24
#elif defined(ARDUINO_ARCH_MEGAAVR)
25
#else
26
#error "ArduinoUniqueID only works on AVR, SAM, SAMD, STM32, Teensy, megaAVR and ESP Architecture"
27
#endif
28
29
#if defined(ARDUINO_ARCH_AVR)
30
31
#if defined(__AVR_ATmega328PB__)
32
#define UniqueIDsize 10
33
#else
34
#define UniqueIDsize 9
35
#endif
36
37
#define UniqueIDbuffer UniqueIDsize
38
39
#elif defined(ARDUINO_ARCH_ESP8266)
40
#define UniqueIDsize 4
41
#define UniqueIDbuffer 8
42
#elif defined(ARDUINO_ARCH_ESP32)
43
#define UniqueIDsize 6
44
#define UniqueIDbuffer 8
45
#elif defined(ARDUINO_ARCH_SAM)
46
#define UniqueIDsize 16
47
#define UniqueIDbuffer 16
48
#elif defined(ARDUINO_ARCH_SAMD)
49
#define UniqueIDsize 16
50
#define UniqueIDbuffer 16
51
#elif defined(ARDUINO_ARCH_STM32)
52
#define UniqueIDsize 12
53
#define UniqueIDbuffer 12
54
#elif defined(ARDUINO_TEENSY40) || defined (ARDUINO_TEENSY41)
55
#define UniqueIDsize 8
56
#define UniqueIDbuffer 8
57
#elif defined(TEENSYDUINO)
58
#define UniqueIDsize 16
59
#define UniqueIDbuffer 16
60
#elif defined(ARDUINO_ARCH_MBED_RP2040) || defined(ARDUINO_ARCH_RP2040)
61
#define UniqueIDsize 32
62
#define UniqueIDbuffer 32
63
#elif defined(ARDUINO_ARCH_MEGAAVR)
64
#define UniqueIDsize 10
65
#define UniqueIDbuffer 10
66
#endif
67
68
#define UniqueID8 (_UniqueID.id + UniqueIDbuffer - 8)
69
#define UniqueID (_UniqueID.id + UniqueIDbuffer - UniqueIDsize)
70
71
#define UniqueIDdump(stream) \
72
{ \
73
stream.print("UniqueID: "); \
74
for (size_t i = 0; i < UniqueIDsize; i++) \
75
{ \
76
if (UniqueID[i] < 0x10) \
77
stream.print("0"); \
78
stream.print(UniqueID[i], HEX); \
79
stream.print(" "); \
80
} \
81
stream.println(); \
82
}
83
84
#define UniqueID8dump(stream) \
85
{ \
86
stream.print("UniqueID: "); \
87
for (size_t i = 0; i < 8; i++) \
88
{ \
89
if (UniqueID8[i] < 0x10) \
90
stream.print("0"); \
91
stream.print(UniqueID8[i], HEX); \
92
stream.print(" "); \
93
} \
94
stream.println(); \
95
}
96
97
class ArduinoUniqueID
98
{
99
public:
100
ArduinoUniqueID();
101
uint8_t id[UniqueIDbuffer];
102
};
103
104
extern ArduinoUniqueID _UniqueID;
105
106
#endif
107
108