From 044cb33948628d6c0b47412934cbaa69fa963aad Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 22 Jan 2022 21:43:52 +0100 Subject: [PATCH] Added support for LoRa32 v2.1 boards --- Config.h | 11 +++++-- Makefile | 5 ++++ RNode_Firmware.ino | 4 +++ ROM.h | 12 ++++++-- Utilities.h | 74 +++++++++++++++++++++++++++++++++++----------- 5 files changed, 83 insertions(+), 23 deletions(-) diff --git a/Config.h b/Config.h index 6b24663..85ef7e5 100644 --- a/Config.h +++ b/Config.h @@ -4,7 +4,7 @@ #define CONFIG_H #define MAJ_VERS 0x01 - #define MIN_VERS 0x18 + #define MIN_VERS 0x19 #define PLATFORM_AVR 0x90 #define PLATFORM_ESP32 0x80 @@ -109,8 +109,13 @@ const int pin_cs = 18; const int pin_reset = 23; const int pin_dio = 26; - const int pin_led_rx = 2; - const int pin_led_tx = 25; + #if defined(EXTERNAL_LEDS) + const int pin_led_rx = 15; + const int pin_led_tx = 4; + #else + const int pin_led_rx = 25; + const int pin_led_tx = 25; + #endif #else #error An unsupported board was selected. Cannot compile RNode firmware. #endif diff --git a/Makefile b/Makefile index d8adb24..25199fc 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,9 @@ firmware-lora32_v20: firmware-lora32_v21: arduino-cli compile --fqbn esp32:esp32:ttgo-lora32 --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x37\"" +firmware-lora32_v21_extled: + arduino-cli compile --fqbn esp32:esp32:ttgo-lora32 --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x37\" \"-DEXTERNAL_LEDS=true\"" + firmware-featheresp32: arduino-cli compile --fqbn esp32:esp32:featheresp32 --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x34\"" @@ -53,6 +56,8 @@ upload-featheresp32: upload-mega2560: arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:mega + + release-all: release-rnode release-tbeam release-lora32_v21 release-featheresp32 release-genericesp32 release-rnode: diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino index 350b69a..5621ad8 100644 --- a/RNode_Firmware.ino +++ b/RNode_Firmware.ino @@ -250,6 +250,7 @@ bool startRadio() { // Flash an info pattern to indicate // that the radio is now on + kiss_indicate_radiostate(); led_indicate_info(3); return true; } @@ -258,12 +259,15 @@ bool startRadio() { // Flash a warning pattern to indicate // that the radio was locked, and thus // not started + radio_online = false; + kiss_indicate_radiostate(); led_indicate_warning(3); return false; } } else { // If radio is already on, we silently // ignore the request. + kiss_indicate_radiostate(); return true; } } diff --git a/ROM.h b/ROM.h index 1434887..b22eafc 100644 --- a/ROM.h +++ b/ROM.h @@ -3,11 +3,17 @@ #define CHECKSUMMED_SIZE 0x0B - #define PRODUCT_RNODE 0x03 - #define PRODUCT_HMBRW 0xF0 - #define PRODUCT_TBEAM 0xE0 + #define PRODUCT_RNODE 0x03 + #define PRODUCT_HMBRW 0xF0 + #define PRODUCT_TBEAM 0xE0 + #define PRODUCT_T32_20 0xB0 + #define PRODUCT_T32_21 0xB1 #define MODEL_A4 0xA4 #define MODEL_A9 0xA9 + #define MODEL_B3 0xB3 + #define MODEL_B8 0xB8 + #define MODEL_B4 0xB4 + #define MODEL_B9 0xB9 #define MODEL_E4 0xE4 #define MODEL_E9 0xE9 #define MODEL_FF 0xFF diff --git a/Utilities.h b/Utilities.h index f722ce7..7a5c9c1 100644 --- a/Utilities.h +++ b/Utilities.h @@ -49,8 +49,8 @@ uint8_t boot_vector = 0x00; #elif BOARD_MODEL == BOARD_LORA32_V2_1 void led_rx_on() { digitalWrite(pin_led_rx, HIGH); } void led_rx_off() { digitalWrite(pin_led_rx, LOW); } - void led_tx_on() { digitalWrite(pin_led_tx, LOW); } - void led_tx_off() { digitalWrite(pin_led_tx, HIGH); } + void led_tx_on() { digitalWrite(pin_led_tx, HIGH); } + void led_tx_off() { digitalWrite(pin_led_tx, LOW); } #elif BOARD_MODEL == BOARD_HUZZAH32 void led_rx_on() { digitalWrite(pin_led_rx, HIGH); } void led_rx_off() { digitalWrite(pin_led_rx, LOW); } @@ -130,18 +130,33 @@ void led_indicate_warning(int cycles) { led_rx_off(); } #elif MCU_VARIANT == MCU_ESP32 - void led_indicate_info(int cycles) { - bool forever = (cycles == 0) ? true : false; - cycles = forever ? 1 : cycles; - while(cycles > 0) { - led_tx_off(); - delay(100); - led_tx_on(); - delay(100); - if (!forever) cycles--; - } - led_tx_off(); - } + #if BOARD_MODEL == BOARD_LORA32_V2_1 + void led_indicate_info(int cycles) { + bool forever = (cycles == 0) ? true : false; + cycles = forever ? 1 : cycles; + while(cycles > 0) { + led_rx_off(); + delay(100); + led_rx_on(); + delay(100); + if (!forever) cycles--; + } + led_rx_off(); + } + #else + void led_indicate_info(int cycles) { + bool forever = (cycles == 0) ? true : false; + cycles = forever ? 1 : cycles; + while(cycles > 0) { + led_tx_off(); + delay(100); + led_tx_on(); + delay(100); + if (!forever) cycles--; + } + led_tx_off(); + } + #endif #endif @@ -195,7 +210,13 @@ int8_t led_standby_direction = 0; } else { led_tx_off(); } - led_rx_off(); + #if BOARD_MODEL == BOARD_LORA32_V2_1 + #if defined(EXTERNAL_LEDS) + led_rx_off(); + #endif + #else + led_rx_off(); + #endif } } @@ -564,7 +585,14 @@ bool eeprom_lock_set() { bool eeprom_product_valid() { uint8_t rval = EEPROM.read(eeprom_addr(ADDR_PRODUCT)); - if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM) { + + #if PLATFORM == PLATFORM_AVR + if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW) { + #elif PLATFORM == PLATFORM_ESP32 + if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21) { + #else + if (false) { + #endif return true; } else { return false; @@ -573,7 +601,19 @@ bool eeprom_product_valid() { bool eeprom_model_valid() { model = EEPROM.read(eeprom_addr(ADDR_MODEL)); - if (model == MODEL_A4 || model == MODEL_A9 || model == MODEL_FF || model == MODEL_E4 || model == MODEL_E9) { + #if BOARD_MODEL == BOARD_RNODE + if (model == MODEL_A4 || model == MODEL_A9) { + #elif BOARD_MODEL == BOARD_HMBRW + if (model == MODEL_FF) { + #elif BOARD_MODEL == BOARD_TBEAM + if (model == MODEL_E4 || model == MODEL_E9) { + #elif BOARD_MODEL == BOARD_LORA32_V2_0 + if (model == MODEL_B3 || model == MODEL_B8) { + #elif BOARD_MODEL == BOARD_LORA32_V2_1 + if (model == MODEL_B4 || model == MODEL_B9) { + #else + if (false) { + #endif return true; } else { return false;