Skip to content

Commit 8d45e7b

Browse files
Add support for ATtiny 3224/7 (mysensors#1535)
* 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]>
1 parent aa3583c commit 8d45e7b

File tree

13 files changed

+579
-27
lines changed

13 files changed

+579
-27
lines changed

MyASM.S

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@
2424
doNothing:
2525
nop
2626
.size doNothing, .-doNothing
27-
27+
2828
#elif defined(ARDUINO_ARCH_NRF5)
2929
/* workaround to prevent compiler error */
3030
.thumb_func
3131
doNothing:
3232
nop
3333
.size doNothing, .-doNothing
34-
35-
#elif defined(ARDUINO_ARCH_AVR)
34+
35+
#elif defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
3636

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

MyConfig.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2607,6 +2607,12 @@
26072607
*/
26082608
#define ARDUINO_ARCH_AVR
26092609

2610+
/**
2611+
* @def ARDUINO_ARCH_MEGAAVR
2612+
* @brief Automatically set when building for megaAVR targets
2613+
*/
2614+
#define ARDUINO_ARCH_MEGAAVR
2615+
26102616
/**
26112617
* @def ARDUINO_ARCH_STM32F1
26122618
* @brief Automatically set when building for STM32F1 targets
@@ -2778,5 +2784,12 @@
27782784
#define MY_SX126x_MAX_POWER_LEVEL_DBM
27792785
// SOFT-SPI
27802786
#define MY_SOFTSPI
2787+
2788+
/**
2789+
* @def MY_ROUTES_SIZE
2790+
* @brief Specifies the size allocated for routing table
2791+
*/
2792+
#define MY_ROUTES_SIZE
2793+
27812794
#endif
27822795
/** @}*/ // End of MyConfig group

MySensors.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@
6363
#elif defined(ARDUINO_ARCH_AVR)
6464
#include "hal/architecture/AVR/MyHwAVR.cpp"
6565
#include "hal/crypto/AVR/MyCryptoAVR.cpp"
66+
#elif defined(ARDUINO_ARCH_MEGAAVR)
67+
#include "hal/architecture/AVR/MyHwMegaAVR.cpp"
68+
#include "hal/crypto/AVR/MyCryptoAVR.cpp"
6669
#elif defined(ARDUINO_ARCH_SAMD)
6770
#include "drivers/extEEPROM/extEEPROM.cpp"
6871
#include "hal/architecture/SAMD/MyHwSAMD.cpp"
@@ -335,8 +338,8 @@ MY_DEFAULT_RX_LED_PIN in your sketch instead to enable LEDs
335338
// activate feature based on architecture
336339
#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__)
337340
#define MY_RAM_ROUTING_TABLE_ENABLED
338-
#elif defined(ARDUINO_ARCH_AVR)
339-
#if defined(__avr_atmega1280__) || defined(__avr_atmega1284__) || defined(__avr_atmega2560__)
341+
#elif defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
342+
#if defined(__avr_atmega1280__) || defined(__avr_atmega1284__) || defined(__avr_atmega2560__) || defined(__avr_attiny3224__) || defined(__avr_attiny3227__)
340343
// >4kb, enable it
341344
#define MY_RAM_ROUTING_TABLE_ENABLED
342345
#else
@@ -457,6 +460,8 @@ MY_DEFAULT_RX_LED_PIN in your sketch instead to enable LEDs
457460
// HW mains
458461
#if defined(ARDUINO_ARCH_AVR)
459462
#include "hal/architecture/AVR/MyMainAVR.cpp"
463+
#elif defined(ARDUINO_ARCH_MEGAAVR)
464+
#include "hal/architecture/AVR/MyMainAVR.cpp"
460465
#elif defined(ARDUINO_ARCH_SAMD)
461466
#include "hal/architecture/SAMD/MyMainSAMD.cpp"
462467
#elif defined(ARDUINO_ARCH_ESP8266)

core/MyCapabilities.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
#define MY_CAP_ARCH "E"
164164
#elif defined(ARDUINO_ARCH_ESP32)
165165
#define MY_CAP_ARCH "F"
166-
#elif defined(ARDUINO_ARCH_AVR)
166+
#elif defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
167167
#define MY_CAP_ARCH "A"
168168
#elif defined(ARDUINO_ARCH_STM32F1)
169169
#define MY_CAP_ARCH "M"

core/MyEepromAddresses.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,26 @@
3232
#define MyEepromAddresses_h
3333

