Skip to content

Commit

Permalink
Add support for ATtiny 3224/7 (#1535)
Browse files Browse the repository at this point in the history
* Add hal for megaAvrs

* Add mcu selector setting

* Register hal

* Pull up pins to save power

* Remove dead code

* Add before/after sleep delegates

* Remove pin turn stable state setting

* Make hardware messages mysensors alike

* Enable route size reduction for devices with smaller eeprom

* Add macro for routes size to keywords

* Fix keyworkds.txt - using tabs instead of spaces

* Remove tinyAVR hardware debugging

* Remove unused macros

* Remove .history folder

* Fix formatting according to astyle

* Remove unused count variable

* Update MyTransportHAL.cpp

---------

Co-authored-by: Olivier <[email protected]>
  • Loading branch information
lyuboasenov and tekka007 authored Oct 12, 2023
1 parent aa3583c commit 8d45e7b
Show file tree
Hide file tree
Showing 13 changed files with 579 additions and 27 deletions.
6 changes: 3 additions & 3 deletions MyASM.S
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
doNothing:
nop
.size doNothing, .-doNothing

#elif defined(ARDUINO_ARCH_NRF5)
/* workaround to prevent compiler error */
.thumb_func
doNothing:
nop
.size doNothing, .-doNothing
#elif defined(ARDUINO_ARCH_AVR)

#elif defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)

#include "hal/crypto/AVR/drivers/SHA256/SHA256.S"

Expand Down
13 changes: 13 additions & 0 deletions MyConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -2607,6 +2607,12 @@
*/
#define ARDUINO_ARCH_AVR

/**
* @def ARDUINO_ARCH_MEGAAVR
* @brief Automatically set when building for megaAVR targets
*/
#define ARDUINO_ARCH_MEGAAVR

/**
* @def ARDUINO_ARCH_STM32F1
* @brief Automatically set when building for STM32F1 targets
Expand Down Expand Up @@ -2778,5 +2784,12 @@
#define MY_SX126x_MAX_POWER_LEVEL_DBM
// SOFT-SPI
#define MY_SOFTSPI

/**
* @def MY_ROUTES_SIZE
* @brief Specifies the size allocated for routing table
*/
#define MY_ROUTES_SIZE

#endif
/** @}*/ // End of MyConfig group
9 changes: 7 additions & 2 deletions MySensors.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@
#elif defined(ARDUINO_ARCH_AVR)
#include "hal/architecture/AVR/MyHwAVR.cpp"
#include "hal/crypto/AVR/MyCryptoAVR.cpp"
#elif defined(ARDUINO_ARCH_MEGAAVR)
#include "hal/architecture/AVR/MyHwMegaAVR.cpp"
#include "hal/crypto/AVR/MyCryptoAVR.cpp"
#elif defined(ARDUINO_ARCH_SAMD)
#include "drivers/extEEPROM/extEEPROM.cpp"
#include "hal/architecture/SAMD/MyHwSAMD.cpp"
Expand Down Expand Up @@ -335,8 +338,8 @@ MY_DEFAULT_RX_LED_PIN in your sketch instead to enable LEDs
// activate feature based on architecture
#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_NRF5) || defined(ARDUINO_ARCH_STM32F1) || defined(TEENSYDUINO) || defined(__linux__) || defined(__ASR6501__) || defined (__ASR6502__)
#define MY_RAM_ROUTING_TABLE_ENABLED
#elif defined(ARDUINO_ARCH_AVR)
#if defined(__avr_atmega1280__) || defined(__avr_atmega1284__) || defined(__avr_atmega2560__)
#elif defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
#if defined(__avr_atmega1280__) || defined(__avr_atmega1284__) || defined(__avr_atmega2560__) || defined(__avr_attiny3224__) || defined(__avr_attiny3227__)
// >4kb, enable it
#define MY_RAM_ROUTING_TABLE_ENABLED
#else
Expand Down Expand Up @@ -457,6 +460,8 @@ MY_DEFAULT_RX_LED_PIN in your sketch instead to enable LEDs
// HW mains
#if defined(ARDUINO_ARCH_AVR)
#include "hal/architecture/AVR/MyMainAVR.cpp"
#elif defined(ARDUINO_ARCH_MEGAAVR)
#include "hal/architecture/AVR/MyMainAVR.cpp"
#elif defined(ARDUINO_ARCH_SAMD)
#include "hal/architecture/SAMD/MyMainSAMD.cpp"
#elif defined(ARDUINO_ARCH_ESP8266)
Expand Down
2 changes: 1 addition & 1 deletion core/MyCapabilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@
#define MY_CAP_ARCH "E"
#elif defined(ARDUINO_ARCH_ESP32)
#define MY_CAP_ARCH "F"
#elif defined(ARDUINO_ARCH_AVR)
#elif defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
#define MY_CAP_ARCH "A"
#elif defined(ARDUINO_ARCH_STM32F1)
#define MY_CAP_ARCH "M"
Expand Down
32 changes: 18 additions & 14 deletions core/MyEepromAddresses.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,26 @@
#define MyEepromAddresses_h

// EEPROM variable sizes, in bytes
#define SIZE_NODE_ID (1u) //!< Size node ID
#define SIZE_PARENT_NODE_ID (1u) //!< Size parent node ID
#define SIZE_DISTANCE (1u) //!< Size GW distance
#define SIZE_ROUTES (256u) //!< Size routing table
#define SIZE_CONTROLLER_CONFIG (23u) //!< Size controller config
#define SIZE_PERSONALIZATION_CHECKSUM (1u) //!< Size personalization checksum
#define SIZE_FIRMWARE_TYPE (2u) //!< Size firmware type
#define SIZE_FIRMWARE_VERSION (2u) //!< Size firmware version
#define SIZE_FIRMWARE_BLOCKS (2u) //!< Size firmware blocks
#define SIZE_FIRMWARE_CRC (2u) //!< Size firmware CRC
#define SIZE_NODE_ID (1u) //!< Size node ID
#define SIZE_PARENT_NODE_ID (1u) //!< Size parent node ID
#define SIZE_DISTANCE (1u) //!< Size GW distance
#ifdef MY_ROUTES_SIZE
#define SIZE_ROUTES (MY_ROUTES_SIZE) //!< Size routing table 148 is the
#else
#define SIZE_ROUTES (256u) //!< Size routing table 148 is the
#endif
#define SIZE_CONTROLLER_CONFIG (23u) //!< Size controller config
#define SIZE_PERSONALIZATION_CHECKSUM (1u) //!< Size personalization checksum
#define SIZE_FIRMWARE_TYPE (2u) //!< Size firmware type
#define SIZE_FIRMWARE_VERSION (2u) //!< Size firmware version
#define SIZE_FIRMWARE_BLOCKS (2u) //!< Size firmware blocks
#define SIZE_FIRMWARE_CRC (2u) //!< Size firmware CRC
#define SIZE_SIGNING_REQUIREMENT_TABLE (32u) //!< Size signing requirement table
#define SIZE_WHITELIST_REQUIREMENT_TABLE (32u) //!< Size whitelist requirement table
#define SIZE_SIGNING_SOFT_HMAC_KEY (32u) //!< Size soft signing HMAC key
#define SIZE_SIGNING_SOFT_SERIAL (9u) //!< Size soft signing serial
#define SIZE_RF_ENCRYPTION_AES_KEY (16u) //!< Size RF AES encryption key
#define SIZE_NODE_LOCK_COUNTER (1u) //!< Size node lock counter
#define SIZE_SIGNING_SOFT_HMAC_KEY (32u) //!< Size soft signing HMAC key
#define SIZE_SIGNING_SOFT_SERIAL (9u) //!< Size soft signing serial
#define SIZE_RF_ENCRYPTION_AES_KEY (16u) //!< Size RF AES encryption key
#define SIZE_NODE_LOCK_COUNTER (1u) //!< Size node lock counter


/** @brief EEPROM start address */
Expand Down
4 changes: 2 additions & 2 deletions drivers/ATSHA204/ATSHA204.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/* Local data and function prototypes */

static uint8_t device_pin;
#ifdef ARDUINO_ARCH_AVR
#if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
static volatile uint8_t *device_port_DDR, *device_port_OUT, *device_port_IN;
#endif
static void sha204c_calculate_crc(uint8_t length, uint8_t *data, uint8_t *crc);
Expand Down Expand Up @@ -416,7 +416,7 @@ static uint8_t sha204c_check_crc(uint8_t *response)

void atsha204_init(uint8_t pin)
{
#if defined(ARDUINO_ARCH_AVR)
#if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
device_pin = digitalPinToBitMask(pin); // Find the bit value of the pin
uint8_t port = digitalPinToPort(pin); // temoporarily used to get the next three registers

Expand Down
2 changes: 1 addition & 1 deletion drivers/ATSHA204/ATSHA204.h
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@

/* Low level HW access macros */
/* function calls is not working, as it will have too much overhead */
#if !defined(ARDUINO_ARCH_AVR) // For everything else than AVR use pinMode / digitalWrite
#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_MEGAAVR) // For everything else than AVR use pinMode / digitalWrite
#define SHA204_SET_OUTPUT() pinMode(device_pin, OUTPUT)
#define SHA204_SET_INPUT() pinMode(device_pin, INPUT)
#define SHA204_POUT_HIGH() digitalWrite(device_pin, HIGH)
Expand Down
4 changes: 3 additions & 1 deletion examples/SecurityPersonalizer/SecurityPersonalizer.ino
Original file line number Diff line number Diff line change
Expand Up @@ -1343,6 +1343,8 @@ static void probe_and_print_peripherals(void)
F("+--------------+--------------+--------------+------------------------------+--------+"));
#if defined(ARDUINO_ARCH_AVR)
Serial.print(F("| AVR | DETECTED | N/A | "));
#elif defined(ARDUINO_ARCH_MEGAAVR)
Serial.print(F("| megaAVR | DETECTED | N/A | "));
#elif defined(ARDUINO_ARCH_ESP8266)
Serial.print(F("| ESP8266 | DETECTED | N/A | "));
#elif defined(ARDUINO_ARCH_SAMD)
Expand Down Expand Up @@ -1869,4 +1871,4 @@ static void dump_detailed_atsha204a_configuration(void)
#define RESET_EEPROM_PERSONALIZATION
#endif

/** @}*/
/** @}*/
2 changes: 1 addition & 1 deletion examples/SecurityPersonalizer/sha204_library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

atsha204Class::atsha204Class(uint8_t pin)
{
#if defined(ARDUINO_ARCH_AVR)
#if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
device_pin = digitalPinToBitMask(pin); // Find the bit value of the pin
uint8_t port = digitalPinToPort(pin); // temoporarily used to get the next three registers

Expand Down
4 changes: 2 additions & 2 deletions examples/SecurityPersonalizer/sha204_library.h
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@

/* Low level HW access macros */
/* function calls is not working, as it will have too much overhead */
#if !defined(ARDUINO_ARCH_AVR) // For everything else than AVR use pinMode / digitalWrite
#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_MEGAAVR) // For everything else than AVR use pinMode / digitalWrite
#define SHA204_SET_OUTPUT() pinMode(device_pin, OUTPUT)
#define SHA204_SET_INPUT() pinMode(device_pin, INPUT)
#define SHA204_POUT_HIGH() digitalWrite(device_pin, HIGH)
Expand All @@ -304,7 +304,7 @@ class atsha204Class
{
private:
uint8_t device_pin;
#ifdef ARDUINO_ARCH_AVR
#if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
volatile uint8_t *device_port_DDR, *device_port_OUT, *device_port_IN;
#endif
void sha204c_calculate_crc(uint8_t length, uint8_t *data, uint8_t *crc);
Expand Down
Loading

0 comments on commit 8d45e7b

Please sign in to comment.