Initial commit
This commit is contained in:
147
Boards.h
147
Boards.h
@@ -122,6 +122,10 @@
|
||||
#define MODEL_FE 0xFE // Homebrew board, max 17dBm output power
|
||||
#define MODEL_FF 0xFF // Homebrew board, max 14dBm output power
|
||||
|
||||
#define BOARD_AETHERNODE 0xF3 // Aethernode
|
||||
#define BOARD_MESHADVENTURER 0xF4 // Meshadventurer
|
||||
#define BOARD_PROMICRO 0xF5 // FakeTec (Promicro)
|
||||
|
||||
#if defined(__AVR_ATmega1284P__)
|
||||
#define PLATFORM PLATFORM_AVR
|
||||
#define MCU_VARIANT MCU_1284P
|
||||
@@ -223,14 +227,89 @@
|
||||
#define PIN_GPS_RX 34
|
||||
|
||||
#if BOARD_MODEL == BOARD_GENERIC_ESP32
|
||||
#define HAS_DISPLAY true
|
||||
#define HAS_BLUETOOTH true
|
||||
#define HAS_WIFI true
|
||||
#define HAS_CONSOLE true
|
||||
#define HAS_EEPROM true
|
||||
const int pin_cs = 4;
|
||||
const int pin_reset = 33;
|
||||
const int pin_dio = 39;
|
||||
const int pin_led_rx = 14;
|
||||
const int pin_led_tx = 32;
|
||||
#define HAS_BUSY true
|
||||
#define HAS_INPUT true
|
||||
#define HAS_TCXO true
|
||||
#define MODEM SX1262
|
||||
#define DIO2_AS_RF_SWITCH true
|
||||
#define HAS_RF_SWITCH_RX_TX false
|
||||
const int pin_cs = 5;
|
||||
const int pin_sclk = 18;
|
||||
const int pin_miso = 19;
|
||||
const int pin_mosi = 23;
|
||||
const int pin_busy = 32;
|
||||
const int pin_reset = 34;
|
||||
const int pin_dio = 33;
|
||||
const int pin_txen = -1;
|
||||
const int pin_rxen = -1;
|
||||
const int pin_tcxo_enable = -1;
|
||||
|
||||
const int pin_btn_usr1 = 39;
|
||||
const int pin_led_rx = 2;
|
||||
const int pin_led_tx = 4;
|
||||
|
||||
#elif BOARD_MODEL == BOARD_MESHADVENTURER
|
||||
#define HAS_DISPLAY true
|
||||
#define HAS_BLUETOOTH true
|
||||
#define HAS_WIFI true
|
||||
#define HAS_CONSOLE true
|
||||
#define HAS_EEPROM true
|
||||
#define HAS_BUSY true
|
||||
#define HAS_INPUT true
|
||||
#define HAS_TCXO true
|
||||
#define MODEM SX1262
|
||||
#define DIO2_AS_RF_SWITCH false
|
||||
#define HAS_RF_SWITCH_RX_TX true
|
||||
#define HAS_LORA_LNA true
|
||||
#define LORA_LNA_GAIN 17
|
||||
#define LORA_LNA_GVT 12
|
||||
|
||||
const int pin_cs = 18;
|
||||
const int pin_sclk = 5;
|
||||
const int pin_miso = 19;
|
||||
const int pin_mosi = 27;
|
||||
const int pin_busy = 32;
|
||||
const int pin_reset = 23;
|
||||
const int pin_dio = 33;
|
||||
const int pin_txen = 13;
|
||||
const int pin_rxen = 14;
|
||||
const int pin_tcxo_enable = -1;
|
||||
|
||||
const int pin_btn_usr1 = 39;
|
||||
const int pin_led_rx = 2;
|
||||
const int pin_led_tx = 4;
|
||||
|
||||
#elif BOARD_MODEL == BOARD_AETHERNODE
|
||||
#define HAS_DISPLAY true
|
||||
#define HAS_BLUETOOTH true
|
||||
#define HAS_WIFI true
|
||||
#define HAS_CONSOLE true
|
||||
#define HAS_EEPROM true
|
||||
#define HAS_BUSY true
|
||||
#define HAS_INPUT true
|
||||
#define HAS_TCXO true
|
||||
#define MODEM SX1262
|
||||
#define DIO2_AS_RF_SWITCH true
|
||||
#define HAS_RF_SWITCH_RX_TX false
|
||||
const int pin_cs = 5;
|
||||
const int pin_sclk = 18;
|
||||
const int pin_miso = 19;
|
||||
const int pin_mosi = 23;
|
||||
const int pin_busy = 32;
|
||||
const int pin_reset = 34;
|
||||
const int pin_dio = 33;
|
||||
const int pin_txen = -1;
|
||||
const int pin_rxen = -1;
|
||||
const int pin_tcxo_enable = -1;
|
||||
|
||||
const int pin_btn_usr1 = 39;
|
||||
const int pin_led_rx = 2;
|
||||
const int pin_led_tx = 4;
|
||||
|
||||
#elif BOARD_MODEL == BOARD_TBEAM
|
||||
#define HAS_DISPLAY true
|
||||
@@ -895,6 +974,64 @@
|
||||
const int DISPLAY_BL_PIN = PIN_T114_TFT_BLGT;
|
||||
const int DISPLAY_RST = PIN_T114_TFT_RST;
|
||||
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
//TODO:
|
||||
// - Fix low output power
|
||||
// - Make compatible with non-TCXO radios
|
||||
// - Add PMU
|
||||
#define MODEM SX1262
|
||||
#define HAS_EEPROM false
|
||||
#define HAS_BLUETOOTH false
|
||||
#define HAS_BLE true
|
||||
#define HAS_CONSOLE false
|
||||
#define HAS_PMU false
|
||||
#define HAS_NP false
|
||||
#define HAS_SD false
|
||||
#define HAS_TCXO true
|
||||
#define HAS_BUSY true
|
||||
#define HAS_RF_SWITCH_RX_TX true
|
||||
#define DIO2_AS_RF_SWITCH true
|
||||
#define OCP_TUNED 0x38
|
||||
#define HAS_SLEEP false
|
||||
#define BLE_MANUFACTURER "DIY"
|
||||
#define BLE_MODEL "ProMicro"
|
||||
|
||||
#define HAS_INPUT true
|
||||
#define EEPROM_SIZE 296
|
||||
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
||||
|
||||
#define CONFIG_UART_BUFFER_SIZE 6144
|
||||
#define CONFIG_QUEUE_SIZE 6144
|
||||
#define CONFIG_QUEUE_MAX_LENGTH 200
|
||||
|
||||
//Confused with the pin numbers??
|
||||
//https://github.com/pdcook/nRFMicro-Arduino-Core/blob/a83161e619da8668f726b52578a3dd89c1ef5956/variants/nice_nano/variant.h#L59
|
||||
|
||||
#define HAS_DISPLAY true
|
||||
#define I2C_SDA 8 //P1.04
|
||||
#define I2C_SCL 7 //P0.11
|
||||
|
||||
#define LED_ON LOW
|
||||
#define LED_OFF HIGH
|
||||
#define PIN_LED_RED 22 //P0.15
|
||||
const int pin_led_rx = PIN_LED_RED;
|
||||
const int pin_led_tx = PIN_LED_RED;
|
||||
|
||||
#define PIN_VEXT_EN 21 //P0.13
|
||||
|
||||
const int pin_btn_usr1 = 6; //P1.00
|
||||
|
||||
const int pin_reset = 10; //P0.09
|
||||
const int pin_cs = 13; //P1.13
|
||||
const int pin_sclk = 12; //P1.11
|
||||
const int pin_mosi = 14; //P1.15
|
||||
const int pin_miso = 15; //P0.02
|
||||
const int pin_busy = 16; //P0.29
|
||||
const int pin_dio = 11; //P0.10
|
||||
const int pin_tcxo_enable = -1;
|
||||
const int pin_rxen = 2; //P0.17
|
||||
const int pin_txen = -1;
|
||||
|
||||
#else
|
||||
#error An unsupported nRF board was selected. Cannot compile RNode firmware.
|
||||
#endif
|
||||
|
||||
35
Display.h
35
Display.h
@@ -65,6 +65,26 @@
|
||||
#define DISP_ADDR 0x3C
|
||||
#define SCL_OLED 18
|
||||
#define SDA_OLED 17
|
||||
#elif BOARD_MODEL == BOARD_GENERIC_ESP32
|
||||
#define DISP_RST -1
|
||||
#define DISP_ADDR 0x3C
|
||||
#define SCL_OLED 22
|
||||
#define SDA_OLED 11
|
||||
#elif BOARD_MODEL == BOARD_MESHADVENTURER
|
||||
#define DISP_RST -1
|
||||
#define DISP_ADDR 0x3C
|
||||
#define SCL_OLED 22
|
||||
#define SDA_OLED 21
|
||||
#elif BOARD_MODEL == BOARD_AETHERNODE
|
||||
#define DISP_RST -1
|
||||
#define DISP_ADDR 0x3C
|
||||
#define SCL_OLED 22
|
||||
#define SDA_OLED 21
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
#define DISP_RST -1
|
||||
#define DISP_ADDR 0x3C
|
||||
#define SCL_OLED 7
|
||||
#define SDA_OLED 8
|
||||
#elif BOARD_MODEL == BOARD_RAK4631
|
||||
// RAK1921/SSD1306
|
||||
#define DISP_RST -1
|
||||
@@ -311,6 +331,9 @@ bool display_init() {
|
||||
#elif BOARD_MODEL == BOARD_HELTEC_T114
|
||||
pinMode(PIN_T114_TFT_EN, OUTPUT);
|
||||
digitalWrite(PIN_T114_TFT_EN, LOW);
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
Wire.setPins(SDA_OLED, SCL_OLED);
|
||||
Wire.begin();
|
||||
#elif BOARD_MODEL == BOARD_TECHO
|
||||
display.init(0, true, 10, false, displaySPI, SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
||||
display.setPartialWindow(0, 0, DISP_W, DISP_H);
|
||||
@@ -434,6 +457,15 @@ bool display_init() {
|
||||
#elif BOARD_MODEL == BOARD_TECHO
|
||||
disp_mode = DISP_MODE_PORTRAIT;
|
||||
display.setRotation(3);
|
||||
#elif BOARD_MODEL == BOARD_MESHADVENTURER
|
||||
disp_mode = DISP_MODE_LANDSCAPE;
|
||||
display.setRotation(0);
|
||||
#elif BOARD_MODEL == BOARD_AETHERNODE
|
||||
disp_mode = DISP_MODE_LANDSCAPE;
|
||||
display.setRotation(0);
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
disp_mode = DISP_MODE_LANDSCAPE;
|
||||
display.setRotation(0);
|
||||
#else
|
||||
disp_mode = DISP_MODE_PORTRAIT;
|
||||
display.setRotation(3);
|
||||
@@ -1130,6 +1162,9 @@ void update_display(bool blank = false) {
|
||||
|
||||
void display_unblank() {
|
||||
last_unblank_event = millis();
|
||||
#if BOARD_MODEL == BOARD_HELTEC_T114
|
||||
digitalWrite(PIN_T114_TFT_BLGT, LOW);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ext_fb_enable() {
|
||||
|
||||
66
Makefile
66
Makefile
@@ -17,7 +17,7 @@
|
||||
ARDUINO_ESP_CORE_VER = 2.0.17
|
||||
|
||||
# Version 3.2.0 of the Arduino ESP core is based on ESP-IDF v5.4.1
|
||||
# ARDUINO_ESP_CORE_VER = 3.2.0
|
||||
#ARDUINO_ESP_CORE_VER = 3.3.7
|
||||
|
||||
all: release
|
||||
|
||||
@@ -50,10 +50,12 @@ prep-nrf:
|
||||
arduino-cli core install rakwireless:nrf52 --config-file arduino-cli.yaml
|
||||
arduino-cli core install Heltec_nRF52:Heltec_nRF52 --config-file arduino-cli.yaml
|
||||
arduino-cli core install adafruit:nrf52 --config-file arduino-cli.yaml
|
||||
arduino-cli core install "promicro:nrf52" --config-file arduino-cli.yaml
|
||||
sed -i.bak 's/nicenanov2\.build\.ldscript=nrf52840_s140_v7\.ld/nicenanov2.build.ldscript=nrf52840_s140_v6.ld/' ~/.arduino15/packages/promicro/hardware/nrf52/1.0.2/boards.txt
|
||||
arduino-cli lib install "GxEPD2"
|
||||
arduino-cli config set library.enable_unsafe_install true
|
||||
arduino-cli lib install --git-url https://github.com/liamcottle/esp8266-oled-ssd1306#e16cee124fe26490cb14880c679321ad8ac89c95
|
||||
pip install adafruit-nrfutil --upgrade
|
||||
pip install adafruit-nrfutil --upgrade --break-system-packages
|
||||
|
||||
console-site:
|
||||
make -C Console clean site
|
||||
@@ -139,12 +141,21 @@ firmware-featheresp32: check_bt_buffers
|
||||
firmware-genericesp32: check_bt_buffers
|
||||
arduino-cli compile --log --fqbn esp32:esp32:esp32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x35\""
|
||||
|
||||
firmware-meshadventurer: check_bt_buffers
|
||||
arduino-cli compile --log --fqbn esp32:esp32:esp32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0xF4\""
|
||||
|
||||
firmware-aethernode: check_bt_buffers
|
||||
arduino-cli compile --log --fqbn esp32:esp32:esp32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x35\""
|
||||
|
||||
firmware-rak4631:
|
||||
arduino-cli compile --log --fqbn rakwireless:nrf52:WisCoreRAK4631Board -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x51\""
|
||||
|
||||
firmware-heltec_t114:
|
||||
arduino-cli compile --log --fqbn Heltec_nRF52:Heltec_nRF52:HT-n5262 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x3C\""
|
||||
|
||||
firmware-promicro:
|
||||
arduino-cli compile --log --fqbn promicro:nrf52:nicenanov2:softdevice=s140v6 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0xF5\""
|
||||
|
||||
firmware-techo:
|
||||
arduino-cli compile --log --fqbn adafruit:nrf52:pca10056 -e --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x44\""
|
||||
|
||||
@@ -154,6 +165,27 @@ firmware-xiao_s3:
|
||||
upload:
|
||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn unsignedio:avr:rnode
|
||||
|
||||
upload-genericesp32:
|
||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:esp32
|
||||
@sleep 1
|
||||
rnodeconf /dev/ttyUSB0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32/RNode_Firmware.ino.bin)
|
||||
@sleep 3
|
||||
python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||
|
||||
upload-meshadventurer:
|
||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:esp32
|
||||
@sleep 1
|
||||
rnodeconf /dev/ttyUSB0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32/RNode_Firmware.ino.bin)
|
||||
@sleep 3
|
||||
python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||
|
||||
upload-aethernode:
|
||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:esp32
|
||||
@sleep 1
|
||||
rnodeconf /dev/ttyUSB0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32/RNode_Firmware.ino.bin)
|
||||
@sleep 3
|
||||
python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||
|
||||
upload-mega2560:
|
||||
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:mega
|
||||
|
||||
@@ -197,7 +229,7 @@ upload-heltec32_v2:
|
||||
@sleep 1
|
||||
rnodeconf /dev/ttyUSB0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.heltec_wifi_lora_32_V2/RNode_Firmware.ino.bin)
|
||||
@sleep 3
|
||||
python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyUSB1 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||
python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||
|
||||
upload-heltec32_v3:
|
||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:heltec_wifi_lora_32_V3
|
||||
@@ -265,6 +297,11 @@ upload-heltec_t114:
|
||||
@sleep 1
|
||||
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes from_device /dev/ttyACM0)
|
||||
|
||||
upload-promicro:
|
||||
arduino-cli upload -p /dev/ttyACM0 --fqbn promicro:nrf52:nicenanov2:softdevice=s140v6
|
||||
@sleep 6
|
||||
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes from_device /dev/ttyACM0)
|
||||
|
||||
upload-techo:
|
||||
arduino-cli upload -p /dev/ttyACM0 --fqbn adafruit:nrf52:pca10056
|
||||
@sleep 6
|
||||
@@ -487,6 +524,24 @@ release-genericesp32: check_bt_buffers
|
||||
zip --junk-paths ./Release/rnode_firmware_esp32_generic.zip ./Release/esptool/esptool.py ./Release/console_image.bin build/rnode_firmware_esp32_generic.boot_app0 build/rnode_firmware_esp32_generic.bin build/rnode_firmware_esp32_generic.bootloader build/rnode_firmware_esp32_generic.partitions
|
||||
rm -r build
|
||||
|
||||
release-meshadventurer: check_bt_buffers
|
||||
arduino-cli compile --fqbn esp32:esp32:esp32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0xF4\""
|
||||
cp ~/.arduino15/packages/esp32/hardware/esp32/$(ARDUINO_ESP_CORE_VER)/tools/partitions/boot_app0.bin build/rnode_firmware_meshadventurer.boot_app0
|
||||
cp build/esp32.esp32.esp32/RNode_Firmware.ino.bin build/rnode_firmware_meshadventurer.bin
|
||||
cp build/esp32.esp32.esp32/RNode_Firmware.ino.bootloader.bin build/rnode_firmware_meshadventurer.bootloader
|
||||
cp build/esp32.esp32.esp32/RNode_Firmware.ino.partitions.bin build/rnode_firmware_meshadventurer.partitions
|
||||
zip --junk-paths ./Release/rnode_firmware_meshadventurer.zip ./Release/esptool/esptool.py ./Release/console_image.bin build/rnode_firmware_meshadventurer.boot_app0 build/rnode_firmware_meshadventurer.bin build/rnode_firmware_meshadventurer.bootloader build/rnode_firmware_meshadventurer.partitions
|
||||
rm -r build
|
||||
|
||||
release-aethernode: check_bt_buffers
|
||||
arduino-cli compile --fqbn esp32:esp32:esp32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x35\""
|
||||
cp ~/.arduino15/packages/esp32/hardware/esp32/$(ARDUINO_ESP_CORE_VER)/tools/partitions/boot_app0.bin build/rnode_firmware_aethernode.boot_app0
|
||||
cp build/esp32.esp32.esp32/RNode_Firmware.ino.bin build/rnode_firmware_aethernode.bin
|
||||
cp build/esp32.esp32.esp32/RNode_Firmware.ino.bootloader.bin build/rnode_firmware_aethernode.bootloader
|
||||
cp build/esp32.esp32.esp32/RNode_Firmware.ino.partitions.bin build/rnode_firmware_aethernode.partitions
|
||||
zip --junk-paths ./Release/rnode_firmware_aethernode.zip ./Release/esptool/esptool.py ./Release/console_image.bin build/rnode_firmware_aethernode.boot_app0 build/rnode_firmware_aethernode.bin build/rnode_firmware_aethernode.bootloader build/rnode_firmware_aethernode.partitions
|
||||
rm -r build
|
||||
|
||||
release-mega2560:
|
||||
arduino-cli compile --fqbn arduino:avr:mega -e --build-property "compiler.cpp.extra_flags=\"-DMODEM=0x01\""
|
||||
cp build/arduino.avr.mega/RNode_Firmware.ino.hex Release/rnode_firmware_m2560.hex
|
||||
@@ -502,6 +557,11 @@ release-heltec_t114:
|
||||
cp build/Heltec_nRF52.Heltec_nRF52.HT-n5262/RNode_Firmware.ino.hex build/rnode_firmware_heltec_t114.hex
|
||||
adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build/rnode_firmware_heltec_t114.hex Release/rnode_firmware_heltec_t114.zip
|
||||
|
||||
release-promicro:
|
||||
arduino-cli compile --log --fqbn promicro:nrf52:nicenanov2:softdevice=s140v6 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0xF5\""
|
||||
cp build/promicro.nrf52.nicenanov2/RNode_Firmware.ino.hex build/rnode_firmware_promicro.hex
|
||||
adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build/rnode_firmware_promicro.hex Release/rnode_firmware_promicro.zip
|
||||
|
||||
release-techo:
|
||||
arduino-cli compile --log --fqbn adafruit:nrf52:pca10056 -e --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x44\""
|
||||
cp build/adafruit.nrf52.pca10056/RNode_Firmware.ino.hex build/rnode_firmware_techo.hex
|
||||
|
||||
@@ -89,6 +89,12 @@ void setup() {
|
||||
pinMode(PIN_LED_BLUE, OUTPUT);
|
||||
delay(200);
|
||||
#endif
|
||||
#if BOARD_MODEL == BOARD_PROMICRO
|
||||
delay(200);
|
||||
pinMode(PIN_VEXT_EN, OUTPUT);
|
||||
digitalWrite(PIN_VEXT_EN, HIGH);
|
||||
delay(200);
|
||||
#endif
|
||||
|
||||
if (!eeprom_begin()) { Serial.write("EEPROM initialisation failed.\r\n"); }
|
||||
#endif
|
||||
@@ -129,7 +135,7 @@ void setup() {
|
||||
boot_seq();
|
||||
#endif
|
||||
|
||||
#if BOARD_MODEL != BOARD_RAK4631 && BOARD_MODEL != BOARD_HELTEC_T114 && BOARD_MODEL != BOARD_TECHO && BOARD_MODEL != BOARD_T3S3 && BOARD_MODEL != BOARD_TBEAM_S_V1 && BOARD_MODEL != BOARD_HELTEC32_V4
|
||||
#if BOARD_MODEL != BOARD_RAK4631 && BOARD_MODEL != BOARD_HELTEC_T114 && BOARD_MODEL != BOARD_PROMICRO && BOARD_MODEL != BOARD_TECHO && BOARD_MODEL != BOARD_T3S3 && BOARD_MODEL != BOARD_TBEAM_S_V1 && BOARD_MODEL != BOARD_HELTEC32_V4
|
||||
// Some boards need to wait until the hardware UART is set up before booting
|
||||
// the full firmware. In the case of the RAK4631 and Heltec T114, the line below will wait
|
||||
// until a serial connection is actually established with a master. Thus, it
|
||||
@@ -535,7 +541,9 @@ bool startRadio() {
|
||||
// Flash an info pattern to indicate
|
||||
// that the radio is now on
|
||||
kiss_indicate_radiostate();
|
||||
led_indicate_info(3);
|
||||
if (!display_blanked) {
|
||||
led_indicate_info(3);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -575,7 +583,7 @@ volatile bool queue_flushing = false;
|
||||
void flush_queue(void) {
|
||||
if (!queue_flushing) {
|
||||
queue_flushing = true;
|
||||
led_tx_on();
|
||||
if (!display_blanked) { led_tx_on(); }
|
||||
|
||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||
while (!fifo16_isempty(&packet_starts)) {
|
||||
@@ -596,7 +604,7 @@ void flush_queue(void) {
|
||||
}
|
||||
}
|
||||
|
||||
lora_receive(); led_tx_off();
|
||||
lora_receive(); if (!display_blanked) { led_tx_off(); }
|
||||
}
|
||||
|
||||
queue_height = 0;
|
||||
@@ -615,7 +623,8 @@ void flush_queue(void) {
|
||||
|
||||
void pop_queue() {
|
||||
if (!queue_flushing) {
|
||||
queue_flushing = true; led_tx_on();
|
||||
queue_flushing = true;
|
||||
if (!display_blanked) { led_tx_on(); }
|
||||
|
||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||
if (!fifo16_isempty(&packet_starts)) {
|
||||
@@ -637,7 +646,8 @@ void pop_queue() {
|
||||
queued_bytes -= length;
|
||||
}
|
||||
|
||||
lora_receive(); led_tx_off();
|
||||
lora_receive();
|
||||
if (!display_blanked) { led_tx_off(); }
|
||||
}
|
||||
|
||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||
@@ -751,7 +761,7 @@ void transmit(uint16_t size) {
|
||||
add_airtime(written);
|
||||
|
||||
} else {
|
||||
led_tx_on(); uint16_t written = 0;
|
||||
if (!display_blanked) { led_tx_on(); } uint16_t written = 0;
|
||||
if (size > SINGLE_MTU) { size = SINGLE_MTU; }
|
||||
if (!implicit) { LoRa->beginPacket(); }
|
||||
else { LoRa->beginPacket(size); }
|
||||
@@ -984,7 +994,7 @@ void serial_callback(uint8_t sbyte) {
|
||||
} else if (command == CMD_RADIO_LOCK) {
|
||||
update_radio_lock();
|
||||
kiss_indicate_radio_lock();
|
||||
} else if (command == CMD_BLINK) {
|
||||
} else if (command == CMD_BLINK && !display_blanked) {
|
||||
led_indicate_info(sbyte);
|
||||
} else if (command == CMD_RANDOM) {
|
||||
kiss_indicate_random(getRandom());
|
||||
@@ -1431,13 +1441,15 @@ void update_modem_status() {
|
||||
if (carrier_detected) { dcd = true; } else { dcd = false; }
|
||||
|
||||
dcd_led = dcd;
|
||||
if (dcd_led) { led_rx_on(); }
|
||||
if (!display_blanked && dcd_led) { led_rx_on(); }
|
||||
else {
|
||||
if (interference_detected) {
|
||||
if (led_id_filter >= LED_ID_TRIG && noise_floor_sampled) { led_id_on(); }
|
||||
if (led_id_filter >= LED_ID_TRIG && noise_floor_sampled && !display_blanked) { led_id_on(); }
|
||||
} else {
|
||||
if (airtime_lock) { led_indicate_airtime_lock(); }
|
||||
else { led_rx_off(); led_id_off(); }
|
||||
if (airtime_lock && !display_blanked) { led_indicate_airtime_lock(); }
|
||||
else {
|
||||
if (!display_blanked) { led_rx_off(); led_id_off(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1707,7 +1719,9 @@ void loop() {
|
||||
console_loop();
|
||||
#endif
|
||||
} else {
|
||||
led_indicate_standby();
|
||||
if (!display_blanked) {
|
||||
led_indicate_standby();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
|
||||
33
Utilities.h
33
Utilities.h
@@ -135,7 +135,7 @@ uint8_t boot_vector = 0x00;
|
||||
#define NUMPIXELS 1
|
||||
Adafruit_NeoPixel pixels(NUMPIXELS, pin_np, NEO_GRB + NEO_KHZ800);
|
||||
|
||||
uint8_t npr = 0;
|
||||
uint8_t npr = 0;
|
||||
uint8_t npg = 0;
|
||||
uint8_t npb = 0;
|
||||
float npi = NP_M;
|
||||
@@ -340,6 +340,20 @@ uint8_t boot_vector = 0x00;
|
||||
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
|
||||
void led_id_on() { }
|
||||
void led_id_off() { }
|
||||
#elif BOARD_MODEL == BOARD_AETHERNODE
|
||||
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, HIGH); }
|
||||
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
|
||||
void led_id_on() { }
|
||||
void led_id_off() { }
|
||||
#elif BOARD_MODEL == BOARD_MESHADVENTURER
|
||||
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, HIGH); }
|
||||
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
|
||||
void led_id_on() { }
|
||||
void led_id_off() { }
|
||||
#endif
|
||||
#elif MCU_VARIANT == MCU_NRF52
|
||||
#if HAS_NP == true
|
||||
@@ -356,7 +370,14 @@ uint8_t boot_vector = 0x00;
|
||||
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
|
||||
void led_id_on() { }
|
||||
void led_id_off() { }
|
||||
#elif BOARD_MODEL == BOARD_HELTEC_T114
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
void led_rx_on() { digitalWrite(pin_led_rx, LED_ON); }
|
||||
void led_rx_off() { digitalWrite(pin_led_rx, LED_OFF); }
|
||||
void led_tx_on() { digitalWrite(pin_led_tx, LED_ON); }
|
||||
void led_tx_off() { digitalWrite(pin_led_tx, LED_OFF); }
|
||||
void led_id_on() { }
|
||||
void led_id_off() { }
|
||||
#elif BOARD_MODEL == BOARD_HELTEC_T114
|
||||
// Heltec T114 pulls pins LOW to turn on
|
||||
void led_rx_on() { digitalWrite(pin_led_rx, LOW); }
|
||||
void led_rx_off() { digitalWrite(pin_led_rx, HIGH); }
|
||||
@@ -1362,7 +1383,7 @@ void setTXPower() {
|
||||
if (model == MODEL_12) LoRa->setTxPower(mapped_lora_txp, PA_OUTPUT_RFO_PIN);
|
||||
|
||||
if (model == MODEL_C6) LoRa->setTxPower(mapped_lora_txp, PA_OUTPUT_RFO_PIN);
|
||||
if (model == MODEL_C7) LoRa->setTxPower(mapped_lora_txp, PA_OUTPUT_RFO_PIN);
|
||||
if (model == MODEL_C7) LoRa->setTxPower(mapped_lora_txp, PA_OUTPUT_RFO_PIN);
|
||||
|
||||
if (model == MODEL_A1) LoRa->setTxPower(mapped_lora_txp, PA_OUTPUT_PA_BOOST_PIN);
|
||||
if (model == MODEL_A2) LoRa->setTxPower(mapped_lora_txp, PA_OUTPUT_PA_BOOST_PIN);
|
||||
@@ -1675,6 +1696,12 @@ bool eeprom_model_valid() {
|
||||
if (model == MODEL_FF) {
|
||||
#elif BOARD_MODEL == BOARD_GENERIC_ESP32
|
||||
if (model == MODEL_FF || model == MODEL_FE) {
|
||||
#elif BOARD_MODEL == BOARD_AETHERNODE
|
||||
if (model == MODEL_FF || model == MODEL_FE) {
|
||||
#elif BOARD_MODEL == BOARD_MESHADVENTURER
|
||||
if (model == MODEL_FF || model == MODEL_FE) {
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
if (model == MODEL_FF || model == MODEL_FE) {
|
||||
#else
|
||||
if (false) {
|
||||
#endif
|
||||
|
||||
133
energysave.patch
Normal file
133
energysave.patch
Normal file
@@ -0,0 +1,133 @@
|
||||
diff --git a/Display.h b/Display.h
|
||||
index 7d903b9..882af8d 100644
|
||||
--- a/Display.h
|
||||
+++ b/Display.h
|
||||
@@ -1071,6 +1071,7 @@ void update_display(bool blank = false) {
|
||||
#if BOARD_MODEL == BOARD_HELTEC_T114
|
||||
display.clear();
|
||||
display.display();
|
||||
+ digitalWrite(PIN_T114_TFT_BLGT, HIGH);
|
||||
#elif BOARD_MODEL != BOARD_TDECK && BOARD_MODEL != BOARD_TECHO
|
||||
display.clearDisplay();
|
||||
display.display();
|
||||
@@ -1128,6 +1129,9 @@ void update_display(bool blank = false) {
|
||||
|
||||
void display_unblank() {
|
||||
last_unblank_event = millis();
|
||||
+ #if BOARD_MODEL == BOARD_HELTEC_T114
|
||||
+ digitalWrite(PIN_T114_TFT_BLGT, LOW);
|
||||
+ #endif
|
||||
}
|
||||
|
||||
void ext_fb_enable() {
|
||||
diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino
|
||||
index 5649206..ba157e6 100644
|
||||
--- a/RNode_Firmware.ino
|
||||
+++ b/RNode_Firmware.ino
|
||||
@@ -535,7 +535,9 @@ bool startRadio() {
|
||||
// Flash an info pattern to indicate
|
||||
// that the radio is now on
|
||||
kiss_indicate_radiostate();
|
||||
- led_indicate_info(3);
|
||||
+ if (!display_blanked) {
|
||||
+ led_indicate_info(3);
|
||||
+ }
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -575,7 +577,7 @@ volatile bool queue_flushing = false;
|
||||
void flush_queue(void) {
|
||||
if (!queue_flushing) {
|
||||
queue_flushing = true;
|
||||
- led_tx_on();
|
||||
+ if (!display_blanked) { led_tx_on(); }
|
||||
|
||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||
while (!fifo16_isempty(&packet_starts)) {
|
||||
@@ -596,7 +598,7 @@ void flush_queue(void) {
|
||||
}
|
||||
}
|
||||
|
||||
- lora_receive(); led_tx_off();
|
||||
+ lora_receive(); if (!display_blanked) { led_tx_off(); }
|
||||
}
|
||||
|
||||
queue_height = 0;
|
||||
@@ -615,7 +617,8 @@ void flush_queue(void) {
|
||||
|
||||
void pop_queue() {
|
||||
if (!queue_flushing) {
|
||||
- queue_flushing = true; led_tx_on();
|
||||
+ queue_flushing = true;
|
||||
+ if (!display_blanked) { led_tx_on(); }
|
||||
|
||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||
if (!fifo16_isempty(&packet_starts)) {
|
||||
@@ -637,7 +640,8 @@ void pop_queue() {
|
||||
queued_bytes -= length;
|
||||
}
|
||||
|
||||
- lora_receive(); led_tx_off();
|
||||
+ lora_receive();
|
||||
+ if (!display_blanked) { led_tx_off(); }
|
||||
}
|
||||
|
||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||
@@ -751,7 +755,7 @@ void transmit(uint16_t size) {
|
||||
add_airtime(written);
|
||||
|
||||
} else {
|
||||
- led_tx_on(); uint16_t written = 0;
|
||||
+ if (!display_blanked) { led_tx_on(); } uint16_t written = 0;
|
||||
if (size > SINGLE_MTU) { size = SINGLE_MTU; }
|
||||
if (!implicit) { LoRa->beginPacket(); }
|
||||
else { LoRa->beginPacket(size); }
|
||||
@@ -984,7 +988,7 @@ void serial_callback(uint8_t sbyte) {
|
||||
} else if (command == CMD_RADIO_LOCK) {
|
||||
update_radio_lock();
|
||||
kiss_indicate_radio_lock();
|
||||
- } else if (command == CMD_BLINK) {
|
||||
+ } else if (command == CMD_BLINK && !display_blanked) {
|
||||
led_indicate_info(sbyte);
|
||||
} else if (command == CMD_RANDOM) {
|
||||
kiss_indicate_random(getRandom());
|
||||
@@ -1431,13 +1435,15 @@ void update_modem_status() {
|
||||
if (carrier_detected) { dcd = true; } else { dcd = false; }
|
||||
|
||||
dcd_led = dcd;
|
||||
- if (dcd_led) { led_rx_on(); }
|
||||
+ if (!display_blanked && dcd_led) { led_rx_on(); }
|
||||
else {
|
||||
if (interference_detected) {
|
||||
- if (led_id_filter >= LED_ID_TRIG && noise_floor_sampled) { led_id_on(); }
|
||||
+ if (led_id_filter >= LED_ID_TRIG && noise_floor_sampled && !display_blanked) { led_id_on(); }
|
||||
} else {
|
||||
- if (airtime_lock) { led_indicate_airtime_lock(); }
|
||||
- else { led_rx_off(); led_id_off(); }
|
||||
+ if (airtime_lock && !display_blanked) { led_indicate_airtime_lock(); }
|
||||
+ else {
|
||||
+ if (!display_blanked) { led_rx_off(); led_id_off(); }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1707,7 +1713,9 @@ void loop() {
|
||||
console_loop();
|
||||
#endif
|
||||
} else {
|
||||
- led_indicate_standby();
|
||||
+ if (!display_blanked) {
|
||||
+ led_indicate_standby();
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
|
||||
diff --git a/arduino-cli.yaml b/arduino-cli.yaml
|
||||
index 6dd5f8d..d358070 100644
|
||||
--- a/arduino-cli.yaml
|
||||
+++ b/arduino-cli.yaml
|
||||
@@ -4,4 +4,3 @@ board_manager:
|
||||
- https://raw.githubusercontent.com/RAKwireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless_index.json
|
||||
- https://github.com/HelTecAutomation/Heltec_nRF52/releases/download/1.7.0/package_heltec_nrf_index.json
|
||||
- https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
|
||||
- - http://unsigned.io/arduino/package_unsignedio_UnsignedBoards_index.json
|
||||
43
sx126x.cpp
43
sx126x.cpp
@@ -87,7 +87,7 @@
|
||||
#define FREQ_DIV_6X (double)pow(2.0, 25.0)
|
||||
#define FREQ_STEP_6X (double)(XTAL_FREQ_6X / FREQ_DIV_6X)
|
||||
|
||||
#if BOARD_MODEL == BOARD_TECHO
|
||||
#if BOARD_MODEL == BOARD_TECHO || BOARD_MODEL == BOARD_PROMICRO
|
||||
SPIClass spim3 = SPIClass(NRF_SPIM3, pin_miso, pin_sclk, pin_mosi) ;
|
||||
#define SPI spim3
|
||||
|
||||
@@ -133,7 +133,7 @@ bool sx126x::preInit() {
|
||||
pinMode(_ss, OUTPUT);
|
||||
digitalWrite(_ss, HIGH);
|
||||
|
||||
#if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_HELTEC32_V4 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_XIAO_S3
|
||||
#if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_HELTEC32_V4 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_XIAO_S3 || BOARD_MODEL == BOARD_GENERIC_ESP32 || BOARD_MODEL == BOARD_MESHADVENTURER || BOARD_MODEL == BOARD_AETHERNODE
|
||||
SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs);
|
||||
#elif BOARD_MODEL == BOARD_TECHO
|
||||
SPI.setPins(pin_miso, pin_sclk, pin_mosi);
|
||||
@@ -308,6 +308,22 @@ void sx126x::reset(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void sx126x::setDCDCRegulator(void) {
|
||||
// Documentation
|
||||
// 5. Power Distribution -> 5.1 Selecting DC-DC Converter or LDO Regulation
|
||||
// 13.1.11 SetRegulatorMode
|
||||
|
||||
uint8_t mode_byte = MODE_STDBY_RC_6X;
|
||||
executeOpcode(OP_STANDBY_6X, &mode_byte, 1);
|
||||
|
||||
// Enable DC-DC regulator for high power operation
|
||||
uint8_t reg_mode = 0x01; // 0x00 = LDO, 0x01 = DC-DC
|
||||
executeOpcode(OP_REGULATOR_MODE_6X, ®_mode, 1);
|
||||
|
||||
delay(5);
|
||||
waitOnBusy();
|
||||
}
|
||||
|
||||
void sx126x::calibrate(void) {
|
||||
// Put in STDBY_RC mode before calibration
|
||||
uint8_t mode_byte = MODE_STDBY_RC_6X;
|
||||
@@ -339,9 +355,19 @@ int sx126x::begin(long frequency) {
|
||||
if (!_preinit_done) { if (!preInit()) { return false; } }
|
||||
if (_rxen != -1) { pinMode(_rxen, OUTPUT); }
|
||||
|
||||
//TODO: if it works, make it optional
|
||||
//#ifdef SX1262_USE_DCDC_REGULATOR
|
||||
setDCDCRegulator();
|
||||
//#endif
|
||||
|
||||
calibrate();
|
||||
calibrate_image(frequency);
|
||||
enableTCXO();
|
||||
#if HAS_TCXO
|
||||
enableTCXO();
|
||||
//13.1.15 SetRxTxFallbackMode to STDBY_XOSC
|
||||
uint8_t fallback_mode = 0x30; // STDBY_XOSC after TX/RX
|
||||
executeOpcode(OP_RX_TX_FALLBACK_MODE_6X, &fallback_mode, 1);
|
||||
#endif
|
||||
loraMode();
|
||||
standby();
|
||||
|
||||
@@ -459,6 +485,9 @@ int sx126x::beginPacket(int implicitHeader) {
|
||||
|
||||
int sx126x::endPacket() {
|
||||
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
||||
|
||||
if (_rxen != -1) { digitalWrite(_rxen, LOW); } //Set RXen low when transmitting
|
||||
|
||||
uint8_t timeout[3] = {0}; // Put in single TX mode
|
||||
executeOpcode(OP_TX_6X, timeout, 3);
|
||||
|
||||
@@ -703,6 +732,14 @@ void sx126x::enableTCXO() {
|
||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||
#elif BOARD_MODEL == BOARD_HELTEC32_V4
|
||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||
#elif BOARD_MODEL == BOARD_GENERIC_ESP32
|
||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||
#elif BOARD_MODEL == BOARD_MESHADVENTURER
|
||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||
#elif BOARD_MODEL == BOARD_AETHERNODE
|
||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||
#elif BOARD_MODEL == BOARD_PROMICRO
|
||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||
#endif
|
||||
executeOpcode(OP_DIO3_TCXO_CTRL_6X, buf, 4);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user