Files
Arduino/libraries/Adafruit_IO_Arduino/src/util/AdafruitIO_Board.cpp
Jérôme Delacotte 7b30d6e298 first commit
2025-03-06 11:15:32 +01:00

145 lines
4.1 KiB
C++

/*!
* @file AdafruitIO_Board.cpp
*
* This is part of the Adafruit IO library for the Arduino platform.
*
* Adafruit invests time and resources providing this open source code,
* please support Adafruit and open-source hardware by purchasing
* products from Adafruit!
*
* Written by Tony DiCola, Todd Treece for Adafruit Industries
*
* MIT license, all text here must be included in any redistribution.
*
*/
#include "AdafruitIO_Board.h"
char AdafruitIO_Board::_id[64] = "";
#if defined(ARDUINO_SAMD_MKR1000)
const char AdafruitIO_Board::_type[] = "mkr1000";
#elif defined(ARDUINO_SAMD_FEATHER_M0)
const char AdafruitIO_Board::_type[] = "feather_m0";
#elif defined(ARDUINO_AVR_FEATHER32U4)
const char AdafruitIO_Board::_type[] = "feather_32u4";
#elif defined(ARDUINO_STM32_FEATHER)
const char AdafruitIO_Board::_type[] = "feather_wiced";
#elif defined(ARDUINO_ARCH_ESP32)
#include <WiFi.h>
const char AdafruitIO_Board::_type[] = "esp32";
#elif defined(ESP8266)
const char AdafruitIO_Board::_type[] = "esp8266";
#else
const char AdafruitIO_Board::_type[] = "unknown";
#endif
/**************************************************************************/
/*!
@brief Returns a unique board identifier based on the
CPU characteristics.
@return Unique board identifier.
*/
/**************************************************************************/
const char *AdafruitIO_Board::type() { return AdafruitIO_Board::_type; }
#if defined(ARDUINO_ARCH_SAMD)
/*******************************************************/
/*!
@brief Assigns an identifier to a SAMD-based board.
@return board identifier, id.
*/
/*******************************************************/
char *AdafruitIO_Board::id() {
volatile uint32_t val1, val2, val3, val4;
volatile uint32_t *ptr1 = (volatile uint32_t *)0x0080A00C;
val1 = *ptr1;
volatile uint32_t *ptr = (volatile uint32_t *)0x0080A040;
val2 = *ptr;
ptr++;
val3 = *ptr;
ptr++;
val4 = *ptr;
sprintf(AdafruitIO_Board::_id, "%8x%8x%8x%8x", val1, val2, val3, val4);
return AdafruitIO_Board::_id;
}
#elif defined(ARDUINO_ARCH_AVR)
/*******************************************************/
/*!
@brief Assigns an identifier to an AVR-based board
from boot_signature.
@return board identifier, id.
*/
/*******************************************************/
char *AdafruitIO_Board::id() {
for (int i = 0; i < 32; i++) {
sprintf(&AdafruitIO_Board::_id[i * 2], "%02x", boot_signature_byte_get(i));
}
return AdafruitIO_Board::_id;
}
#elif defined(ARDUINO_ARCH_ESP32)
/*******************************************************/
/*!
@brief Assigns an identifier to an ESP32-based
board from the MAC address.
@return board identifier, id.
*/
/*******************************************************/
char *AdafruitIO_Board::id() {
byte mac[6];
WiFi.macAddress(mac);
for (int i = 0; i < 6; i++) {
sprintf(&AdafruitIO_Board::_id[i * 2], "%02x", mac[i]);
}
return AdafruitIO_Board::_id;
}
#elif defined(ESP8266)
/*******************************************************/
/*!
@brief Assigns an identifier to an ESP8266 from
the chip identifier.
@return board identifier, id.
*/
/*******************************************************/
char *AdafruitIO_Board::id() {
sprintf(AdafruitIO_Board::_id, "%06x", ESP.getChipId());
return AdafruitIO_Board::_id;
}
#elif defined(ARDUINO_STM32_FEATHER)
/*******************************************************/
/*!
@brief Assigns an identifier to a STM32 Feather.
@return board identifier, id.
*/
/*******************************************************/
char *AdafruitIO_Board::id() {
uint32_t *p_unique_id = (uint32_t *)(0x1FFF7A10);
sprintf(AdafruitIO_Board::_id, "%08lX%08lX%08lX", p_unique_id[2],
p_unique_id[1], p_unique_id[0]);
return AdafruitIO_Board::_id;
}
#else
/*******************************************************/
/*!
@brief Identifies an unknown board type.
@return "unknown"
*/
/*******************************************************/
char *AdafruitIO_Board::id() {
strcpy(AdafruitIO_Board::_id, "unknown");
return AdafruitIO_Board::_id;
}
#endif