3434
// EEPROM variable sizes, in bytes
35-
#define SIZE_NODE_ID (1u) //!< Size node ID
36-
#define SIZE_PARENT_NODE_ID (1u) //!< Size parent node ID
37-
#define SIZE_DISTANCE (1u) //!< Size GW distance
38-
#define SIZE_ROUTES (256u) //!< Size routing table
39-
#define SIZE_CONTROLLER_CONFIG (23u) //!< Size controller config
40-
#define SIZE_PERSONALIZATION_CHECKSUM (1u) //!< Size personalization checksum
41-
#define SIZE_FIRMWARE_TYPE (2u) //!< Size firmware type
42-
#define SIZE_FIRMWARE_VERSION (2u) //!< Size firmware version
43-
#define SIZE_FIRMWARE_BLOCKS (2u) //!< Size firmware blocks
44-
#define SIZE_FIRMWARE_CRC (2u) //!< Size firmware CRC
35+
#define SIZE_NODE_ID (1u) //!< Size node ID
36+
#define SIZE_PARENT_NODE_ID (1u) //!< Size parent node ID
37+
#define SIZE_DISTANCE (1u) //!< Size GW distance
38+
#ifdef MY_ROUTES_SIZE
39+
#define SIZE_ROUTES (MY_ROUTES_SIZE) //!< Size routing table 148 is the
40+
#else
41+
#define SIZE_ROUTES (256u) //!< Size routing table 148 is the
42+
#endif
43+
#define SIZE_CONTROLLER_CONFIG (23u) //!< Size controller config
44+
#define SIZE_PERSONALIZATION_CHECKSUM (1u) //!< Size personalization checksum
45+
#define SIZE_FIRMWARE_TYPE (2u) //!< Size firmware type
46+
#define SIZE_FIRMWARE_VERSION (2u) //!< Size firmware version
47+
#define SIZE_FIRMWARE_BLOCKS (2u) //!< Size firmware blocks
48+
#define SIZE_FIRMWARE_CRC (2u) //!< Size firmware CRC
4549
#define SIZE_SIGNING_REQUIREMENT_TABLE (32u) //!< Size signing requirement table
4650
#define SIZE_WHITELIST_REQUIREMENT_TABLE (32u) //!< Size whitelist requirement table
47-
#define SIZE_SIGNING_SOFT_HMAC_KEY (32u) //!< Size soft signing HMAC key
48-
#define SIZE_SIGNING_SOFT_SERIAL (9u) //!< Size soft signing serial
49-
#define SIZE_RF_ENCRYPTION_AES_KEY (16u) //!< Size RF AES encryption key
50-
#define SIZE_NODE_LOCK_COUNTER (1u) //!< Size node lock counter
51+
#define SIZE_SIGNING_SOFT_HMAC_KEY (32u) //!< Size soft signing HMAC key
52+
#define SIZE_SIGNING_SOFT_SERIAL (9u) //!< Size soft signing serial
53+
#define SIZE_RF_ENCRYPTION_AES_KEY (16u) //!< Size RF AES encryption key
54+
#define SIZE_NODE_LOCK_COUNTER (1u) //!< Size node lock counter
5155

5256

5357
/** @brief EEPROM start address */

drivers/ATSHA204/ATSHA204.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
/* Local data and function prototypes */
55

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

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

drivers/ATSHA204/ATSHA204.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@
225225

226226
/* Low level HW access macros */
227227
/* function calls is not working, as it will have too much overhead */
228-
#if !defined(ARDUINO_ARCH_AVR) // For everything else than AVR use pinMode / digitalWrite
228+
#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_MEGAAVR) // For everything else than AVR use pinMode / digitalWrite
229229
#define SHA204_SET_OUTPUT() pinMode(device_pin, OUTPUT)
230230
#define SHA204_SET_INPUT() pinMode(device_pin, INPUT)
231231
#define SHA204_POUT_HIGH() digitalWrite(device_pin, HIGH)

examples/SecurityPersonalizer/SecurityPersonalizer.ino

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1343,6 +1343,8 @@ static void probe_and_print_peripherals(void)
13431343
F("+--------------+--------------+--------------+------------------------------+--------+"));
13441344
#if defined(ARDUINO_ARCH_AVR)
13451345
Serial.print(F("| AVR | DETECTED | N/A | "));
1346+
#elif defined(ARDUINO_ARCH_MEGAAVR)
1347+
Serial.print(F("| megaAVR | DETECTED | N/A | "));
13461348
#elif defined(ARDUINO_ARCH_ESP8266)
13471349
Serial.print(F("| ESP8266 | DETECTED | N/A | "));
13481350
#elif defined(ARDUINO_ARCH_SAMD)
@@ -1869,4 +1871,4 @@ static void dump_detailed_atsha204a_configuration(void)
18691871
#define RESET_EEPROM_PERSONALIZATION
18701872
#endif
18711873

1872-
/** @}*/
1874+
/** @}*/

examples/SecurityPersonalizer/sha204_library.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

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

examples/SecurityPersonalizer/sha204_library.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@
283283

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

0 commit comments

Comments
 (0)