From 94e8e0626208c4785c05e9c1b53e003fe3d9a585 Mon Sep 17 00:00:00 2001 From: pelgraine <140762863+pelgraine@users.noreply.github.com> Date: Wed, 28 Jan 2026 17:43:54 +1100 Subject: [PATCH] Merge local VSCode changes to fix T-Deck Pro e-ink display scaling and layout; start removing non-T-Deck variants that aren't the focus of Meck custom firmware --- .vscode/extensions.json | 3 +- boards/t-deck_pro.json | 40 +++ examples/companion_radio/MyMesh.h | 4 +- examples/companion_radio/main.cpp | 87 ++++++- examples/companion_radio/ui-new/UITask.cpp | 11 +- src/helpers/ui/GxEPDDisplay.cpp | 55 ++-- variants/lilygo_tdeck_pro/TDeckBoard.cpp | 45 ++++ variants/lilygo_tdeck_pro/TDeckBoard.h | 90 +++++++ variants/lilygo_tdeck_pro/pins_arduino.h | 19 ++ variants/lilygo_tdeck_pro/platformio.ini | 145 +++++++++++ variants/lilygo_tdeck_pro/target.cpp | 79 ++++++ .../target.h | 28 +- variants/lilygo_tdeck_pro/variant.h | 179 +++++++++++++ variants/rak11310/RAK11310Board.cpp | 30 --- variants/rak11310/RAK11310Board.h | 49 ---- variants/rak11310/platformio.ini | 132 ---------- variants/rak11310/target.cpp | 39 --- variants/rak11310/target.h | 20 -- variants/rak3112/RAK3112Board.h | 96 ------- variants/rak3112/platformio.ini | 223 ---------------- variants/rak3112/target.cpp | 60 ----- variants/rak3112/target.h | 30 --- variants/rak3401/RAK3401Board.cpp | 32 --- variants/rak3401/RAK3401Board.h | 70 ----- variants/rak3401/platformio.ini | 127 ---------- variants/rak3401/target.cpp | 58 ----- variants/rak3401/target.h | 30 --- variants/rak3401/variant.cpp | 52 ---- variants/rak3401/variant.h | 199 --------------- variants/rak3x72/platformio.ini | 42 --- variants/rak3x72/target.cpp | 76 ------ variants/rak3x72/target.h | 56 ---- variants/rak3x72/variant.h | 5 - variants/rak4631/RAK4631Board.cpp | 53 ---- variants/rak4631/RAK4631Board.h | 59 ----- variants/rak4631/platformio.ini | 186 -------------- variants/rak4631/target.cpp | 58 ----- variants/rak4631/target.h | 30 --- variants/rak4631/variant.cpp | 49 ---- variants/rak4631/variant.h | 180 ------------- variants/rpi_picow/PicoWBoard.cpp | 42 --- variants/rpi_picow/PicoWBoard.h | 51 ---- variants/rpi_picow/platformio.ini | 107 -------- variants/rpi_picow/target.cpp | 39 --- variants/rpi_picow/target.h | 20 -- .../SCIndicatorDisplay.h | 128 ---------- .../sensecap_indicator-espnow/platformio.ini | 50 ---- variants/sensecap_indicator-espnow/target.cpp | 56 ---- variants/sensecap_indicator-espnow/target.h | 29 --- .../sensecap_solar/SenseCapSolarBoard.cpp | 21 -- variants/sensecap_solar/SenseCapSolarBoard.h | 34 --- variants/sensecap_solar/platformio.ini | 99 -------- variants/sensecap_solar/target.cpp | 39 --- variants/sensecap_solar/target.h | 21 -- variants/sensecap_solar/variant.cpp | 71 ------ variants/sensecap_solar/variant.h | 85 ------- variants/station_g2/StationG2Board.h | 54 ---- variants/station_g2/platformio.ini | 239 ------------------ variants/station_g2/target.cpp | 61 ----- variants/station_g2/target.h | 30 --- variants/t1000-e/T1000eBoard.cpp | 23 -- variants/t1000-e/T1000eBoard.h | 94 ------- variants/t1000-e/platformio.ini | 119 --------- variants/t1000-e/t1000e_sensors.cpp | 103 -------- variants/t1000-e/t1000e_sensors.h | 9 - variants/t1000-e/target.cpp | 201 --------------- variants/t1000-e/target.h | 47 ---- variants/t1000-e/variant.cpp | 98 ------- variants/t1000-e/variant.h | 136 ---------- variants/tenstar_c3/platformio.ini | 163 ------------ variants/tenstar_c3/target.cpp | 48 ---- variants/tenstar_c3/target.h | 21 -- variants/thinknode_m1/ThinkNodeM1Board.cpp | 36 --- variants/thinknode_m1/ThinkNodeM1Board.h | 46 ---- variants/thinknode_m1/platformio.ini | 130 ---------- variants/thinknode_m1/target.cpp | 152 ----------- variants/thinknode_m1/target.h | 49 ---- variants/thinknode_m1/variant.cpp | 34 --- variants/thinknode_m1/variant.h | 143 ----------- variants/thinknode_m2/ThinknodeM2Board.cpp | 40 --- variants/thinknode_m2/ThinknodeM2Board.h | 18 -- variants/thinknode_m2/pins_arduino.h | 28 -- variants/thinknode_m2/platformio.ini | 210 --------------- variants/thinknode_m2/target.cpp | 57 ----- variants/thinknode_m2/target.h | 32 --- variants/thinknode_m2/variant.h | 12 - variants/thinknode_m3/ThinknodeM3Board.cpp | 80 ------ variants/thinknode_m3/ThinknodeM3Board.h | 68 ----- variants/thinknode_m3/platformio.ini | 122 --------- variants/thinknode_m3/target.cpp | 99 -------- variants/thinknode_m3/target.h | 29 --- variants/thinknode_m3/variant.cpp | 95 ------- variants/thinknode_m3/variant.h | 109 -------- variants/thinknode_m5/ThinknodeM5Board.cpp | 47 ---- variants/thinknode_m5/ThinknodeM5Board.h | 27 -- variants/thinknode_m5/pins_arduino.h | 28 -- variants/thinknode_m5/platformio.ini | 228 ----------------- variants/thinknode_m5/target.cpp | 64 ----- variants/thinknode_m5/variant.h | 28 -- variants/thinknode_m6/ThinkNodeM6Board.cpp | 95 ------- variants/thinknode_m6/ThinkNodeM6Board.h | 56 ---- variants/thinknode_m6/platformio.ini | 118 --------- variants/thinknode_m6/target.cpp | 49 ---- variants/thinknode_m6/target.h | 31 --- variants/thinknode_m6/variant.cpp | 35 --- variants/thinknode_m6/variant.h | 108 -------- variants/tiny_relay/platformio.ini | 50 ---- variants/tiny_relay/target.cpp | 82 ------ variants/tiny_relay/target.h | 59 ----- variants/tiny_relay/variant.h | 5 - .../waveshare_rp2040_lora/WaveshareBoard.cpp | 30 --- .../waveshare_rp2040_lora/WaveshareBoard.h | 61 ----- variants/waveshare_rp2040_lora/platformio.ini | 131 ---------- variants/waveshare_rp2040_lora/target.cpp | 49 ---- variants/waveshare_rp2040_lora/target.h | 21 -- variants/wio-e5-dev/platformio.ini | 50 ---- variants/wio-e5-dev/target.cpp | 73 ------ variants/wio-e5-dev/target.h | 33 --- variants/wio-e5-dev/variant.h | 5 - variants/wio-e5-mini/NullDisplayDriver.h | 24 -- variants/wio-e5-mini/platformio.ini | 50 ---- variants/wio-e5-mini/target.cpp | 94 ------- variants/wio-e5-mini/target.h | 64 ----- variants/wio-e5-mini/variant.h | 10 - variants/wio-tracker-l1-eink/platformio.ini | 69 ----- variants/wio-tracker-l1/WioTrackerL1Board.cpp | 32 --- variants/wio-tracker-l1/WioTrackerL1Board.h | 40 --- variants/wio-tracker-l1/platformio.ini | 110 -------- variants/wio-tracker-l1/target.cpp | 54 ---- variants/wio-tracker-l1/target.h | 37 --- variants/wio-tracker-l1/variant.cpp | 82 ------ variants/wio-tracker-l1/variant.h | 120 --------- variants/wio_wm1110/WioWM1110Board.cpp | 72 ------ variants/wio_wm1110/WioWM1110Board.h | 51 ---- variants/wio_wm1110/platformio.ini | 86 ------- variants/wio_wm1110/target.cpp | 92 ------- variants/wio_wm1110/target.h | 21 -- variants/wio_wm1110/variant.cpp | 92 ------- variants/wio_wm1110/variant.h | 145 ----------- variants/xiao_c3/XiaoC3Board.h | 112 -------- variants/xiao_c3/platformio.ini | 125 --------- variants/xiao_c3/target.cpp | 56 ---- variants/xiao_c3/target.h | 20 -- variants/xiao_c6/XiaoC6Board.cpp | 51 ---- variants/xiao_c6/XiaoC6Board.h | 28 -- variants/xiao_c6/platformio.ini | 185 -------------- variants/xiao_c6/target.h | 21 -- variants/xiao_nrf52/XiaoNrf52Board.cpp | 74 ------ variants/xiao_nrf52/XiaoNrf52Board.h | 53 ---- variants/xiao_nrf52/platformio.ini | 110 -------- variants/xiao_nrf52/target.cpp | 44 ---- variants/xiao_nrf52/target.h | 26 -- variants/xiao_nrf52/variant.cpp | 85 ------- variants/xiao_nrf52/variant.h | 165 ------------ variants/xiao_rp2040/XiaoRP2040Board.cpp | 30 --- variants/xiao_rp2040/XiaoRP2040Board.h | 60 ----- variants/xiao_rp2040/platformio.ini | 109 -------- variants/xiao_rp2040/target.cpp | 49 ---- variants/xiao_rp2040/target.h | 21 -- variants/xiao_s3_wio/XiaoS3WIOBoard.h | 13 - variants/xiao_s3_wio/platformio.ini | 235 ----------------- variants/xiao_s3_wio/target.cpp | 56 ---- variants/xiao_s3_wio/target.h | 30 --- 163 files changed, 741 insertions(+), 10678 deletions(-) create mode 100644 boards/t-deck_pro.json create mode 100644 variants/lilygo_tdeck_pro/TDeckBoard.cpp create mode 100644 variants/lilygo_tdeck_pro/TDeckBoard.h create mode 100644 variants/lilygo_tdeck_pro/pins_arduino.h create mode 100644 variants/lilygo_tdeck_pro/platformio.ini create mode 100644 variants/lilygo_tdeck_pro/target.cpp rename variants/{thinknode_m5 => lilygo_tdeck_pro}/target.h (63%) create mode 100644 variants/lilygo_tdeck_pro/variant.h delete mode 100644 variants/rak11310/RAK11310Board.cpp delete mode 100644 variants/rak11310/RAK11310Board.h delete mode 100644 variants/rak11310/platformio.ini delete mode 100644 variants/rak11310/target.cpp delete mode 100644 variants/rak11310/target.h delete mode 100644 variants/rak3112/RAK3112Board.h delete mode 100644 variants/rak3112/platformio.ini delete mode 100644 variants/rak3112/target.cpp delete mode 100644 variants/rak3112/target.h delete mode 100644 variants/rak3401/RAK3401Board.cpp delete mode 100644 variants/rak3401/RAK3401Board.h delete mode 100644 variants/rak3401/platformio.ini delete mode 100644 variants/rak3401/target.cpp delete mode 100644 variants/rak3401/target.h delete mode 100644 variants/rak3401/variant.cpp delete mode 100644 variants/rak3401/variant.h delete mode 100644 variants/rak3x72/platformio.ini delete mode 100644 variants/rak3x72/target.cpp delete mode 100644 variants/rak3x72/target.h delete mode 100644 variants/rak3x72/variant.h delete mode 100644 variants/rak4631/RAK4631Board.cpp delete mode 100644 variants/rak4631/RAK4631Board.h delete mode 100644 variants/rak4631/platformio.ini delete mode 100644 variants/rak4631/target.cpp delete mode 100644 variants/rak4631/target.h delete mode 100644 variants/rak4631/variant.cpp delete mode 100644 variants/rak4631/variant.h delete mode 100644 variants/rpi_picow/PicoWBoard.cpp delete mode 100644 variants/rpi_picow/PicoWBoard.h delete mode 100644 variants/rpi_picow/platformio.ini delete mode 100644 variants/rpi_picow/target.cpp delete mode 100644 variants/rpi_picow/target.h delete mode 100644 variants/sensecap_indicator-espnow/SCIndicatorDisplay.h delete mode 100644 variants/sensecap_indicator-espnow/platformio.ini delete mode 100644 variants/sensecap_indicator-espnow/target.cpp delete mode 100644 variants/sensecap_indicator-espnow/target.h delete mode 100644 variants/sensecap_solar/SenseCapSolarBoard.cpp delete mode 100644 variants/sensecap_solar/SenseCapSolarBoard.h delete mode 100644 variants/sensecap_solar/platformio.ini delete mode 100644 variants/sensecap_solar/target.cpp delete mode 100644 variants/sensecap_solar/target.h delete mode 100644 variants/sensecap_solar/variant.cpp delete mode 100644 variants/sensecap_solar/variant.h delete mode 100644 variants/station_g2/StationG2Board.h delete mode 100644 variants/station_g2/platformio.ini delete mode 100644 variants/station_g2/target.cpp delete mode 100644 variants/station_g2/target.h delete mode 100644 variants/t1000-e/T1000eBoard.cpp delete mode 100644 variants/t1000-e/T1000eBoard.h delete mode 100644 variants/t1000-e/platformio.ini delete mode 100644 variants/t1000-e/t1000e_sensors.cpp delete mode 100644 variants/t1000-e/t1000e_sensors.h delete mode 100644 variants/t1000-e/target.cpp delete mode 100644 variants/t1000-e/target.h delete mode 100644 variants/t1000-e/variant.cpp delete mode 100644 variants/t1000-e/variant.h delete mode 100644 variants/tenstar_c3/platformio.ini delete mode 100644 variants/tenstar_c3/target.cpp delete mode 100644 variants/tenstar_c3/target.h delete mode 100644 variants/thinknode_m1/ThinkNodeM1Board.cpp delete mode 100644 variants/thinknode_m1/ThinkNodeM1Board.h delete mode 100644 variants/thinknode_m1/platformio.ini delete mode 100644 variants/thinknode_m1/target.cpp delete mode 100644 variants/thinknode_m1/target.h delete mode 100644 variants/thinknode_m1/variant.cpp delete mode 100644 variants/thinknode_m1/variant.h delete mode 100644 variants/thinknode_m2/ThinknodeM2Board.cpp delete mode 100644 variants/thinknode_m2/ThinknodeM2Board.h delete mode 100644 variants/thinknode_m2/pins_arduino.h delete mode 100644 variants/thinknode_m2/platformio.ini delete mode 100644 variants/thinknode_m2/target.cpp delete mode 100644 variants/thinknode_m2/target.h delete mode 100644 variants/thinknode_m2/variant.h delete mode 100644 variants/thinknode_m3/ThinknodeM3Board.cpp delete mode 100644 variants/thinknode_m3/ThinknodeM3Board.h delete mode 100644 variants/thinknode_m3/platformio.ini delete mode 100644 variants/thinknode_m3/target.cpp delete mode 100644 variants/thinknode_m3/target.h delete mode 100644 variants/thinknode_m3/variant.cpp delete mode 100644 variants/thinknode_m3/variant.h delete mode 100644 variants/thinknode_m5/ThinknodeM5Board.cpp delete mode 100644 variants/thinknode_m5/ThinknodeM5Board.h delete mode 100644 variants/thinknode_m5/pins_arduino.h delete mode 100644 variants/thinknode_m5/platformio.ini delete mode 100644 variants/thinknode_m5/target.cpp delete mode 100644 variants/thinknode_m5/variant.h delete mode 100644 variants/thinknode_m6/ThinkNodeM6Board.cpp delete mode 100644 variants/thinknode_m6/ThinkNodeM6Board.h delete mode 100644 variants/thinknode_m6/platformio.ini delete mode 100644 variants/thinknode_m6/target.cpp delete mode 100644 variants/thinknode_m6/target.h delete mode 100644 variants/thinknode_m6/variant.cpp delete mode 100644 variants/thinknode_m6/variant.h delete mode 100644 variants/tiny_relay/platformio.ini delete mode 100644 variants/tiny_relay/target.cpp delete mode 100644 variants/tiny_relay/target.h delete mode 100644 variants/tiny_relay/variant.h delete mode 100644 variants/waveshare_rp2040_lora/WaveshareBoard.cpp delete mode 100644 variants/waveshare_rp2040_lora/WaveshareBoard.h delete mode 100644 variants/waveshare_rp2040_lora/platformio.ini delete mode 100644 variants/waveshare_rp2040_lora/target.cpp delete mode 100644 variants/waveshare_rp2040_lora/target.h delete mode 100644 variants/wio-e5-dev/platformio.ini delete mode 100644 variants/wio-e5-dev/target.cpp delete mode 100644 variants/wio-e5-dev/target.h delete mode 100644 variants/wio-e5-dev/variant.h delete mode 100644 variants/wio-e5-mini/NullDisplayDriver.h delete mode 100644 variants/wio-e5-mini/platformio.ini delete mode 100644 variants/wio-e5-mini/target.cpp delete mode 100644 variants/wio-e5-mini/target.h delete mode 100644 variants/wio-e5-mini/variant.h delete mode 100644 variants/wio-tracker-l1-eink/platformio.ini delete mode 100644 variants/wio-tracker-l1/WioTrackerL1Board.cpp delete mode 100644 variants/wio-tracker-l1/WioTrackerL1Board.h delete mode 100644 variants/wio-tracker-l1/platformio.ini delete mode 100644 variants/wio-tracker-l1/target.cpp delete mode 100644 variants/wio-tracker-l1/target.h delete mode 100644 variants/wio-tracker-l1/variant.cpp delete mode 100644 variants/wio-tracker-l1/variant.h delete mode 100644 variants/wio_wm1110/WioWM1110Board.cpp delete mode 100644 variants/wio_wm1110/WioWM1110Board.h delete mode 100644 variants/wio_wm1110/platformio.ini delete mode 100644 variants/wio_wm1110/target.cpp delete mode 100644 variants/wio_wm1110/target.h delete mode 100644 variants/wio_wm1110/variant.cpp delete mode 100644 variants/wio_wm1110/variant.h delete mode 100644 variants/xiao_c3/XiaoC3Board.h delete mode 100644 variants/xiao_c3/platformio.ini delete mode 100644 variants/xiao_c3/target.cpp delete mode 100644 variants/xiao_c3/target.h delete mode 100644 variants/xiao_c6/XiaoC6Board.cpp delete mode 100644 variants/xiao_c6/XiaoC6Board.h delete mode 100644 variants/xiao_c6/platformio.ini delete mode 100644 variants/xiao_c6/target.h delete mode 100644 variants/xiao_nrf52/XiaoNrf52Board.cpp delete mode 100644 variants/xiao_nrf52/XiaoNrf52Board.h delete mode 100644 variants/xiao_nrf52/platformio.ini delete mode 100644 variants/xiao_nrf52/target.cpp delete mode 100644 variants/xiao_nrf52/target.h delete mode 100644 variants/xiao_nrf52/variant.cpp delete mode 100644 variants/xiao_nrf52/variant.h delete mode 100644 variants/xiao_rp2040/XiaoRP2040Board.cpp delete mode 100644 variants/xiao_rp2040/XiaoRP2040Board.h delete mode 100644 variants/xiao_rp2040/platformio.ini delete mode 100644 variants/xiao_rp2040/target.cpp delete mode 100644 variants/xiao_rp2040/target.h delete mode 100644 variants/xiao_s3_wio/XiaoS3WIOBoard.h delete mode 100644 variants/xiao_s3_wio/platformio.ini delete mode 100644 variants/xiao_s3_wio/target.cpp delete mode 100644 variants/xiao_s3_wio/target.h diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 080e70d0..8057bc70 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,6 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format "recommendations": [ + "pioarduino.pioarduino-ide", "platformio.platformio-ide" ], "unwantedRecommendations": [ diff --git a/boards/t-deck_pro.json b/boards/t-deck_pro.json new file mode 100644 index 00000000..a513ee1c --- /dev/null +++ b/boards/t-deck_pro.json @@ -0,0 +1,40 @@ +{ + "build": { + "arduino": { + "ldscript": "esp32s3_out.ld", + "memory_type": "qio_qspi", + "partitions": "default_16MB.csv" + }, + "core": "esp32", + "extra_flags": [ + "-DBOARD_HAS_PSRAM", + "-DARDUINO_USB_CDC_ON_BOOT=1", + "-DARDUINO_USB_MODE=1", + "-DARDUINO_RUNNING_CORE=1", + "-DARDUINO_EVENT_RUNNING_CORE=1" + ], + "f_cpu": "240000000L", + "f_flash": "80000000L", + "flash_mode": "qio", + "hwids": [["0x303A", "0x1001"]], + "mcu": "esp32s3", + "variant": "esp32s3" + }, + "connectivity": ["wifi", "bluetooth", "lora"], + "debug": { + "default_tool": "esp-builtin", + "onboard_tools": ["esp-builtin"], + "openocd_target": "esp32s3.cfg" + }, + "frameworks": ["arduino", "espidf"], + "name": "LilyGo T-Deck Pro (16MB Flash 8MB QSPI PSRAM)", + "upload": { + "flash_size": "16MB", + "maximum_ram_size": 327680, + "maximum_size": 16777216, + "require_upload_port": true, + "speed": 921600 + }, + "url": "https://www.lilygo.cc/products/t-deck-pro", + "vendor": "LilyGo" +} \ No newline at end of file diff --git a/examples/companion_radio/MyMesh.h b/examples/companion_radio/MyMesh.h index a2b0033f..fbcf037c 100644 --- a/examples/companion_radio/MyMesh.h +++ b/examples/companion_radio/MyMesh.h @@ -8,11 +8,11 @@ #define FIRMWARE_VER_CODE 8 #ifndef FIRMWARE_BUILD_DATE -#define FIRMWARE_BUILD_DATE "30 Nov 2025" +#define FIRMWARE_BUILD_DATE "28 Jan 2026" #endif #ifndef FIRMWARE_VERSION -#define FIRMWARE_VERSION "v1.11.0" +#define FIRMWARE_VERSION "Meck v0.2" #endif #if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM) diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index 7e636ace..71248157 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -107,12 +107,42 @@ void halt() { void setup() { Serial.begin(115200); + delay(100); // Give serial time to initialize + Serial.println("=== setup() - STARTING ==="); board.begin(); + Serial.println("setup() - board.begin() done"); #ifdef DISPLAY_CLASS DisplayDriver* disp = NULL; + Serial.println("setup() - about to call display.begin()"); + + // ========================================================================= + // T-Deck Pro V1.1: Initialize E-Ink reset pin BEFORE display.begin() + // This is critical - the display won't work without proper reset sequence + // ========================================================================= + #if defined(LilyGo_TDeck_Pro) + // Initialize E-Ink reset pin (GPIO 16) + pinMode(PIN_DISPLAY_RST, OUTPUT); + digitalWrite(PIN_DISPLAY_RST, HIGH); + Serial.println("setup() - E-Ink reset pin initialized"); + + // Initialize Touch reset pin (GPIO 38) + #ifdef CST328_PIN_RST + pinMode(CST328_PIN_RST, OUTPUT); + digitalWrite(CST328_PIN_RST, HIGH); + delay(20); + digitalWrite(CST328_PIN_RST, LOW); + delay(80); + digitalWrite(CST328_PIN_RST, HIGH); + delay(20); + Serial.println("setup() - Touch reset pin initialized"); + #endif + #endif + // ========================================================================= + if (display.begin()) { + Serial.println("setup() - display.begin() returned true"); disp = &display; disp->startFrame(); #ifdef ST7789 @@ -120,18 +150,28 @@ void setup() { #endif disp->drawTextCentered(disp->width() / 2, 28, "Loading..."); disp->endFrame(); + Serial.println("setup() - Loading screen drawn"); + } else { + Serial.println("setup() - display.begin() returned false!"); } #endif - if (!radio_init()) { halt(); } + Serial.println("setup() - about to call radio_init()"); + if (!radio_init()) { + Serial.println("setup() - radio_init() FAILED! Halting."); + halt(); + } + Serial.println("setup() - radio_init() done"); + Serial.println("setup() - about to call fast_rng.begin()"); fast_rng.begin(radio_get_rng_seed()); + Serial.println("setup() - fast_rng.begin() done"); #if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM) + Serial.println("setup() - NRF52/STM32 filesystem init"); InternalFS.begin(); #if defined(QSPIFLASH) if (!QSPIFlash.begin()) { - // debug output might not be available at this point, might be too early. maybe should fall back to InternalFS here? MESH_DEBUG_PRINTLN("CustomLFS_QSPIFlash: failed to initialize"); } else { MESH_DEBUG_PRINTLN("CustomLFS_QSPIFlash: initialized successfully"); @@ -141,7 +181,11 @@ void setup() { ExtraFS.begin(); #endif #endif + Serial.println("setup() - about to call store.begin()"); store.begin(); + Serial.println("setup() - store.begin() done"); + + Serial.println("setup() - about to call the_mesh.begin()"); the_mesh.begin( #ifdef DISPLAY_CLASS disp != NULL @@ -149,16 +193,27 @@ void setup() { false #endif ); + Serial.println("setup() - the_mesh.begin() done"); #ifdef BLE_PIN_CODE + Serial.println("setup() - about to call serial_interface.begin() with BLE"); serial_interface.begin(BLE_NAME_PREFIX, the_mesh.getNodePrefs()->node_name, the_mesh.getBLEPin()); + Serial.println("setup() - serial_interface.begin() done"); #else serial_interface.begin(Serial); #endif + Serial.println("setup() - about to call the_mesh.startInterface()"); the_mesh.startInterface(serial_interface); + Serial.println("setup() - the_mesh.startInterface() done"); + #elif defined(RP2040_PLATFORM) + Serial.println("setup() - RP2040 filesystem init"); LittleFS.begin(); + Serial.println("setup() - about to call store.begin()"); store.begin(); + Serial.println("setup() - store.begin() done"); + + Serial.println("setup() - about to call the_mesh.begin()"); the_mesh.begin( #ifdef DISPLAY_CLASS disp != NULL @@ -166,6 +221,7 @@ void setup() { false #endif ); + Serial.println("setup() - the_mesh.begin() done"); //#ifdef WIFI_SSID // WiFi.begin(WIFI_SSID, WIFI_PWD); @@ -181,10 +237,20 @@ void setup() { #else serial_interface.begin(Serial); #endif - the_mesh.startInterface(serial_interface); + Serial.println("setup() - about to call the_mesh.startInterface()"); + the_mesh.startInterface(serial_interface); + Serial.println("setup() - the_mesh.startInterface() done"); + #elif defined(ESP32) + Serial.println("setup() - ESP32 filesystem init - calling SPIFFS.begin()"); SPIFFS.begin(true); + Serial.println("setup() - SPIFFS.begin() done"); + + Serial.println("setup() - about to call store.begin()"); store.begin(); + Serial.println("setup() - store.begin() done"); + + Serial.println("setup() - about to call the_mesh.begin()"); the_mesh.begin( #ifdef DISPLAY_CLASS disp != NULL @@ -192,12 +258,16 @@ void setup() { false #endif ); + Serial.println("setup() - the_mesh.begin() done"); #ifdef WIFI_SSID + Serial.println("setup() - WiFi mode"); WiFi.begin(WIFI_SSID, WIFI_PWD); serial_interface.begin(TCP_PORT); #elif defined(BLE_PIN_CODE) + Serial.println("setup() - about to call serial_interface.begin() with BLE"); serial_interface.begin(BLE_NAME_PREFIX, the_mesh.getNodePrefs()->node_name, the_mesh.getBLEPin()); + Serial.println("setup() - serial_interface.begin() done"); #elif defined(SERIAL_RX) companion_serial.setPins(SERIAL_RX, SERIAL_TX); companion_serial.begin(115200); @@ -205,16 +275,25 @@ void setup() { #else serial_interface.begin(Serial); #endif + Serial.println("setup() - about to call the_mesh.startInterface()"); the_mesh.startInterface(serial_interface); + Serial.println("setup() - the_mesh.startInterface() done"); + #else #error "need to define filesystem" #endif + Serial.println("setup() - about to call sensors.begin()"); sensors.begin(); + Serial.println("setup() - sensors.begin() done"); #ifdef DISPLAY_CLASS - ui_task.begin(disp, &sensors, the_mesh.getNodePrefs()); // still want to pass this in as dependency, as prefs might be moved + Serial.println("setup() - about to call ui_task.begin()"); + ui_task.begin(disp, &sensors, the_mesh.getNodePrefs()); + Serial.println("setup() - ui_task.begin() done"); #endif + + Serial.println("=== setup() - COMPLETE ==="); } void loop() { diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 8077627f..43c1bf69 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -68,11 +68,12 @@ public: return 1000; } - void poll() override { - if (millis() >= dismiss_after) { - _task->gotoHomeScreen(); - } +void poll() override { + if (millis() >= dismiss_after) { + Serial.println(">>> SplashScreen calling gotoHomeScreen() <<<"); + _task->gotoHomeScreen(); } +} }; class HomeScreen : public UIScreen { @@ -778,7 +779,7 @@ void UITask::loop() { if (buzzer.isPlaying()) buzzer.loop(); #endif - if (curr) curr->poll(); +if (curr) curr->poll(); if (_display != NULL && _display->isOn()) { if (millis() >= _next_refresh && curr) { diff --git a/src/helpers/ui/GxEPDDisplay.cpp b/src/helpers/ui/GxEPDDisplay.cpp index ad47754b..a1a598c2 100644 --- a/src/helpers/ui/GxEPDDisplay.cpp +++ b/src/helpers/ui/GxEPDDisplay.cpp @@ -1,4 +1,3 @@ - #include "GxEPDDisplay.h" #ifdef EXP_PIN_BACKLIGHT @@ -7,20 +6,32 @@ #endif #ifndef DISPLAY_ROTATION - #define DISPLAY_ROTATION 3 + #define DISPLAY_ROTATION 0 #endif #ifdef ESP32 - SPIClass SPI1 = SPIClass(FSPI); + // E-ink and LoRa SHARE the same SPI bus (SCK=36, MOSI=33) + // They MUST use the same SPI peripheral (HSPI) to avoid GPIO conflicts + // Different chip selects allow both to coexist: E-ink CS=34, LoRa CS=3 + SPIClass displaySpi(HSPI); #endif bool GxEPDDisplay::begin() { - display.epd2.selectSPI(SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0)); #ifdef ESP32 - SPI1.begin(PIN_DISPLAY_SCLK, PIN_DISPLAY_MISO, PIN_DISPLAY_MOSI, PIN_DISPLAY_CS); -#else - SPI1.begin(); + // Initialize HSPI with shared pins + // SCK=36, MISO=47 (for LoRa receive), MOSI=33, SS=34 (e-ink CS) + displaySpi.begin(PIN_DISPLAY_SCLK, 47, PIN_DISPLAY_MOSI, PIN_DISPLAY_CS); + + // Tell GxEPD2 to use our SPI instance + // Using slower speed (4MHz) for reliable e-ink communication + display.epd2.selectSPI(displaySpi, SPISettings(4000000, MSBFIRST, SPI_MODE0)); #endif + + // Initialize with: + // - 115200 baud for debug serial + // - initial=true (do initial update) + // - reset_duration=2 (ms) + // - pulldown_rst_mode=false display.init(115200, true, 2, false); display.setRotation(DISPLAY_ROTATION); setTextSize(1); // Default to size 1 @@ -28,11 +39,14 @@ bool GxEPDDisplay::begin() { display.fillScreen(GxEPD_WHITE); display.display(true); + #if DISP_BACKLIGHT digitalWrite(DISP_BACKLIGHT, LOW); pinMode(DISP_BACKLIGHT, OUTPUT); #endif + _init = true; + _isOn = true; // Set display as "on" after initialization return true; } @@ -70,14 +84,14 @@ void GxEPDDisplay::startFrame(Color bkg) { void GxEPDDisplay::setTextSize(int sz) { display_crc.update(sz); switch(sz) { - case 1: // Small + case 1: // Small - use 9pt (was 9pt) display.setFont(&FreeSans9pt7b); break; - case 2: // Medium Bold - display.setFont(&FreeSansBold12pt7b); + case 2: // Medium Bold - use 9pt bold instead of 12pt + display.setFont(&FreeSans9pt7b); break; - case 3: // Large - display.setFont(&FreeSans18pt7b); + case 3: // Large - use 12pt instead of 18pt + display.setFont(&FreeSansBold12pt7b); break; default: display.setFont(&FreeSans9pt7b); @@ -98,7 +112,8 @@ void GxEPDDisplay::setColor(Color c) { void GxEPDDisplay::setCursor(int x, int y) { display_crc.update(x); display_crc.update(y); - display.setCursor((x+offset_x)*scale_x, (y+offset_y)*scale_y); + // Add extra offset (+5) to push text baseline down, preventing ascenders from overlapping elements above + display.setCursor((x+offset_x)*scale_x, (y+offset_y+5)*scale_y); } void GxEPDDisplay::print(const char* str) { @@ -111,7 +126,7 @@ void GxEPDDisplay::fillRect(int x, int y, int w, int h) { display_crc.update(y); display_crc.update(w); display_crc.update(h); - display.fillRect(x*scale_x, y*scale_y, w*scale_x, h*scale_y, _curr_color); + display.fillRect((x+offset_x)*scale_x, (y+offset_y)*scale_y, w*scale_x, h*scale_y, _curr_color); } void GxEPDDisplay::drawRect(int x, int y, int w, int h) { @@ -119,7 +134,7 @@ void GxEPDDisplay::drawRect(int x, int y, int w, int h) { display_crc.update(y); display_crc.update(w); display_crc.update(h); - display.drawRect(x*scale_x, y*scale_y, w*scale_x, h*scale_y, _curr_color); + display.drawRect((x+offset_x)*scale_x, (y+offset_y)*scale_y, w*scale_x, h*scale_y, _curr_color); } void GxEPDDisplay::drawXbm(int x, int y, const uint8_t* bits, int w, int h) { @@ -128,9 +143,9 @@ void GxEPDDisplay::drawXbm(int x, int y, const uint8_t* bits, int w, int h) { display_crc.update(w); display_crc.update(h); display_crc.update(bits, w * h / 8); - // Calculate the base position in display coordinates - uint16_t startX = x * scale_x; - uint16_t startY = y * scale_y; + // Calculate the base position in display coordinates (with offset applied) + uint16_t startX = (x + offset_x) * scale_x; + uint16_t startY = (y + offset_y) * scale_y; // Width in bytes for bitmap processing uint16_t widthInBytes = (w + 7) / 8; @@ -173,7 +188,7 @@ uint16_t GxEPDDisplay::getTextWidth(const char* str) { void GxEPDDisplay::endFrame() { uint32_t crc = display_crc.finalize(); if (crc != last_display_crc_value) { - display.display(true); + display.display(true); // Partial refresh last_display_crc_value = crc; } -} +} \ No newline at end of file diff --git a/variants/lilygo_tdeck_pro/TDeckBoard.cpp b/variants/lilygo_tdeck_pro/TDeckBoard.cpp new file mode 100644 index 00000000..cf1ddf91 --- /dev/null +++ b/variants/lilygo_tdeck_pro/TDeckBoard.cpp @@ -0,0 +1,45 @@ +#include +#include "variant.h" +#include "TDeckBoard.h" + +uint32_t deviceOnline = 0x00; + +void TDeckBoard::begin() { + + ESP32Board::begin(); + + Serial.println("TDeckBoard::begin() - starting"); + + // Enable peripheral power (keyboard, sensors, etc.) + pinMode(PIN_PERF_POWERON, OUTPUT); + digitalWrite(PIN_PERF_POWERON, HIGH); + Serial.println("TDeckBoard::begin() - peripheral power enabled"); + + // Enable LoRa module power + #ifdef P_LORA_EN + pinMode(P_LORA_EN, OUTPUT); + digitalWrite(P_LORA_EN, HIGH); + delay(10); // Allow module to power up + Serial.println("TDeckBoard::begin() - LoRa power enabled"); + #endif + + // Configure user button + pinMode(PIN_USER_BTN, INPUT); + + // Configure LoRa SPI pins + pinMode(P_LORA_MISO, INPUT_PULLUP); + + // Handle wake from deep sleep + esp_reset_reason_t reason = esp_reset_reason(); + if (reason == ESP_RST_DEEPSLEEP) { + uint64_t wakeup_source = esp_sleep_get_ext1_wakeup_status(); + if (wakeup_source & (1ULL << P_LORA_DIO_1)) { + startup_reason = BD_STARTUP_RX_PACKET; // Received a LoRa packet while in deep sleep + } + + rtc_gpio_hold_dis((gpio_num_t)P_LORA_NSS); + rtc_gpio_deinit((gpio_num_t)P_LORA_DIO_1); + } + + Serial.println("TDeckBoard::begin() - complete"); +} \ No newline at end of file diff --git a/variants/lilygo_tdeck_pro/TDeckBoard.h b/variants/lilygo_tdeck_pro/TDeckBoard.h new file mode 100644 index 00000000..ac820e30 --- /dev/null +++ b/variants/lilygo_tdeck_pro/TDeckBoard.h @@ -0,0 +1,90 @@ +#pragma once + +#include +#include +#include "helpers/ESP32Board.h" +#include + +// BQ27220 Fuel Gauge Registers +#define BQ27220_REG_VOLTAGE 0x08 +#define BQ27220_REG_CURRENT 0x0C +#define BQ27220_REG_SOC 0x2C +#define BQ27220_I2C_ADDR 0x55 + +class TDeckBoard : public ESP32Board { +public: + void begin(); + + void enterDeepSleep(uint32_t secs, int pin_wake_btn) { + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); + + // Make sure the DIO1 and NSS GPIOs are held at required levels during deep sleep + rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY); + rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1); + + rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS); + + if (pin_wake_btn < 0) { + esp_sleep_enable_ext1_wakeup((1ULL << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); + } else { + esp_sleep_enable_ext1_wakeup((1ULL << P_LORA_DIO_1) | (1ULL << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); + } + + if (secs > 0) { + esp_sleep_enable_timer_wakeup(secs * 1000000ULL); + } + + // Finally set ESP32 into sleep + esp_deep_sleep_start(); // CPU halts here and never returns! + } + + // Read battery voltage from BQ27220 fuel gauge via I2C + // Returns 0 silently if fuel gauge not present/responding + uint16_t getBattMilliVolts() { + #if HAS_BQ27220 + Wire.beginTransmission(BQ27220_I2C_ADDR); + Wire.write(BQ27220_REG_VOLTAGE); + if (Wire.endTransmission(false) != 0) { + return 0; // I2C error - fuel gauge not responding + } + + uint8_t count = Wire.requestFrom((uint8_t)BQ27220_I2C_ADDR, (uint8_t)2); + if (count != 2) { + return 0; // Read error + } + + uint16_t voltage = Wire.read(); + voltage |= (Wire.read() << 8); + return voltage; // Already in mV + #else + return 0; + #endif + } + + // Read state of charge percentage from BQ27220 + // Returns 0 silently if fuel gauge not present/responding + uint8_t getBatteryPercent() { + #if HAS_BQ27220 + Wire.beginTransmission(BQ27220_I2C_ADDR); + Wire.write(BQ27220_REG_SOC); + if (Wire.endTransmission(false) != 0) { + return 0; + } + + uint8_t count = Wire.requestFrom((uint8_t)BQ27220_I2C_ADDR, (uint8_t)2); + if (count != 2) { + return 0; + } + + uint16_t soc = Wire.read(); + soc |= (Wire.read() << 8); + return (uint8_t)min(soc, (uint16_t)100); + #else + return 0; + #endif + } + + const char* getManufacturerName() const { + return "LilyGo T-Deck Pro"; + } +}; \ No newline at end of file diff --git a/variants/lilygo_tdeck_pro/pins_arduino.h b/variants/lilygo_tdeck_pro/pins_arduino.h new file mode 100644 index 00000000..46cc56c1 --- /dev/null +++ b/variants/lilygo_tdeck_pro/pins_arduino.h @@ -0,0 +1,19 @@ +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define USB_VID 0x303a +#define USB_PID 0x1001 + +// I2C - used for keyboard, touch controller, sensors, fuel gauge +static const uint8_t SDA = 13; +static const uint8_t SCL = 14; + +// Default SPI will be mapped to Radio +static const uint8_t SS = 3; +static const uint8_t MOSI = 33; +static const uint8_t MISO = 47; +static const uint8_t SCK = 36; + +#endif /* Pins_Arduino_h */ \ No newline at end of file diff --git a/variants/lilygo_tdeck_pro/platformio.ini b/variants/lilygo_tdeck_pro/platformio.ini new file mode 100644 index 00000000..165751e5 --- /dev/null +++ b/variants/lilygo_tdeck_pro/platformio.ini @@ -0,0 +1,145 @@ +[LilyGo_TDeck_Pro] +extends = esp32_base +board = t-deck_pro +board_build.flash_mode = qio +board_build.f_flash = 80000000L +board_build.arduino.memory_type = qio_qspi +board_upload.flash_size = 16MB +build_flags = + ${esp32_base.build_flags} + ${sensor_base.build_flags} + -I variants/LilyGo_TDeck_Pro + -D LilyGo_TDeck_Pro + -D BOARD_HAS_PSRAM=1 + -D CORE_DEBUG_LEVEL=1 + -D FORMAT_SPIFFS_IF_FAILED=1 + -D FORMAT_LITTLEFS_IF_FAILED=1 + -D ARDUINO_USB_CDC_ON_BOOT=1 + -D RADIO_CLASS=CustomSX1262 + -D WRAPPER_CLASS=CustomSX1262Wrapper + -D LORA_TX_POWER=22 + -D SX126X_DIO2_AS_RF_SWITCH + -D SX126X_CURRENT_LIMIT=140 + -D SX126X_RX_BOOSTED_GAIN=1 + -D SX126X_DIO3_TCXO_VOLTAGE=2.4f + -D P_LORA_DIO_1=5 + -D P_LORA_NSS=3 + -D P_LORA_RESET=4 + -D P_LORA_BUSY=6 + -D P_LORA_SCLK=36 + -D P_LORA_MISO=47 + -D P_LORA_MOSI=33 + -D P_LORA_EN=46 + -D ENV_INCLUDE_GPS=1 + -D PIN_GPS_RX=44 + -D PIN_GPS_TX=43 + -D GPS_BAUD_RATE=38400 + -D ENV_INCLUDE_AHTX0=0 + -D ENV_INCLUDE_BME280=0 + -D ENV_INCLUDE_BMP280=0 + -D ENV_INCLUDE_SHTC3=0 + -D ENV_INCLUDE_SHT4X=0 + -D ENV_INCLUDE_LPS22HB=0 + -D ENV_INCLUDE_INA3221=0 + -D ENV_INCLUDE_INA219=0 + -D ENV_INCLUDE_INA226=0 + -D ENV_INCLUDE_INA260=0 + -D ENV_INCLUDE_MLX90614=0 + -D ENV_INCLUDE_VL53L0X=0 + -D ENV_INCLUDE_BME680=0 + -D ENV_INCLUDE_BMP085=0 + -D USE_EINK + -D DISPLAY_CLASS=GxEPDDisplay + -D EINK_DISPLAY_MODEL=GxEPD2_310_GDEQ031T10 + -D EINK_WIDTH=240 + -D EINK_HEIGHT=320 + -D EINK_CS=34 + -D EINK_DC=35 + -D EINK_RST=16 + -D EINK_BUSY=37 + -D EINK_SCLK=36 + -D EINK_MOSI=33 + -D EINK_BL=45 + -D EINK_NOT_HIBERNATE=1 + -D EINK_LIMIT_FASTREFRESH=10 + -D EINK_LIMIT_GHOSTING_PX=2000 + -D DISPLAY_ROTATION=0 + -D EINK_ROTATION=0 + -D EINK_SCALE_X=1.875f + -D EINK_SCALE_Y=2.5f + -D EINK_X_OFFSET=0 + -D EINK_Y_OFFSET=5 + -D PIN_DISPLAY_CS=34 + -D PIN_DISPLAY_DC=35 + -D PIN_DISPLAY_RST=16 + -D PIN_DISPLAY_BUSY=37 + -D PIN_DISPLAY_SCLK=36 + -D PIN_DISPLAY_MISO=-1 + -D PIN_DISPLAY_MOSI=33 + -D PIN_DISPLAY_BL=45 + -D PIN_USER_BTN=0 + -D CST328_PIN_RST=38 +build_src_filter = ${esp32_base.build_src_filter} + +<../variants/LilyGo_TDeck_Pro> + + +lib_deps = + ${esp32_base.lib_deps} + ${sensor_base.lib_deps} + zinggjm/GxEPD2@^1.5.9 + adafruit/Adafruit GFX Library@^1.11.0 + bakercp/CRC32@^2.0.0 + +[env:LilyGo_TDeck_Pro_companion_radio_usb] +extends = LilyGo_TDeck_Pro +build_flags = + ${LilyGo_TDeck_Pro.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D OFFLINE_QUEUE_SIZE=256 +build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> + + +lib_deps = + ${LilyGo_TDeck_Pro.lib_deps} + densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_TDeck_Pro_companion_radio_ble] +extends = LilyGo_TDeck_Pro +build_flags = + ${LilyGo_TDeck_Pro.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D BLE_PIN_CODE=234567 + -D OFFLINE_QUEUE_SIZE=256 +build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> + + +lib_deps = + ${LilyGo_TDeck_Pro.lib_deps} + densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_TDeck_Pro_repeater] +extends = LilyGo_TDeck_Pro +build_flags = + ${LilyGo_TDeck_Pro.build_flags} + -D ADVERT_NAME='"TDeck Pro Repeater"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 + -D NO_OTA=1 +build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + +<../examples/simple_repeater> + + +lib_deps = + ${LilyGo_TDeck_Pro.lib_deps} + me-no-dev/AsyncTCP @ ^1.1.1 + me-no-dev/ESPAsyncWebServer @ ^1.2.3 \ No newline at end of file diff --git a/variants/lilygo_tdeck_pro/target.cpp b/variants/lilygo_tdeck_pro/target.cpp new file mode 100644 index 00000000..04653ae1 --- /dev/null +++ b/variants/lilygo_tdeck_pro/target.cpp @@ -0,0 +1,79 @@ +#include +#include "variant.h" +#include "target.h" + +TDeckBoard board; + +#if defined(P_LORA_SCLK) + static SPIClass loraSpi(HSPI); + RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, loraSpi); +#else + RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); +#endif + +WRAPPER_CLASS radio_driver(radio, board); + +ESP32RTCClock fallback_clock; +AutoDiscoverRTCClock rtc_clock(fallback_clock); + +#if HAS_GPS + MicroNMEALocationProvider gps(Serial2, &rtc_clock); + EnvironmentSensorManager sensors(gps); +#else + SensorManager sensors; +#endif + +#ifdef DISPLAY_CLASS + DISPLAY_CLASS display; + MomentaryButton user_btn(PIN_USER_BTN, 1000, true); +#endif + +bool radio_init() { + Serial.println("radio_init() - starting"); + + // NOTE: board.begin() is called by main.cpp setup() before radio_init() + // So we don't call it here to avoid duplicate initialization + + fallback_clock.begin(); + Serial.println("radio_init() - fallback_clock started"); + + // Initialize I2C with correct pins for T-Deck Pro + Wire.begin(I2C_SDA, I2C_SCL); + Serial.println("radio_init() - I2C initialized"); + + rtc_clock.begin(Wire); + Serial.println("radio_init() - rtc_clock started"); + +#if defined(P_LORA_SCLK) + Serial.println("radio_init() - initializing LoRa SPI..."); + loraSpi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI, P_LORA_NSS); + Serial.println("radio_init() - SPI initialized, calling radio.std_init()..."); + bool result = radio.std_init(&loraSpi); + Serial.print("radio_init() - radio.std_init() returned: "); + Serial.println(result ? "SUCCESS" : "FAILED"); + return result; +#else + Serial.println("radio_init() - calling radio.std_init() without custom SPI..."); + return radio.std_init(); +#endif +} + +uint32_t radio_get_rng_seed() { + return radio.random(0x7FFFFFFF); +} + +void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { + radio.setFrequency(freq); + radio.setSpreadingFactor(sf); + radio.setBandwidth(bw); + radio.setCodingRate(cr); +} + +void radio_set_tx_power(uint8_t dbm) { + radio.setOutputPower(dbm); +} + +mesh::LocalIdentity radio_new_identity() { + RadioNoiseListener rng(radio); + return mesh::LocalIdentity(&rng); +} \ No newline at end of file diff --git a/variants/thinknode_m5/target.h b/variants/lilygo_tdeck_pro/target.h similarity index 63% rename from variants/thinknode_m5/target.h rename to variants/lilygo_tdeck_pro/target.h index 2af42095..6f548143 100644 --- a/variants/thinknode_m5/target.h +++ b/variants/lilygo_tdeck_pro/target.h @@ -3,23 +3,31 @@ #define RADIOLIB_STATIC_ONLY 1 #include #include -//#include -#include #include +#include #include -#include -#include -#include + #ifdef DISPLAY_CLASS #include #include #endif -extern ThinknodeM5Board board; +#if HAS_GPS + #include "helpers/sensors/EnvironmentSensorManager.h" + #include "helpers/sensors/MicroNMEALocationProvider.h" +#else + #include +#endif + +extern TDeckBoard board; extern WRAPPER_CLASS radio_driver; extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; -extern PCA9557 expander; + +#if HAS_GPS + extern EnvironmentSensorManager sensors; +#else + extern SensorManager sensors; +#endif #ifdef DISPLAY_CLASS extern DISPLAY_CLASS display; @@ -30,6 +38,4 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); - - \ No newline at end of file +mesh::LocalIdentity radio_new_identity(); \ No newline at end of file diff --git a/variants/lilygo_tdeck_pro/variant.h b/variants/lilygo_tdeck_pro/variant.h new file mode 100644 index 00000000..36b08773 --- /dev/null +++ b/variants/lilygo_tdeck_pro/variant.h @@ -0,0 +1,179 @@ +#pragma once + +// ============================================================================= +// LilyGo T-Deck Pro v1.1 - Pin Definitions +// Based on Meshtastic PR #9378 for T-Deck Pro V1.1 compatibility +// ============================================================================= + +// Peripheral Power Control +#define PIN_PERF_POWERON 10 // Powers on peripherals + +// ----------------------------------------------------------------------------- +// E-Ink Display (GDEQ031T10 - 240x320) +// E-ink SHARES the SPI bus with LoRa (SCK=36, MOSI=33) +// They use different chip selects: E-ink CS=34, LoRa CS=3 +// ----------------------------------------------------------------------------- +#define PIN_EINK_CS 34 +#define PIN_EINK_DC 35 +#define PIN_EINK_RES 16 // Reset pin - must be held HIGH +#define PIN_EINK_BUSY 37 +#define PIN_EINK_SCLK 36 // Shared with LoRa +#define PIN_EINK_MOSI 33 // Shared with LoRa +#define PIN_EINK_BL 45 // Backlight PWM (optional, V1.1 feature) + +// Legacy aliases for MeshCore compatibility +#define PIN_DISPLAY_CS PIN_EINK_CS +#define PIN_DISPLAY_DC PIN_EINK_DC +#define PIN_DISPLAY_RST PIN_EINK_RES +#define PIN_DISPLAY_BUSY PIN_EINK_BUSY +#define PIN_DISPLAY_SCLK PIN_EINK_SCLK +#define PIN_DISPLAY_MOSI PIN_EINK_MOSI // GPIO 33, shared with LoRa + +// Display dimensions - native resolution of GDEQ031T10 +#define LCD_HOR_SIZE 240 +#define LCD_VER_SIZE 320 + +// E-ink model for GxEPD2 +#define EINK_DISPLAY_MODEL GxEPD2_310_GDEQ031T10 + +// ----------------------------------------------------------------------------- +// SPI Bus - Shared by LoRa, SD Card, AND E-ink display +// ----------------------------------------------------------------------------- +#define BOARD_SPI_SCLK 36 +#define BOARD_SPI_MISO 47 +#define BOARD_SPI_MOSI 33 + +// ----------------------------------------------------------------------------- +// I2C Bus +// ----------------------------------------------------------------------------- +#define I2C_SDA 13 +#define I2C_SCL 14 + +// I2C Device Addresses +#define I2C_ADDR_TOUCH 0x1A // CST328/CST3530 +#define I2C_ADDR_GYROSCOPE 0x28 // BHI260AP +#define I2C_ADDR_KEYBOARD 0x34 // TCA8418 +#define I2C_ADDR_BQ27220 0x55 // Fuel gauge +#define I2C_ADDR_DRV2605 0x5A // Motor driver (V1.1 only) +#define I2C_ADDR_BQ25896 0x6B // Charger + +// ----------------------------------------------------------------------------- +// Touch Controller (CST328/CST3530) +// V1.1 uses CST3530 with different reset pin +// ----------------------------------------------------------------------------- +#define HAS_TOUCHSCREEN 1 +#define CST328_PIN_INT 12 +#define CST328_PIN_RST 38 // V1.1: GPIO 38 (was 45 on V1.0) + +// ----------------------------------------------------------------------------- +// GPS +// ----------------------------------------------------------------------------- +#define HAS_GPS 1 +#define GPS_BAUDRATE 38400 +#define PIN_GPS_EN 39 +#define GPS_EN_ACTIVE 1 +#define GPS_RX_PIN 44 +#define GPS_TX_PIN 43 +#define PIN_GPS_PPS 1 + +// ----------------------------------------------------------------------------- +// Buttons & Controls +// ----------------------------------------------------------------------------- +#define BUTTON_PIN 0 +#define PIN_USER_BTN 0 + +// Vibration Motor - V1.1 uses DRV2605 driver +#define HAS_DRV2605 1 +#define PIN_DRV_EN 2 + +// ----------------------------------------------------------------------------- +// SD Card +// ----------------------------------------------------------------------------- +#define HAS_SDCARD +#define SDCARD_USE_SPI1 +#define SPI_MOSI 33 +#define SPI_SCK 36 +#define SPI_MISO 47 +#define SPI_CS 48 +#define SDCARD_CS SPI_CS + +// ----------------------------------------------------------------------------- +// Keyboard (TCA8418) +// ----------------------------------------------------------------------------- +#define KB_BL_PIN 42 +#define BOARD_KEYBOARD_INT 15 +#define HAS_PHYSICAL_KEYBOARD 1 + +// ----------------------------------------------------------------------------- +// Audio - I2S Output (PCM5102A version) +// ----------------------------------------------------------------------------- +#define BOARD_I2S_BCLK 7 +#define BOARD_I2S_DOUT 8 +#define BOARD_I2S_LRC 9 + +// Microphone (PDM) +#define BOARD_MIC_DATA 17 +#define BOARD_MIC_CLOCK 18 + +// ----------------------------------------------------------------------------- +// Sensors +// ----------------------------------------------------------------------------- +// Note: V1.1 removed LTR553ALS light sensor to free up GPIO 16 for e-ink reset +#define HAS_BHI260AP // Gyroscope/IMU +#define BOARD_GYRO_INT 21 + +// ----------------------------------------------------------------------------- +// Power Management +// ----------------------------------------------------------------------------- +#define HAS_BQ27220 1 +#define BQ27220_I2C_ADDR 0x55 +#define BQ27220_I2C_SDA I2C_SDA +#define BQ27220_I2C_SCL I2C_SCL +#define BQ27220_DESIGN_CAPACITY 1400 + +#define HAS_PPM 1 +#define XPOWERS_CHIP_BQ25896 + +// ----------------------------------------------------------------------------- +// LoRa Radio (SX1262) +// ----------------------------------------------------------------------------- +#define USE_SX1262 +#define USE_SX1268 + +#define LORA_EN 46 // Enable pin - must be HIGH for radio to work +#define LORA_SCK 36 +#define LORA_MISO 47 +#define LORA_MOSI 33 // Shared with e-ink and SD card +#define LORA_CS 3 +#define LORA_RESET 4 +#define LORA_DIO0 -1 // Not connected on SX1262 +#define LORA_DIO1 5 // SX1262 IRQ +#define LORA_DIO2 6 // SX1262 BUSY + +// SX126X driver aliases (Meshtastic compatibility) +#define SX126X_CS LORA_CS +#define SX126X_DIO1 LORA_DIO1 +#define SX126X_BUSY LORA_DIO2 +#define SX126X_RESET LORA_RESET + +// RadioLib/MeshCore compatibility aliases +#define P_LORA_NSS LORA_CS +#define P_LORA_DIO_1 LORA_DIO1 +#define P_LORA_RESET LORA_RESET +#define P_LORA_BUSY LORA_DIO2 +#define P_LORA_SCLK LORA_SCK +#define P_LORA_MISO LORA_MISO +#define P_LORA_MOSI LORA_MOSI +#define P_LORA_EN LORA_EN + +// ----------------------------------------------------------------------------- +// 4G Modem - A7682E (A7682E version boards only) +// Note: I2S pins (7,8,9) conflict - don't use audio and modem simultaneously +// ----------------------------------------------------------------------------- +#define MODEM_POWER_EN 41 // BOARD_6609_EN +#define MODEM_PWRKEY 40 +#define MODEM_RST 9 +#define MODEM_RI 7 +#define MODEM_DTR 8 +#define MODEM_RX 10 +#define MODEM_TX 11 \ No newline at end of file diff --git a/variants/rak11310/RAK11310Board.cpp b/variants/rak11310/RAK11310Board.cpp deleted file mode 100644 index f45d8148..00000000 --- a/variants/rak11310/RAK11310Board.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "RAK11310Board.h" - -#include -#include - -void RAK11310Board::begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); -#endif - -#ifdef PIN_VBAT_READ - pinMode(PIN_VBAT_READ, INPUT); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setSDA(PIN_BOARD_SDA); - Wire.setSCL(PIN_BOARD_SCL); -#endif - - Wire.begin(); - - delay(10); // give sx1262 some time to power up -} - -bool RAK11310Board::startOTAUpdate(const char *id, char reply[]) { - return false; -} diff --git a/variants/rak11310/RAK11310Board.h b/variants/rak11310/RAK11310Board.h deleted file mode 100644 index ea0f15e2..00000000 --- a/variants/rak11310/RAK11310Board.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include -#include - -// from https://github.com/RAKWireless/RAK11300-AT-Command-Firmware/blob/9c48409a43620a828d653501d536473200aa33af/RAK11300-AT-Arduino/batt.cpp#L17-L19 -#define VBAT_MV_PER_LSB (0.806F) // 3.0V ADC range and 12 - bit ADC resolution = 3300mV / 4096 -#define VBAT_DIVIDER (0.6F) // 1.5M + 1M voltage divider on VBAT = (1.5M / (1M + 1.5M)) -#define VBAT_DIVIDER_COMP (1.846F) // // Compensation factor for the VBAT divider - -#define PIN_VBAT_READ 26 -#define BATTERY_SAMPLES 8 -#define ADC_MULTIPLIER (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB) - -class RAK11310Board : public mesh::MainBoard { -protected: - uint8_t startup_reason; - -public: - void begin(); - uint8_t getStartupReason() const override { return startup_reason; } - -#ifdef P_LORA_TX_LED - void onBeforeTransmit() override { digitalWrite(P_LORA_TX_LED, HIGH); } - void onAfterTransmit() override { digitalWrite(P_LORA_TX_LED, LOW); } -#endif - - uint16_t getBattMilliVolts() override { -#if defined(PIN_VBAT_READ) && defined(ADC_MULTIPLIER) - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw); -#else - return 0; -#endif - } - - const char *getManufacturerName() const override { return "RAK 11310"; } - - void reboot() override { rp2040.reboot(); } - - bool startOTAUpdate(const char *id, char reply[]) override; -}; diff --git a/variants/rak11310/platformio.ini b/variants/rak11310/platformio.ini deleted file mode 100644 index df99ea84..00000000 --- a/variants/rak11310/platformio.ini +++ /dev/null @@ -1,132 +0,0 @@ -; RAK11310 -; Pinout from https://github.com/beegee-tokyo/SX126x-Arduino/blob/6be1f87b84ad4d445a38ec53d65be4425f2383f3/src/boards/mcu/board.cpp#L259 - -[rak11310] -extends = rp2040_base -board = rakwireless_rak11300 -board_build.filesystem_size = 0.5m -build_flags = ${rp2040_base.build_flags} - -I variants/rak11310 - -D ARDUINO_RAKWIRELESS_RAK11300=1 - -D SX126X_CURRENT_LIMIT=140 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=29 - -D P_LORA_NSS=13 ; CS - -D P_LORA_RESET=14 - -D P_LORA_BUSY=15 - -D P_LORA_SCLK=10 - -D P_LORA_MISO=12 - -D P_LORA_MOSI=11 - -D P_LORA_TX_LED=24 ; green led = 23, blue led = 24 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 -; Debug options - ; -D DEBUG_RP2040_WIRE=1 - ; -D DEBUG_RP2040_SPI=1 - ; -D DEBUG_RP2040_CORE=1 - ; -D RADIOLIB_DEBUG_SPI=1 - ; -D DEBUG_RP2040_PORT=Serial -build_src_filter = ${rp2040_base.build_src_filter} - + - +<../variants/rak11310> -lib_deps = ${rp2040_base.lib_deps} - -[env:rak11310_repeater] -extends = rak11310 -build_flags = ${rak11310.build_flags} - -D ADVERT_NAME='"RAK11310 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak11310.build_src_filter} - +<../examples/simple_repeater> - -[env:rak11310_repeater_bridge_rs232] -extends = rak11310 -build_flags = ${rak11310.build_flags} - -D ADVERT_NAME='"RS232 Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_RS232_BRIDGE=Serial2 - -D WITH_RS232_BRIDGE_RX=9 - -D WITH_RS232_BRIDGE_TX=8 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak11310.build_src_filter} - + - +<../examples/simple_repeater> - -[env:rak11310_room_server] -extends = rak11310 -build_flags = ${rak11310.build_flags} - -D ADVERT_NAME='"RAK11310 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak11310.build_src_filter} - +<../examples/simple_room_server> - -[env:rak11310_companion_radio_usb] -extends = rak11310 -build_flags = ${rak11310.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${rak11310.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${rak11310.lib_deps} - densaugeo/base64 @ ~1.4.0 - -; [env:rak11310_companion_radio_ble] -; extends = rak11310 -; build_flags = ${rak11310.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D BLE_PIN_CODE=123456 -; -D BLE_DEBUG_LOGGING=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${rak11310.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${rak11310.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -; [env:rak11310_companion_radio_wifi] -; extends = rak11310 -; build_flags = ${rak11310.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D WIFI_DEBUG_LOGGING=1 -; -D WIFI_SSID='"myssid"' -; -D WIFI_PWD='"mypwd"' -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${rak11310.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${rak11310.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -[env:rak11310_terminal_chat] -extends = rak11310 -build_flags = ${rak11310.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak11310.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = ${rak11310.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/rak11310/target.cpp b/variants/rak11310/target.cpp deleted file mode 100644 index dba5bff2..00000000 --- a/variants/rak11310/target.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include "target.h" -#include - -RAK11310Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI1); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -bool radio_init() { - rtc_clock.begin(Wire); - - return radio.std_init(&SPI1); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/rak11310/target.h b/variants/rak11310/target.h deleted file mode 100644 index fe45c3f2..00000000 --- a/variants/rak11310/target.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -extern RAK11310Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/rak3112/RAK3112Board.h b/variants/rak3112/RAK3112Board.h deleted file mode 100644 index 8ba3197c..00000000 --- a/variants/rak3112/RAK3112Board.h +++ /dev/null @@ -1,96 +0,0 @@ -#pragma once - -#include -#include -#include - -// built-ins -#ifndef PIN_VBAT_READ - #define PIN_VBAT_READ 1 -#endif -#ifndef PIN_ADC_CTRL - #define PIN_ADC_CTRL 36 -#endif -#define PIN_ADC_CTRL_ACTIVE LOW -#define PIN_ADC_CTRL_INACTIVE HIGH -#define ADC_MULTIPLIER (3 * 1.73 * 1.187 * 1000) -#define BATTERY_SAMPLES 8 - -#include - -class RAK3112Board : public ESP32Board { -private: - bool adc_active_state; - -public: - RefCountedDigitalPin periph_power; - - RAK3112Board() : periph_power(PIN_VEXT_EN) { } - - void begin() { - ESP32Board::begin(); - - // Auto-detect correct ADC_CTRL pin polarity (different for boards >3.2) - pinMode(PIN_ADC_CTRL, INPUT); - adc_active_state = !digitalRead(PIN_ADC_CTRL); - - pinMode(PIN_ADC_CTRL, OUTPUT); - digitalWrite(PIN_ADC_CTRL, !adc_active_state); // Initially inactive - - periph_power.begin(); - - esp_reset_reason_t reason = esp_reset_reason(); - if (reason == ESP_RST_DEEPSLEEP) { - long wakeup_source = esp_sleep_get_ext1_wakeup_status(); - if (wakeup_source & (1 << P_LORA_DIO_1)) { // received a LoRa packet (while in deep sleep) - startup_reason = BD_STARTUP_RX_PACKET; - } - - rtc_gpio_hold_dis((gpio_num_t)P_LORA_NSS); - rtc_gpio_deinit((gpio_num_t)P_LORA_DIO_1); - } - } - - void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) { - esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); - - // Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep - rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY); - rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1); - - rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS); - - if (pin_wake_btn < 0) { - esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet - } else { - esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn - } - - if (secs > 0) { - esp_sleep_enable_timer_wakeup(secs * 1000000); - } - - // Finally set ESP32 into sleep - esp_deep_sleep_start(); // CPU halts here and never returns! - } - - void powerOff() override { - enterDeepSleep(0); - } - - uint16_t getBattMilliVolts() override { - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw) / 4096; - } - - const char* getManufacturerName() const override { - return "RAK 3112"; - } -}; diff --git a/variants/rak3112/platformio.ini b/variants/rak3112/platformio.ini deleted file mode 100644 index 29ebdff2..00000000 --- a/variants/rak3112/platformio.ini +++ /dev/null @@ -1,223 +0,0 @@ -[rak3112] -extends = esp32_base -board = esp32-s3-devkitc-1 -build_flags = - ${esp32_base.build_flags} - ${sensor_base.build_flags} - -I variants/rak3112 - -D RAK_3112=1 - -D ESP32_CPU_FREQ=80 - -D P_LORA_DIO_1=47 - -D P_LORA_NSS=7 - -D P_LORA_RESET=8 - -D P_LORA_BUSY=48 - -D P_LORA_SCLK=5 - -D P_LORA_MISO=3 - -D P_LORA_MOSI=6 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D P_LORA_TX_LED=46 - -D PIN_BOARD_SDA=9 - -D PIN_BOARD_SCL=40 - -D PIN_USER_BTN=-1 - -D PIN_VEXT_EN=14 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D PIN_GPS_RX=43 - -D PIN_GPS_TX=44 -; -D PIN_GPS_EN=26 -build_src_filter = ${esp32_base.build_src_filter} - +<../variants/rak3112> - + -lib_deps = - ${esp32_base.lib_deps} - ${sensor_base.lib_deps} - -[env:RAK3112_repeater] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RAK3112 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - +<../examples/simple_repeater> -lib_deps = - ${rak3112.lib_deps} - ${esp32_ota.lib_deps} - bakercp/CRC32 @ ^2.0.0 - -[env:RAK3112_repeater_bridge_rs232] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RS232 Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_RS232_BRIDGE=Serial2 - -D WITH_RS232_BRIDGE_RX=5 - -D WITH_RS232_BRIDGE_TX=6 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - + - +<../examples/simple_repeater> -lib_deps = - ${rak3112.lib_deps} - ${esp32_ota.lib_deps} - -[env:RAK3112_repeater_bridge_espnow] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_ESPNOW_BRIDGE=1 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - + - +<../examples/simple_repeater> -lib_deps = - ${rak3112.lib_deps} - ${esp32_ota.lib_deps} - -[env:RAK3112_room_server] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RAK3112 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - +<../examples/simple_room_server> -lib_deps = - ${rak3112.lib_deps} - ${esp32_ota.lib_deps} - -[env:RAK3112_terminal_chat] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = - ${rak3112.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK3112_companion_radio_usb] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak3112.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK3112_companion_radio_ble] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D BLE_PIN_CODE=123456 ; dynamic, random PIN - -D AUTO_SHUTDOWN_MILLIVOLTS=3400 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak3112.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK3112_companion_radio_wifi] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D WIFI_DEBUG_LOGGING=1 - -D WIFI_SSID='"myssid"' - -D WIFI_PWD='"mypwd"' - -D OFFLINE_QUEUE_SIZE=256 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak3112.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK3112_sensor] -extends = rak3112 -build_flags = - ${rak3112.build_flags} - -D ADVERT_NAME='"RAK3112 v3 Sensor"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ENV_PIN_SDA=33 - -D ENV_PIN_SCL=34 - -D DISPLAY_CLASS=SSD1306Display -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak3112.build_src_filter} - + - +<../examples/simple_sensor> -lib_deps = - ${rak3112.lib_deps} - ${esp32_ota.lib_deps} diff --git a/variants/rak3112/target.cpp b/variants/rak3112/target.cpp deleted file mode 100644 index 634573b8..00000000 --- a/variants/rak3112/target.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include "target.h" - -RAK3112Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#if ENV_INCLUDE_GPS - #include - MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); - EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else - EnvironmentSensorManager sensors; -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - -#if defined(P_LORA_SCLK) - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/rak3112/target.h b/variants/rak3112/target.h deleted file mode 100644 index eae90900..00000000 --- a/variants/rak3112/target.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include - #include -#endif - -extern RAK3112Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/rak3401/RAK3401Board.cpp b/variants/rak3401/RAK3401Board.cpp deleted file mode 100644 index b9431c92..00000000 --- a/variants/rak3401/RAK3401Board.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -#include "RAK3401Board.h" - -void RAK3401Board::begin() { - NRF52BoardDCDC::begin(); - pinMode(PIN_VBAT_READ, INPUT); -#ifdef PIN_USER_BTN - pinMode(PIN_USER_BTN, INPUT_PULLUP); -#endif - -#ifdef PIN_USER_BTN_ANA - pinMode(PIN_USER_BTN_ANA, INPUT_PULLUP); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); -#endif - - Wire.begin(); - - pinMode(PIN_3V3_EN, OUTPUT); - digitalWrite(PIN_3V3_EN, HIGH); - -#ifdef P_LORA_PA_EN - // Initialize RAK13302 1W LoRa transceiver module PA control pin - pinMode(P_LORA_PA_EN, OUTPUT); - digitalWrite(P_LORA_PA_EN, LOW); // Start with PA disabled - delay(10); // Allow PA module to initialize -#endif -} \ No newline at end of file diff --git a/variants/rak3401/RAK3401Board.h b/variants/rak3401/RAK3401Board.h deleted file mode 100644 index 609393c3..00000000 --- a/variants/rak3401/RAK3401Board.h +++ /dev/null @@ -1,70 +0,0 @@ -#pragma once - -#include -#include -#include - -// LoRa radio module pins for RAK13302 -#define P_LORA_SCLK 3 -#define P_LORA_MISO 29 -#define P_LORA_MOSI 30 -#define P_LORA_NSS 26 -#define P_LORA_DIO_1 10 -#define P_LORA_BUSY 9 -#define P_LORA_RESET 4 -#ifndef P_LORA_PA_EN - #define P_LORA_PA_EN 31 -#endif - -//#define PIN_GPS_SDA 13 //GPS SDA pin (output option) -//#define PIN_GPS_SCL 14 //GPS SCL pin (output option) -// #define PIN_GPS_TX 16 //GPS TX pin -// #define PIN_GPS_RX 15 //GPS RX pin -#define PIN_GPS_1PPS 17 //GPS PPS pin -#define GPS_BAUD_RATE 9600 -#define GPS_ADDRESS 0x42 //i2c address for GPS - -#define SX126X_DIO2_AS_RF_SWITCH -#define SX126X_DIO3_TCXO_VOLTAGE 1.8 - - -// built-ins -#define PIN_VBAT_READ 5 -#define ADC_MULTIPLIER (3 * 1.73 * 1.187 * 1000) - -#define PIN_3V3_EN (34) -#define WB_IO2 PIN_3V3_EN - -class RAK3401Board : public NRF52BoardDCDC, public NRF52BoardOTA { -public: - RAK3401Board() : NRF52BoardOTA("RAK3401_OTA") {} - void begin(); - - #define BATTERY_SAMPLES 8 - - uint16_t getBattMilliVolts() override { - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw) / 4096; - } - - const char* getManufacturerName() const override { - return "RAK 3401"; - } - -#ifdef P_LORA_PA_EN - void onBeforeTransmit() override { - digitalWrite(P_LORA_PA_EN, HIGH); // Enable PA before transmission - } - - void onAfterTransmit() override { - digitalWrite(P_LORA_PA_EN, LOW); // Disable PA after transmission to save power - } -#endif -}; diff --git a/variants/rak3401/platformio.ini b/variants/rak3401/platformio.ini deleted file mode 100644 index 30d35d0b..00000000 --- a/variants/rak3401/platformio.ini +++ /dev/null @@ -1,127 +0,0 @@ -[rak3401] -extends = nrf52_base -board = rak3401 -board_check = true -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I variants/rak3401 - -D RAK_3401 - -D RAK13302 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 -build_src_filter = ${nrf52_base.build_src_filter} - +<../variants/rak3401> - + - + - + -lib_deps = - ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - adafruit/Adafruit SSD1306 @ ^2.5.13 - sparkfun/SparkFun u-blox GNSS Arduino Library@^2.2.27 - -[env:RAK_3401_repeater] -extends = rak3401 -build_flags = - ${rak3401.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RAK3401 1W Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - ;-D MESH_PACKET_LOGGING=1 - ;-D MESH_DEBUG=1 -build_src_filter = ${rak3401.build_src_filter} - + - +<../examples/simple_repeater> - -[env:RAK_3401_room_server] -extends = rak3401 -build_flags = - ${rak3401.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"Test Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' - ;-D MESH_PACKET_LOGGING=1 - ;-D MESH_DEBUG=1 -build_src_filter = ${rak3401.build_src_filter} - + - +<../examples/simple_room_server> - -[env:RAK_3401_companion_radio_usb] -extends = rak3401 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${rak3401.build_flags} - -I examples/companion_radio/ui-new - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${rak3401.build_src_filter} - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak3401.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK_3401_companion_radio_ble] -extends = rak3401 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${rak3401.build_flags} - -I examples/companion_radio/ui-new - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - ;-D MESH_PACKET_LOGGING=1 - ;-D MESH_DEBUG=1 -build_src_filter = ${rak3401.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak3401.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK_3401_terminal_chat] -extends = rak3401 -build_flags = - ${rak3401.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 - ;-D MESH_PACKET_LOGGING=1 - ;-D MESH_DEBUG=1 -build_src_filter = ${rak3401.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = - ${rak3401.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK_3401_sensor] -extends = rak3401 -build_flags = - ${rak3401.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RAK3401 Sensor"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - ;-D MESH_PACKET_LOGGING=1 - ;-D MESH_DEBUG=1 -build_src_filter = ${rak3401.build_src_filter} - + - +<../examples/simple_sensor> \ No newline at end of file diff --git a/variants/rak3401/target.cpp b/variants/rak3401/target.cpp deleted file mode 100644 index 52f3a3d5..00000000 --- a/variants/rak3401/target.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include "target.h" -#include - -RAK3401Board board; - -#ifndef PIN_USER_BTN - #define PIN_USER_BTN (-1) -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true); - - #if defined(PIN_USER_BTN_ANA) - MomentaryButton analog_btn(PIN_USER_BTN_ANA, 1000, 20); - #endif -#endif - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#if ENV_INCLUDE_GPS - #include - MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); - EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else - EnvironmentSensorManager sensors; -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/rak3401/target.h b/variants/rak3401/target.h deleted file mode 100644 index 32f17cd1..00000000 --- a/variants/rak3401/target.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -#ifdef DISPLAY_CLASS - #include - extern DISPLAY_CLASS display; - #include - extern MomentaryButton user_btn; - #if defined(PIN_USER_BTN_ANA) - extern MomentaryButton analog_btn; - #endif -#endif - -extern RAK3401Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/rak3401/variant.cpp b/variants/rak3401/variant.cpp deleted file mode 100644 index d562189f..00000000 --- a/variants/rak3401/variant.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - Copyright (c) 2016 Sandeep Mistry All right reserved. - Copyright (c) 2018, Adafruit Industries (adafruit.com) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" -#include "nrf.h" - -const uint32_t g_ADigitalPinMap[] = -{ - // P0 - 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , - 8 , 9 , 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - - // P1 - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47 -}; - - -void initVariant() -{ - // LED1 & LED2 - pinMode(PIN_LED1, OUTPUT); - ledOff(PIN_LED1); - - pinMode(PIN_LED2, OUTPUT); - ledOff(PIN_LED2); - - // 3V3 Power Rail - pinMode(PIN_3V3_EN, OUTPUT); - digitalWrite(PIN_3V3_EN, HIGH); -} diff --git a/variants/rak3401/variant.h b/variants/rak3401/variant.h deleted file mode 100644 index 9c182247..00000000 --- a/variants/rak3401/variant.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - Copyright (c) 2016 Sandeep Mistry All right reserved. - Copyright (c) 2018, Adafruit Industries (adafruit.com) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _VARIANT_RAK3401_ -#define _VARIANT_RAK3401_ - -#define RAK4630 - -/** Master clock frequency */ -#define VARIANT_MCK (64000000ul) - -#define USE_LFXO // Board uses 32khz crystal for LF -// define USE_LFRC // Board uses RC for LF - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -// Number of pins defined in PinDescription array -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (6) -#define NUM_ANALOG_OUTPUTS (0) - -// LEDs -#define PIN_LED1 (35) -#define PIN_LED2 (36) - -#define LED_BUILTIN PIN_LED1 -#define LED_CONN PIN_LED2 - -#define LED_GREEN PIN_LED1 -#define LED_BLUE PIN_LED2 - -#define LED_STATE_ON 1 // State when LED is litted - -/* - * Analog pins - */ -#define PIN_A0 (5) //(3) -#define PIN_A1 (31) //(4) -#define PIN_A2 (28) -#define PIN_A3 (29) -#define PIN_A4 (30) -#define PIN_A5 (31) -#define PIN_A6 (0xff) -#define PIN_A7 (0xff) - - static const uint8_t A0 = PIN_A0; - static const uint8_t A1 = PIN_A1; - static const uint8_t A2 = PIN_A2; - static const uint8_t A3 = PIN_A3; - static const uint8_t A4 = PIN_A4; - static const uint8_t A5 = PIN_A5; - static const uint8_t A6 = PIN_A6; - static const uint8_t A7 = PIN_A7; -#define ADC_RESOLUTION 14 - -// Other pins -#define WB_I2C1_SDA (13) // SENSOR_SLOT IO_SLOT -#define WB_I2C1_SCL (14) // SENSOR_SLOT IO_SLOT - -#define PIN_AREF (2) -#define PIN_NFC1 (9) -#define WB_IO5 PIN_NFC1 -#define WB_IO4 (4) -#define PIN_NFC2 (10) - -static const uint8_t AREF = PIN_AREF; - -/* - * Serial interfaces - */ -// TXD1 RXD1 on Base Board -#define PIN_SERIAL1_RX (15) -#define PIN_SERIAL1_TX (16) - -// Connected to Jlink CDC -#define PIN_SERIAL2_RX (8) -#define PIN_SERIAL2_TX (6) - -/* - * SPI Interfaces - */ -#define SPI_INTERFACES_COUNT 2 - -#define PIN_SPI_MISO (45) -#define PIN_SPI_MOSI (44) -#define PIN_SPI_SCK (43) - -#define PIN_SPI1_MISO (29) -#define PIN_SPI1_MOSI (30) -#define PIN_SPI1_SCK (3) - - static const uint8_t SS = 42; - static const uint8_t MOSI = PIN_SPI_MOSI; - static const uint8_t MISO = PIN_SPI_MISO; - static const uint8_t SCK = PIN_SPI_SCK; - -/* - * Wire Interfaces - */ -#define WIRE_INTERFACES_COUNT 1 - -#define PIN_WIRE_SDA (WB_I2C1_SDA) -#define PIN_WIRE_SCL (WB_I2C1_SCL) - -// QSPI Pins -// QSPI occupied by GPIO's -#define PIN_QSPI_SCK 3 -#define PIN_QSPI_CS 26 -#define PIN_QSPI_IO0 30 -#define PIN_QSPI_IO1 29 -#define PIN_QSPI_IO2 28 -#define PIN_QSPI_IO3 2 - -// On-board QSPI Flash -// No onboard flash -#define EXTERNAL_FLASH_DEVICES IS25LP080D -#define EXTERNAL_FLASH_USE_QSPI - -#define P_LORA_SCK PIN_SPI1_SCK -#define P_LORA_MISO PIN_SPI1_MISO -#define P_LORA_MOSI PIN_SPI1_MOSI -#define P_LORA_CS 26 - -#define USE_SX1262 -#define SX126X_CS (26) -#define SX126X_DIO1 (10) -#define SX126X_BUSY (9) -#define SX126X_RESET (4) - -#define SX126X_POWER_EN (21) -// DIO2 controlls an antenna switch and the TCXO voltage is controlled by DIO3 -#define SX126X_DIO2_AS_RF_SWITCH -#define SX126X_DIO3_TCXO_VOLTAGE 1.8 - -// enables 3.3V periphery like GPS or IO Module -// Do not toggle this for GPS power savings -#define PIN_3V3_EN (34) -#define WB_IO2 PIN_3V3_EN - -// RAK1910 GPS module -// If using the wisblock GPS module and pluged into Port A on WisBlock base -// IO1 is hooked to PPS (pin 12 on header) = gpio 17 -// IO2 is hooked to GPS RESET = gpio 34, but it can not be used to this because IO2 is ALSO used to control 3V3_S power (1 is on). -// Therefore must be 1 to keep peripherals powered -// Power is on the controllable 3V3_S rail -#define PIN_GPS_PPS (17) // Pulse per second input from the GPS - -#define PIN_GPS_RX PIN_SERIAL1_RX -#define PIN_GPS_TX PIN_SERIAL1_TX - -// Battery -// The battery sense is hooked to pin A0 (5) -#define BATTERY_PIN PIN_A0 -// and has 12 bit resolution -#define BATTERY_SENSE_RESOLUTION_BITS 12 -#define BATTERY_SENSE_RESOLUTION 4096.0 -#undef AREF_VOLTAGE -#define AREF_VOLTAGE 3.0 -#define VBAT_AR_INTERNAL AR_INTERNAL_3_0 -#define ADC_MULTIPLIER 1.73 - -#define HAS_RTC 1 - -#define RAK_4631 1 - -#ifdef __cplusplus -} -#endif - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#endif diff --git a/variants/rak3x72/platformio.ini b/variants/rak3x72/platformio.ini deleted file mode 100644 index a6260089..00000000 --- a/variants/rak3x72/platformio.ini +++ /dev/null @@ -1,42 +0,0 @@ -[rak3x72] -extends = stm32_base -board = rak3172 -board_upload.maximum_size = 229376 ; 32kb for FS -build_flags = ${stm32_base.build_flags} - -D RADIO_CLASS=CustomSTM32WLx - -D WRAPPER_CLASS=CustomSTM32WLxWrapper - -D SPI_INTERFACES_COUNT=0 - -D RX_BOOSTED_GAIN=true -; -D STM32WL_TCXO_VOLTAGE=1.6 ; defaults to 0 if undef -; -D LORA_TX_POWER=14 ; Defaults to 22 for HP, 14 is for LP version - -I variants/rak3x72 -build_src_filter = ${stm32_base.build_src_filter} - +<../variants/rak3x72> - -[env:rak3x72_repeater] -extends = rak3x72 -build_flags = ${rak3x72.build_flags} - -D ADVERT_NAME='"RAK3x72 Repeater"' - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -build_src_filter = ${rak3x72.build_src_filter} - +<../examples/simple_repeater/*.cpp> - -[env:rak3x72_sensor] -extends = rak3x72 -build_flags = ${rak3x72.build_flags} - -D ADVERT_NAME='"RAK3x72 Sensor"' - -D ADMIN_PASSWORD='"password"' -build_src_filter = ${rak3x72.build_src_filter} - +<../examples/simple_sensor> - -[env:rak3x72_companion_radio_usb] -extends = rak3x72 -build_flags = ${rak3x72.build_flags} -; -D FORMAT_FS=true - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 -build_src_filter = ${rak3x72.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${rak3x72.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/rak3x72/target.cpp b/variants/rak3x72/target.cpp deleted file mode 100644 index 446783aa..00000000 --- a/variants/rak3x72/target.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include "target.h" -#include - -RAK3x72Board board; - -RADIO_CLASS radio = new STM32WLx_Module(); - -WRAPPER_CLASS radio_driver(radio, board); - -static const uint32_t rfswitch_pins[] = {LORAWAN_RFSWITCH_PINS, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC}; -static const Module::RfSwitchMode_t rfswitch_table[] = { - {STM32WLx::MODE_IDLE, {LOW, LOW}}, - {STM32WLx::MODE_RX, {HIGH, LOW}}, - {STM32WLx::MODE_TX_LP, {LOW, HIGH}}, - {STM32WLx::MODE_TX_HP, {LOW, HIGH}}, - END_OF_MODE_TABLE, -}; - -VolatileRTCClock rtc_clock; -SensorManager sensors; - -#ifndef LORA_CR - #define LORA_CR 5 -#endif - -#ifndef STM32WL_TCXO_VOLTAGE - // TCXO set to 0 for RAK3172 - #define STM32WL_TCXO_VOLTAGE 0 -#endif - -#ifndef LORA_TX_POWER - #define LORA_TX_POWER 22 -#endif - -bool radio_init() { -// rtc_clock.begin(Wire); - - radio.setRfSwitchTable(rfswitch_pins, rfswitch_table); - - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, STM32WL_TCXO_VOLTAGE, 0); - - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - - #ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); - #endif - - radio.setCRC(1); - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/rak3x72/target.h b/variants/rak3x72/target.h deleted file mode 100644 index e0c1441e..00000000 --- a/variants/rak3x72/target.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -#define PIN_VBAT_READ A0 -#define ADC_MULTIPLIER (5 * 1.73 * 1000) - -class RAK3x72Board : public STM32Board { -public: - void begin() override { - STM32Board::begin(); - pinMode(PA0, OUTPUT); - pinMode(PA1, OUTPUT); - } - - const char* getManufacturerName() const override { - return "RAK 3x72"; - } - - uint16_t getBattMilliVolts() override { - analogReadResolution(12); - uint32_t raw = 0; - for (int i=0; i<8;i++) { - raw += analogRead(PIN_VBAT_READ); - } - return ((double)raw) * ADC_MULTIPLIER / 8 / 4096; - } - - void setGpio(uint32_t values) override { - // set led values - digitalWrite(PA0, values & 1); - digitalWrite(PA1, (values & 2) >> 1); - } - - uint32_t getGpio() override { - // get led value - return (digitalRead(PA1) << 1) | digitalRead(PA0); - } -}; - -extern RAK3x72Board board; -extern WRAPPER_CLASS radio_driver; -extern VolatileRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/rak3x72/variant.h b/variants/rak3x72/variant.h deleted file mode 100644 index 4405be0b..00000000 --- a/variants/rak3x72/variant.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include - -#undef RNG diff --git a/variants/rak4631/RAK4631Board.cpp b/variants/rak4631/RAK4631Board.cpp deleted file mode 100644 index 9fb47b43..00000000 --- a/variants/rak4631/RAK4631Board.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include - -#include "RAK4631Board.h" - -#ifdef NRF52_POWER_MANAGEMENT -// Static configuration for power management -// Values set in variant.h defines -const PowerMgtConfig power_config = { - .lpcomp_ain_channel = PWRMGT_LPCOMP_AIN, - .lpcomp_refsel = PWRMGT_LPCOMP_REFSEL, - .voltage_bootlock = PWRMGT_VOLTAGE_BOOTLOCK -}; - -void RAK4631Board::initiateShutdown(uint8_t reason) { - // Disable LoRa module power before shutdown - digitalWrite(SX126X_POWER_EN, LOW); - - if (reason == SHUTDOWN_REASON_LOW_VOLTAGE || - reason == SHUTDOWN_REASON_BOOT_PROTECT) { - configureVoltageWake(power_config.lpcomp_ain_channel, power_config.lpcomp_refsel); - } - - enterSystemOff(reason); -} -#endif // NRF52_POWER_MANAGEMENT - -void RAK4631Board::begin() { - NRF52BoardDCDC::begin(); - pinMode(PIN_VBAT_READ, INPUT); -#ifdef PIN_USER_BTN - pinMode(PIN_USER_BTN, INPUT_PULLUP); -#endif - -#ifdef PIN_USER_BTN_ANA - pinMode(PIN_USER_BTN_ANA, INPUT_PULLUP); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); -#endif - - Wire.begin(); - - pinMode(SX126X_POWER_EN, OUTPUT); -#ifdef NRF52_POWER_MANAGEMENT - // Boot voltage protection check (may not return if voltage too low) - // We need to call this after we configure SX126X_POWER_EN as output but before we pull high - checkBootVoltage(&power_config); -#endif - digitalWrite(SX126X_POWER_EN, HIGH); - delay(10); // give sx1262 some time to power up -} \ No newline at end of file diff --git a/variants/rak4631/RAK4631Board.h b/variants/rak4631/RAK4631Board.h deleted file mode 100644 index 53a2a797..00000000 --- a/variants/rak4631/RAK4631Board.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - -#include -#include -#include - -// LoRa radio module pins for RAK4631 -#define P_LORA_DIO_1 47 -#define P_LORA_NSS 42 -#define P_LORA_RESET RADIOLIB_NC // 38 -#define P_LORA_BUSY 46 -#define P_LORA_SCLK 43 -#define P_LORA_MISO 45 -#define P_LORA_MOSI 44 -#define SX126X_POWER_EN 37 - -//#define PIN_GPS_SDA 13 //GPS SDA pin (output option) -//#define PIN_GPS_SCL 14 //GPS SCL pin (output option) -//#define PIN_GPS_TX 16 //GPS TX pin -//#define PIN_GPS_RX 15 //GPS RX pin -#define PIN_GPS_1PPS 17 //GPS PPS pin -#define GPS_BAUD_RATE 9600 -#define GPS_ADDRESS 0x42 //i2c address for GPS - -#define SX126X_DIO2_AS_RF_SWITCH true -#define SX126X_DIO3_TCXO_VOLTAGE 1.8 - -// built-ins -#define PIN_VBAT_READ 5 -#define ADC_MULTIPLIER (3 * 1.73 * 1.187 * 1000) - -class RAK4631Board : public NRF52BoardDCDC, public NRF52BoardOTA { -protected: -#ifdef NRF52_POWER_MANAGEMENT - void initiateShutdown(uint8_t reason) override; -#endif - -public: - RAK4631Board() : NRF52BoardOTA("RAK4631_OTA") {} - void begin(); - - #define BATTERY_SAMPLES 8 - - uint16_t getBattMilliVolts() override { - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw) / 4096; - } - - const char* getManufacturerName() const override { - return "RAK 4631"; - } -}; diff --git a/variants/rak4631/platformio.ini b/variants/rak4631/platformio.ini deleted file mode 100644 index 9a9ab2dd..00000000 --- a/variants/rak4631/platformio.ini +++ /dev/null @@ -1,186 +0,0 @@ -[rak4631] -extends = nrf52_base -board = rak4631 -board_check = true -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I variants/rak4631 - -D RAK_4631 - -D RAK_BOARD - -D NRF52_POWER_MANAGEMENT - -D PIN_BOARD_SCL=14 - -D PIN_BOARD_SDA=13 - -D PIN_GPS_TX=PIN_SERIAL1_RX - -D PIN_GPS_RX=PIN_SERIAL1_TX - -D PIN_GPS_EN=-1 - -D PIN_OLED_RESET=-1 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 -build_src_filter = ${nrf52_base.build_src_filter} - +<../variants/rak4631> - + - + - + -lib_deps = - ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - adafruit/Adafruit SSD1306 @ ^2.5.13 - sparkfun/SparkFun u-blox GNSS Arduino Library@^2.2.27 - -[env:RAK_4631_repeater] -extends = rak4631 -build_flags = - ${rak4631.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RAK4631 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak4631.build_src_filter} - + - +<../examples/simple_repeater> - -[env:RAK_4631_repeater_bridge_rs232_serial1] -extends = rak4631 -build_flags = - ${rak4631.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RS232 Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_RS232_BRIDGE=Serial1 - -D WITH_RS232_BRIDGE_RX=PIN_SERIAL1_RX - -D WITH_RS232_BRIDGE_TX=PIN_SERIAL1_TX - -UENV_INCLUDE_GPS -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -; -D CORE_DEBUG_LEVEL=3 -build_src_filter = ${rak4631.build_src_filter} - + - + - +<../examples/simple_repeater> - -[env:RAK_4631_repeater_bridge_rs232_serial2] -extends = rak4631 -build_flags = - ${rak4631.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RS232 Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_RS232_BRIDGE=Serial2 - -D WITH_RS232_BRIDGE_RX=PIN_SERIAL2_RX - -D WITH_RS232_BRIDGE_TX=PIN_SERIAL2_TX - -UENV_INCLUDE_GPS -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -; -D CORE_DEBUG_LEVEL=3 -build_src_filter = ${rak4631.build_src_filter} - + - + - +<../examples/simple_repeater> - -[env:RAK_4631_room_server] -extends = rak4631 -build_flags = - ${rak4631.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"Test Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak4631.build_src_filter} - + - +<../examples/simple_room_server> - -[env:RAK_4631_companion_radio_usb] -extends = rak4631 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${rak4631.build_flags} - -I examples/companion_radio/ui-new - -D PIN_USER_BTN=9 - -D PIN_USER_BTN_ANA=31 - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${rak4631.build_src_filter} - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak4631.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK_4631_companion_radio_ble] -extends = rak4631 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${rak4631.build_flags} - -I examples/companion_radio/ui-new - -D PIN_USER_BTN=9 - -D PIN_USER_BTN_ANA=31 - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak4631.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${rak4631.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK_4631_terminal_chat] -extends = rak4631 -build_flags = - ${rak4631.build_flags} - -D PIN_USER_BTN=9 - -D PIN_USER_BTN_ANA=31 - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rak4631.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = - ${rak4631.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:RAK_4631_sensor] -extends = rak4631 -build_flags = - ${rak4631.build_flags} - -D DISPLAY_CLASS=SSD1306Display - -D ADVERT_NAME='"RAK4631 Sensor"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' -; -D MESH_PACKET_LOGGING=1 - -D MESH_DEBUG=1 -build_src_filter = ${rak4631.build_src_filter} - + - +<../examples/simple_sensor> \ No newline at end of file diff --git a/variants/rak4631/target.cpp b/variants/rak4631/target.cpp deleted file mode 100644 index bc7465fd..00000000 --- a/variants/rak4631/target.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include "target.h" -#include - -RAK4631Board board; - -#ifndef PIN_USER_BTN - #define PIN_USER_BTN (-1) -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true); - - #if defined(PIN_USER_BTN_ANA) - MomentaryButton analog_btn(PIN_USER_BTN_ANA, 1000, 20); - #endif -#endif - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#if ENV_INCLUDE_GPS - #include - MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); - EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else - EnvironmentSensorManager sensors; -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/rak4631/target.h b/variants/rak4631/target.h deleted file mode 100644 index aa6be664..00000000 --- a/variants/rak4631/target.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -#ifdef DISPLAY_CLASS - #include - extern DISPLAY_CLASS display; - #include - extern MomentaryButton user_btn; - #if defined(PIN_USER_BTN_ANA) - extern MomentaryButton analog_btn; - #endif -#endif - -extern RAK4631Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/rak4631/variant.cpp b/variants/rak4631/variant.cpp deleted file mode 100644 index bd85e971..00000000 --- a/variants/rak4631/variant.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - Copyright (c) 2016 Sandeep Mistry All right reserved. - Copyright (c) 2018, Adafruit Industries (adafruit.com) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" -#include "nrf.h" - -const uint32_t g_ADigitalPinMap[] = -{ - // P0 - 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , - 8 , 9 , 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - - // P1 - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47 -}; - - -void initVariant() -{ - // LED1 & LED2 - pinMode(PIN_LED1, OUTPUT); - ledOff(PIN_LED1); - - pinMode(PIN_LED2, OUTPUT); - ledOff(PIN_LED2);; -} - diff --git a/variants/rak4631/variant.h b/variants/rak4631/variant.h deleted file mode 100644 index b18335f8..00000000 --- a/variants/rak4631/variant.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - Copyright (c) 2016 Sandeep Mistry All right reserved. - Copyright (c) 2018, Adafruit Industries (adafruit.com) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _VARIANT_RAK4630_ -#define _VARIANT_RAK4630_ - -#define RAK4630 - -/** Master clock frequency */ -#define VARIANT_MCK (64000000ul) - -#define USE_LFXO // Board uses 32khz crystal for LF -// define USE_LFRC // Board uses RC for LF - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - - /* - * WisBlock Base GPIO definitions - */ - static const uint8_t WB_IO1 = 17; // SLOT_A SLOT_B - static const uint8_t WB_IO2 = 34; // SLOT_A SLOT_B - static const uint8_t WB_IO3 = 21; // SLOT_C - static const uint8_t WB_IO4 = 4; // SLOT_C - static const uint8_t WB_IO5 = 9; // SLOT_D - static const uint8_t WB_IO6 = 10; // SLOT_D - static const uint8_t WB_SW1 = 33; // IO_SLOT - static const uint8_t WB_A0 = 5; // IO_SLOT - static const uint8_t WB_A1 = 31; // IO_SLOT - static const uint8_t WB_I2C1_SDA = 13; // SENSOR_SLOT IO_SLOT - static const uint8_t WB_I2C1_SCL = 14; // SENSOR_SLOT IO_SLOT - static const uint8_t WB_I2C2_SDA = 24; // IO_SLOT - static const uint8_t WB_I2C2_SCL = 25; // IO_SLOT - static const uint8_t WB_SPI_CS = 26; // IO_SLOT - static const uint8_t WB_SPI_CLK = 3; // IO_SLOT - static const uint8_t WB_SPI_MISO = 29; // IO_SLOT - static const uint8_t WB_SPI_MOSI = 30; // IO_SLOT - -// Number of pins defined in PinDescription array -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (6) -#define NUM_ANALOG_OUTPUTS (0) - -// LEDs -#define PIN_LED1 (35) -#define PIN_LED2 (36) - -#define LED_BUILTIN PIN_LED1 -#define LED_CONN PIN_LED2 - -#define LED_GREEN PIN_LED1 -#define LED_BLUE PIN_LED2 - -#define LED_STATE_ON 1 // State when LED is litted - -/* - * Buttons - */ -// RAK4631 has no buttons - -/* - * Analog pins - */ -#define PIN_A0 (5) //(3) -#define PIN_A1 (31) //(4) -#define PIN_A2 (28) -#define PIN_A3 (29) -#define PIN_A4 (30) -#define PIN_A5 (31) -#define PIN_A6 (0xff) -#define PIN_A7 (0xff) - - static const uint8_t A0 = PIN_A0; - static const uint8_t A1 = PIN_A1; - static const uint8_t A2 = PIN_A2; - static const uint8_t A3 = PIN_A3; - static const uint8_t A4 = PIN_A4; - static const uint8_t A5 = PIN_A5; - static const uint8_t A6 = PIN_A6; - static const uint8_t A7 = PIN_A7; -#define ADC_RESOLUTION 14 - -// Power management boot protection threshold (millivolts) -// Set to 0 to disable boot protection -#define PWRMGT_VOLTAGE_BOOTLOCK 3300 // Won't boot below this voltage (mV) -// LPCOMP wake configuration (voltage recovery from SYSTEMOFF) -// AIN3 = P0.05 = PIN_A0 / PIN_VBAT_READ -#define PWRMGT_LPCOMP_AIN 3 -#define PWRMGT_LPCOMP_REFSEL 4 // 5/8 VDD (~3.13-3.44V) - -// Other pins -#define PIN_AREF (2) -#define PIN_NFC1 (9) -#define PIN_NFC2 (10) - - static const uint8_t AREF = PIN_AREF; - -/* - * Serial interfaces - */ -// TXD1 RXD1 on Base Board -#define PIN_SERIAL1_RX (15) -#define PIN_SERIAL1_TX (16) - -// TXD0 RXD0 on Base Board -#define PIN_SERIAL2_RX (19) -#define PIN_SERIAL2_TX (20) - -/* - * SPI Interfaces - */ -#define SPI_INTERFACES_COUNT 1 - -#define PIN_SPI_MISO (29) -#define PIN_SPI_MOSI (30) -#define PIN_SPI_SCK (3) - - static const uint8_t SS = 26; - static const uint8_t MOSI = PIN_SPI_MOSI; - static const uint8_t MISO = PIN_SPI_MISO; - static const uint8_t SCK = PIN_SPI_SCK; - -/* - * Wire Interfaces - */ -#define WIRE_INTERFACES_COUNT 2 - -#define PIN_WIRE_SDA (13) -#define PIN_WIRE_SCL (14) - -#define PIN_WIRE1_SDA (24) -#define PIN_WIRE1_SCL (25) - - // QSPI Pins - // QSPI occupied by GPIO's - #define PIN_QSPI_SCK 3 // 19 - #define PIN_QSPI_CS 26 // 17 - #define PIN_QSPI_IO0 30 // 20 - #define PIN_QSPI_IO1 29 // 21 - #define PIN_QSPI_IO2 28 // 22 - #define PIN_QSPI_IO3 2 // 23 - - // On-board QSPI Flash - // No onboard flash - #define EXTERNAL_FLASH_DEVICES IS25LP080D - #define EXTERNAL_FLASH_USE_QSPI - -#ifdef __cplusplus -} -#endif - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#endif diff --git a/variants/rpi_picow/PicoWBoard.cpp b/variants/rpi_picow/PicoWBoard.cpp deleted file mode 100644 index f345f96d..00000000 --- a/variants/rpi_picow/PicoWBoard.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include "PicoWBoard.h" - -//#include -#include - -//static BLEDfu bledfu; - -static void connect_callback(uint16_t conn_handle) { - (void)conn_handle; - MESH_DEBUG_PRINTLN("BLE client connected"); -} - -static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { - (void)conn_handle; - (void)reason; - - MESH_DEBUG_PRINTLN("BLE client disconnected"); -} - -void PicoWBoard::begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - pinMode(PIN_VBAT_READ, INPUT); -#ifdef PIN_USER_BTN - pinMode(PIN_USER_BTN, INPUT_PULLUP); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); -#endif - - Wire.begin(); - - //pinMode(SX126X_POWER_EN, OUTPUT); - //digitalWrite(SX126X_POWER_EN, HIGH); - delay(10); // give sx1262 some time to power up -} - -bool PicoWBoard::startOTAUpdate(const char* id, char reply[]) { - return false; -} diff --git a/variants/rpi_picow/PicoWBoard.h b/variants/rpi_picow/PicoWBoard.h deleted file mode 100644 index 708e9655..00000000 --- a/variants/rpi_picow/PicoWBoard.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include -#include - -// built-ins -#define PIN_VBAT_READ 26 -#define ADC_MULTIPLIER (3.1 * 3.3 * 1000) // MT Uses 3.1 -#define PIN_LED_BUILTIN LED_BUILTIN - -class PicoWBoard : public mesh::MainBoard { -protected: - uint8_t startup_reason; - -public: - void begin(); - uint8_t getStartupReason() const override { return startup_reason; } - - void onBeforeTransmit() override { - digitalWrite(LED_BUILTIN, HIGH); // turn TX LED on - } - - void onAfterTransmit() override { - digitalWrite(LED_BUILTIN, LOW); // turn TX LED off - } - - #define BATTERY_SAMPLES 8 - - uint16_t getBattMilliVolts() override { - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw) / 4096; - } - - const char* getManufacturerName() const override { - return "Pico W"; - } - - void reboot() override { - //NVIC_SystemReset(); - rp2040.reboot(); - } - - bool startOTAUpdate(const char* id, char reply[]) override; -}; diff --git a/variants/rpi_picow/platformio.ini b/variants/rpi_picow/platformio.ini deleted file mode 100644 index ec5cdb83..00000000 --- a/variants/rpi_picow/platformio.ini +++ /dev/null @@ -1,107 +0,0 @@ -[rpi_picow] -extends = rp2040_base -platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = rpipicow -board_build.core = earlephilhower -board_build.filesystem_size = 0.5m -build_flags = ${rp2040_base.build_flags} - -I variants/rpi_picow -; -D PICOW -; -D HW_SPI1_DEVICE - -D P_LORA_DIO_1=20 - -D P_LORA_NSS=3 - -D P_LORA_RESET=15 - -D P_LORA_BUSY=2 - -D P_LORA_SCLK=10 - -D P_LORA_MISO=12 - -D P_LORA_MOSI=11 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=130 - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper -build_src_filter = ${rp2040_base.build_src_filter} - + - +<../variants/rpi_picow> -lib_deps = ${rp2040_base.lib_deps} - -[env:PicoW_repeater] -extends = rpi_picow -build_flags = ${rpi_picow.build_flags} - -D ADVERT_NAME='"PicoW Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rpi_picow.build_src_filter} - +<../examples/simple_repeater> - -[env:PicoW_room_server] -extends = rpi_picow -build_flags = ${rpi_picow.build_flags} - -D ADVERT_NAME='"Test Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rpi_picow.build_src_filter} - +<../examples/simple_room_server> - -[env:PicoW_companion_radio_usb] -extends = rpi_picow -build_flags = ${rpi_picow.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${rpi_picow.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${rpi_picow.lib_deps} - densaugeo/base64 @ ~1.4.0 - -; [env:PicoW_companion_radio_ble] -; extends = rpi_picow -; build_flags = ${rpi_picow.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D BLE_PIN_CODE=123456 -; -D BLE_DEBUG_LOGGING=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${rpi_picow.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${rpi_picow.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -; [env:PicoW_companion_radio_wifi] -; extends = rpi_picow -; build_flags = ${rpi_picow.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D WIFI_DEBUG_LOGGING=1 -; -D WIFI_SSID='"myssid"' -; -D WIFI_PWD='"mypwd"' -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${rpi_picow.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${rpi_picow.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -[env:PicoW_terminal_chat] -extends = rpi_picow -build_flags = ${rpi_picow.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${rpi_picow.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = ${rpi_picow.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/rpi_picow/target.cpp b/variants/rpi_picow/target.cpp deleted file mode 100644 index abb1485d..00000000 --- a/variants/rpi_picow/target.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include "target.h" -#include - -PicoWBoard board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI1); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -bool radio_init() { - rtc_clock.begin(Wire); - - return radio.std_init(&SPI1); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/rpi_picow/target.h b/variants/rpi_picow/target.h deleted file mode 100644 index 17dbb35f..00000000 --- a/variants/rpi_picow/target.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -extern PicoWBoard board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/sensecap_indicator-espnow/SCIndicatorDisplay.h b/variants/sensecap_indicator-espnow/SCIndicatorDisplay.h deleted file mode 100644 index aabedd24..00000000 --- a/variants/sensecap_indicator-espnow/SCIndicatorDisplay.h +++ /dev/null @@ -1,128 +0,0 @@ -#pragma once - -#include - -#define LGFX_USE_V1 -#include - -#include -#include - -class LGFX : public lgfx::LGFX_Device -{ - lgfx::Panel_ST7701 _panel_instance; - lgfx::Bus_RGB _bus_instance; - lgfx::Light_PWM _light_instance; - lgfx::Touch_FT5x06 _touch_instance; - -public: - const uint16_t screenWidth = 480; - const uint16_t screenHeight = 480; - - bool hasButton(void) { return true; } - - LGFX(void) - { - { - auto cfg = _panel_instance.config(); - cfg.memory_width = 480; - cfg.memory_height = 480; - cfg.panel_width = screenWidth; - cfg.panel_height = screenHeight; - cfg.offset_x = 0; - cfg.offset_y = 0; - cfg.offset_rotation = 1; - _panel_instance.config(cfg); - } - - { - auto cfg = _panel_instance.config_detail(); - cfg.pin_cs = 4 | IO_EXPANDER; - cfg.pin_sclk = 41; - cfg.pin_mosi = 48; - cfg.use_psram = 1; - _panel_instance.config_detail(cfg); - } - - { - auto cfg = _bus_instance.config(); - cfg.panel = &_panel_instance; - - cfg.freq_write = 8000000; - cfg.pin_henable = 18; - - cfg.pin_pclk = 21; - cfg.pclk_active_neg = 0; - cfg.pclk_idle_high = 0; - cfg.de_idle_high = 1; - - cfg.pin_hsync = 16; - cfg.hsync_polarity = 0; - cfg.hsync_front_porch = 10; - cfg.hsync_pulse_width = 8; - cfg.hsync_back_porch = 50; - - cfg.pin_vsync = 17; - cfg.vsync_polarity = 0; - cfg.vsync_front_porch = 10; - cfg.vsync_pulse_width = 8; - cfg.vsync_back_porch = 20; - - cfg.pin_d0 = 15; - cfg.pin_d1 = 14; - cfg.pin_d2 = 13; - cfg.pin_d3 = 12; - cfg.pin_d4 = 11; - cfg.pin_d5 = 10; - cfg.pin_d6 = 9; - cfg.pin_d7 = 8; - cfg.pin_d8 = 7; - cfg.pin_d9 = 6; - cfg.pin_d10 = 5; - cfg.pin_d11 = 4; - cfg.pin_d12 = 3; - cfg.pin_d13 = 2; - cfg.pin_d14 = 1; - cfg.pin_d15 = 0; - - _bus_instance.config(cfg); - } - _panel_instance.setBus(&_bus_instance); - - { - auto cfg = _light_instance.config(); - cfg.pin_bl = 45; - _light_instance.config(cfg); - } - _panel_instance.light(&_light_instance); - - { - auto cfg = _touch_instance.config(); - cfg.pin_cs = GPIO_NUM_NC; - cfg.x_min = 0; - cfg.x_max = 479; - cfg.y_min = 0; - cfg.y_max = 479; - cfg.pin_int = GPIO_NUM_NC; - cfg.pin_rst = GPIO_NUM_NC; - cfg.bus_shared = true; - cfg.offset_rotation = 0; - - cfg.i2c_port = 0; - cfg.i2c_addr = 0x48; - cfg.pin_sda = 39; - cfg.pin_scl = 40; - cfg.freq = 400000; - _touch_instance.config(cfg); - _panel_instance.setTouch(&_touch_instance); - } - - setPanel(&_panel_instance); - } -}; - -class SCIndicatorDisplay : public LGFXDisplay { - LGFX disp; -public: - SCIndicatorDisplay() : LGFXDisplay(480, 480, disp) {} -}; diff --git a/variants/sensecap_indicator-espnow/platformio.ini b/variants/sensecap_indicator-espnow/platformio.ini deleted file mode 100644 index e643d033..00000000 --- a/variants/sensecap_indicator-espnow/platformio.ini +++ /dev/null @@ -1,50 +0,0 @@ -[SenseCapIndicator-ESPNow] -extends = esp32_base -board = esp32-s3-devkitc-1 -board_build.arduino.memory_type = qio_opi -board_build.flash_mode = qio -board_build.psram_type = opi -board_upload.flash_size = 8MB -board_upload.maximum_size = 8388608 -board_build.partitions = default.csv -build_flags = - ${esp32_base.build_flags} - -D PIN_BOARD_SDA=39 - -D PIN_BOARD_SCL=40 - -D DISPLAY_CLASS=SCIndicatorDisplay - -D DISPLAY_LINES=21 - -D LINE_LENGTH=53 - -D DISABLE_WIFI_OTA=1 - -D IO_EXPANDER=0x40 - -D IO_EXPANDER_IRQ=42 - -D UI_ZOOM=3.5 - -D UI_RECENT_LIST_SIZE=9 - -D UI_SENSORS_PAGE=1 - -D PIN_USER_BTN=38 - -D HAS_TOUCH - -I variants/sensecap_indicator-espnow -build_src_filter = ${esp32_base.build_src_filter} - +<../variants/sensecap_indicator-espnow/*.cpp> - + - + - + -lib_deps=${esp32_base.lib_deps} - adafruit/Adafruit BusIO @ ^1.17.2 - lovyan03/LovyanGFX @ ^1.2.7 - -[env:SenseCapIndicator-ESPNow_comp_radio_usb] -extends =SenseCapIndicator-ESPNow -build_flags = - ${SenseCapIndicator-ESPNow.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -; NOTE: DO NOT ENABLE --> -D ESPNOW_DEBUG_LOGGING=1 -build_src_filter = ${SenseCapIndicator-ESPNow.build_src_filter} - +<../examples/companion_radio/ui-new/*.cpp> - +<../examples/companion_radio/*.cpp> -lib_deps = - ${SenseCapIndicator-ESPNow.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file diff --git a/variants/sensecap_indicator-espnow/target.cpp b/variants/sensecap_indicator-espnow/target.cpp deleted file mode 100644 index efdaac61..00000000 --- a/variants/sensecap_indicator-espnow/target.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include "target.h" -#include - -ESP32Board board; - -ESPNOWRadio radio_driver; - -ESP32RTCClock rtc_clock; -#if defined(ENV_INCLUDE_GPS) -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, (mesh::RTCClock*)&rtc_clock); -EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else -EnvironmentSensorManager sensors = EnvironmentSensorManager(); -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - #ifdef PIN_USER_BTN - MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true); - #endif -#endif - -bool radio_init() { - rtc_clock.begin(); - - radio_driver.init(); - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return millis() + radio_driver.intID(); // TODO: where to get some entropy? -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - // no-op -} - -void radio_set_tx_power(uint8_t dbm) { - radio_driver.setTxPower(dbm); -} - -// NOTE: as we are using the WiFi radio, the ESP_IDF will have enabled hardware RNG: -// https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html -class ESP_RNG : public mesh::RNG { -public: - void random(uint8_t* dest, size_t sz) override { - esp_fill_random(dest, sz); - } -}; - -mesh::LocalIdentity radio_new_identity() { - ESP_RNG rng; - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/sensecap_indicator-espnow/target.h b/variants/sensecap_indicator-espnow/target.h deleted file mode 100644 index bb78e923..00000000 --- a/variants/sensecap_indicator-espnow/target.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#ifdef ENV_INCLUDE_GPS - #include -#endif -#ifdef DISPLAY_CLASS - #include "SCIndicatorDisplay.h" - #include -#endif - -extern ESP32Board board; -extern ESPNOWRadio radio_driver; -extern ESP32RTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/sensecap_solar/SenseCapSolarBoard.cpp b/variants/sensecap_solar/SenseCapSolarBoard.cpp deleted file mode 100644 index c0883035..00000000 --- a/variants/sensecap_solar/SenseCapSolarBoard.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -#include "SenseCapSolarBoard.h" - -void SenseCapSolarBoard::begin() { - NRF52Board::begin(); - -#if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL) - Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL); -#endif - - Wire.begin(); - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, LOW); -#endif - - delay(10); // give sx1262 some time to power up -} \ No newline at end of file diff --git a/variants/sensecap_solar/SenseCapSolarBoard.h b/variants/sensecap_solar/SenseCapSolarBoard.h deleted file mode 100644 index dfe007bf..00000000 --- a/variants/sensecap_solar/SenseCapSolarBoard.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include -#include -#include - -class SenseCapSolarBoard : public NRF52BoardOTA { -public: - SenseCapSolarBoard() : NRF52BoardOTA("SENSECAP_SOLAR_OTA") {} - void begin(); - -#if defined(P_LORA_TX_LED) - void onBeforeTransmit() override { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - } - void onAfterTransmit() override { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - } -#endif - - uint16_t getBattMilliVolts() override { - digitalWrite(VBAT_ENABLE, LOW); - int adcvalue = 0; - analogReadResolution(12); - analogReference(AR_INTERNAL_3_0); - delay(10); - adcvalue = analogRead(BATTERY_PIN); - return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE) / 4.096; - } - - const char* getManufacturerName() const override { - return "Seeed SenseCap Solar"; - } -}; diff --git a/variants/sensecap_solar/platformio.ini b/variants/sensecap_solar/platformio.ini deleted file mode 100644 index d4fb7b44..00000000 --- a/variants/sensecap_solar/platformio.ini +++ /dev/null @@ -1,99 +0,0 @@ -[SenseCap_Solar] -extends = nrf52_base -board = seeed_sensecap_solar -board_build.ldscript = boards/nrf52840_s140_v7.ld -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I lib/nrf52/s140_nrf52_7.3.0_API/include - -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 - -I variants/sensecap_solar - -I src/helpers/nrf52 - -UENV_INCLUDE_GPS - -D NRF52_PLATFORM=1 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_TX_LED=12 - -D P_LORA_DIO_1=1 - -D P_LORA_RESET=2 - -D P_LORA_BUSY=3 - -D P_LORA_NSS=4 - -D LORA_TX_POWER=22 - -D SX126X_RXEN=5 - -D SX126X_TXEN=RADIOLIB_NC - -D SX126X_DIO2_AS_RF_SWITCH=1 - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 -build_src_filter = ${nrf52_base.build_src_filter} - + - + - +<../variants/sensecap_solar> -debug_tool = jlink -upload_protocol = nrfutil -lib_deps = - ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - -[env:SenseCap_Solar_repeater] -extends = SenseCap_Solar -build_flags = - ${SenseCap_Solar.build_flags} - -D ADVERT_NAME='"SenseCap_Solar Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${SenseCap_Solar.build_src_filter} - +<../examples/simple_repeater/*.cpp> - -[env:SenseCap_Solar_room_server] -extends = SenseCap_Solar -build_flags = - ${SenseCap_Solar.build_flags} - -D ADVERT_NAME='"SenseCap_Solar Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${SenseCap_Solar.build_src_filter} - +<../examples/simple_room_server/*.cpp> - -[env:SenseCap_Solar_companion_radio_ble] -extends = SenseCap_Solar -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = - ${SenseCap_Solar.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${SenseCap_Solar.build_src_filter} - + - +<../examples/companion_radio/*.cpp> -lib_deps = - ${SenseCap_Solar.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:SenseCap_Solar_companion_radio_usb] -extends = SenseCap_Solar -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = - ${SenseCap_Solar.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${SenseCap_Solar.build_src_filter} - + - +<../examples/companion_radio/*.cpp> -lib_deps = - ${SenseCap_Solar.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file diff --git a/variants/sensecap_solar/target.cpp b/variants/sensecap_solar/target.cpp deleted file mode 100644 index 6bd7d31a..00000000 --- a/variants/sensecap_solar/target.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include "target.h" -#include - -SenseCapSolarBoard board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -EnvironmentSensorManager sensors; - -bool radio_init() { - rtc_clock.begin(Wire); - - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/sensecap_solar/target.h b/variants/sensecap_solar/target.h deleted file mode 100644 index 90d60ba5..00000000 --- a/variants/sensecap_solar/target.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include - -extern SenseCapSolarBoard board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/sensecap_solar/variant.cpp b/variants/sensecap_solar/variant.cpp deleted file mode 100644 index 05774c10..00000000 --- a/variants/sensecap_solar/variant.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" -#include "nrf.h" - -const uint32_t g_ADigitalPinMap[] = { - // D0 .. D10 - Peripheral control pins - 2, // D0 P0.02 (A0) GNSS_WAKEUP - 3, // D1 P0.03 (A1) LORA_DIO1 - 28, // D2 P0.28 (A2) LORA_RESET - 29, // D3 P0.29 (A3) LORA_BUSY - 4, // D4 P0.04 (A4/SDA) LORA_CS - 5, // D5 P0.05 (A5/SCL) LORA_SW - 43, // D6 P1.11 (UART_TX) GNSS_TX - 44, // D7 P1.12 (UART_RX) GNSS_RX - 45, // D8 P1.13 (SPI_SCK) LORA_SCK - 46, // D9 P1.14 (SPI_MISO) LORA_MISO - 47, // D10 P1.15 (SPI_MOSI) LORA_MOSI - - // D11-D12 - LED outputs - 15, // D11 P0.15 User LED - 19, // D12 P0.19 Breathing LED - - // D13 - User input - 33, // D13 P1.01 User Button - - // D14-D15 - Grove/NFC interface - 9, // D14 P0.09 NFC1/GROVE_D1 - 10, // D15 P0.10 NFC2/GROVE_D0 - - // D16 - Power management - // 31, // D16 P0.31 VBAT_ADC (Battery voltage) - 31, // D16 P0.31 VBAT_ADC (Battery voltage) - // D17 - GNSS control - 35, // D17 P1.03 GNSS_RESET - - 37, // D18 P1.05 GNSS_ENABLE - 14, // D19 P0.14 BAT_READ - 39, // D20 P1.07 USER_BUTTON - - // - 21, // D21 P0.21 (QSPI_SCK) - 25, // D22 P0.25 (QSPI_CSN) - 20, // D23 P0.20 (QSPI_SIO_0 DI) - 24, // D24 P0.24 (QSPI_SIO_1 DO) - 22, // D25 P0.22 (QSPI_SIO_2 WP) - 23, // D26 P0.23 (QSPI_SIO_3 HOLD) -}; - -void initVariant() { - pinMode(GPS_EN, OUTPUT); - digitalWrite(GPS_EN, LOW); - - pinMode(BATTERY_PIN, INPUT); - pinMode(VBAT_ENABLE, OUTPUT); - digitalWrite(VBAT_ENABLE, LOW); - - pinMode(PIN_QSPI_CS, OUTPUT); - digitalWrite(PIN_QSPI_CS, HIGH); - - pinMode(LED_GREEN, OUTPUT); - digitalWrite(LED_GREEN, LOW); - - pinMode(LED_BLUE, OUTPUT); - digitalWrite(LED_BLUE, LOW); - - /* disable gps until we actually support it. - pinMode(GPS_EN, OUTPUT); - digitalWrite(GPS_EN, HIGH); - */ -} diff --git a/variants/sensecap_solar/variant.h b/variants/sensecap_solar/variant.h deleted file mode 100644 index 76494f48..00000000 --- a/variants/sensecap_solar/variant.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef _SEEED_SENSECAP_SOLAR_H_ -#define _SEEED_SENSECAP_SOLAR_H_ - -/** Master clock frequency */ -#define VARIANT_MCK (64000000ul) - -#define USE_LFXO // Board uses 32khz crystal for LF - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" - -#define PINS_COUNT (33) -#define NUM_DIGITAL_PINS (33) -#define NUM_ANALOG_INPUTS (8) -#define NUM_ANALOG_OUTPUTS (0) - -// LEDs -#define PIN_LED (12) -#define LED_PWR (PINS_COUNT) - -#define LED_BUILTIN (PIN_LED) - -#define LED_RED (PINS_COUNT) -#define LED_GREEN (12) -#define LED_BLUE (11) - -#define LED_STATE_ON (1) // State when LED is litted - -// Buttons -#define PIN_BUTTON1 (13) -#define PIN_BUTTON2 (20) - -#define VBAT_ENABLE (19) // Output LOW to enable reading of the BAT voltage. - -// Analog pins -#define BATTERY_PIN (16) // Read the BAT voltage. -#define AREF_VOLTAGE (3.0F) -#define ADC_MULTIPLIER (3.0F) // 1M, 512k divider bridge -#define ADC_RESOLUTION (12) - -// Serial interfaces -#define PIN_SERIAL1_RX (7) -#define PIN_SERIAL1_TX (6) - -// SPI Interfaces -#define SPI_INTERFACES_COUNT (1) - -#define PIN_SPI_MISO (9) -#define PIN_SPI_MOSI (10) -#define PIN_SPI_SCK (8) - -// Lora SPI is on SPI0 -#define P_LORA_SCLK PIN_SPI_SCK -#define P_LORA_MISO PIN_SPI_MISO -#define P_LORA_MOSI PIN_SPI_MOSI - -// Wire Interfaces -#define WIRE_INTERFACES_COUNT (1) - -#define PIN_WIRE_SDA (14) -#define PIN_WIRE_SCL (15) - -// GPS L76KB -#define GPS_BAUDRATE 9600 -#define GPS_THREAD_INTERVAL 50 -#define PIN_GPS_TX PIN_SERIAL1_RX -#define PIN_GPS_RX PIN_SERIAL1_TX -#define PIN_GPS_STANDBY (0) -#define GPS_EN (18) - -// QSPI Pins -#define PIN_QSPI_SCK (21) -#define PIN_QSPI_CS (22) -#define PIN_QSPI_IO0 (23) -#define PIN_QSPI_IO1 (24) -#define PIN_QSPI_IO2 (25) -#define PIN_QSPI_IO3 (26) - -#define EXTERNAL_FLASH_DEVICES P25Q16H -#define EXTERNAL_FLASH_USE_QSPI - -#endif \ No newline at end of file diff --git a/variants/station_g2/StationG2Board.h b/variants/station_g2/StationG2Board.h deleted file mode 100644 index a905682c..00000000 --- a/variants/station_g2/StationG2Board.h +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once - -#include -#include -#include - -class StationG2Board : public ESP32Board { -public: - void begin() { - ESP32Board::begin(); - - esp_reset_reason_t reason = esp_reset_reason(); - if (reason == ESP_RST_DEEPSLEEP) { - long wakeup_source = esp_sleep_get_ext1_wakeup_status(); - if (wakeup_source & (1 << P_LORA_DIO_1)) { // received a LoRa packet (while in deep sleep) - startup_reason = BD_STARTUP_RX_PACKET; - } - - rtc_gpio_hold_dis((gpio_num_t)P_LORA_NSS); - rtc_gpio_deinit((gpio_num_t)P_LORA_DIO_1); - } - } - - void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) { - esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); - - // Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep - rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY); - rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1); - - rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS); - - if (pin_wake_btn < 0) { - esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet - } else { - esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn - } - - if (secs > 0) { - esp_sleep_enable_timer_wakeup(secs * 1000000); - } - - // Finally set ESP32 into sleep - esp_deep_sleep_start(); // CPU halts here and never returns! - } - - uint16_t getBattMilliVolts() override { - return 0; - } - - const char* getManufacturerName() const override { - return "Station G2"; - } -}; diff --git a/variants/station_g2/platformio.ini b/variants/station_g2/platformio.ini deleted file mode 100644 index 91ef5f7a..00000000 --- a/variants/station_g2/platformio.ini +++ /dev/null @@ -1,239 +0,0 @@ -[Station_G2] -extends = esp32_base -board = station-g2 -build_flags = - ${esp32_base.build_flags} - ${sensor_base.build_flags} - -I variants/station_g2 - -I src/helpers/ui - -D STATION_G2 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=48 - -D P_LORA_NSS=11 - -D P_LORA_RESET=21 - -D P_LORA_BUSY=47 - -D P_LORA_SCLK=12 - -D P_LORA_MISO=14 - -D P_LORA_MOSI=13 - -D LORA_TX_POWER=7 ; configured as 7dbm, because the final output will be ~27dbm (~0.5w) if the PA is enabled. - -D MAX_LORA_TX_POWER=19 ; max output without burning out the PA -; -D P_LORA_TX_LED=35 - -D PIN_BOARD_SDA=5 - -D PIN_BOARD_SCL=6 - -D PIN_USER_BTN=38 - -D PIN_GPS_RX=15 - -D PIN_GPS_TX=7 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 -; -D SX126X_RX_BOOSTED_GAIN=1 - DO NOT ENABLE THIS! -; https://wiki.uniteng.com/en/meshtastic/station-g2#impact-of-lora-node-dense-areashigh-noise-environments-on-rf-performance - -D DISPLAY_CLASS=SH1106Display -build_src_filter = ${esp32_base.build_src_filter} - +<../variants/station_g2> - + - + - + -lib_deps = - ${esp32_base.lib_deps} - ${sensor_base.lib_deps} - adafruit/Adafruit SH110X @ ~2.1.13 - adafruit/Adafruit GFX Library @ ^1.12.1 - -[env:Station_G2_repeater] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -D ADVERT_NAME='"Station G2 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - +<../examples/simple_repeater> -lib_deps = - ${Station_G2.lib_deps} - ${esp32_ota.lib_deps} - -; [env:Station_G2_repeater_bridge_rs232] -; extends = Station_G2 -; build_flags = -; ${Station_G2.build_flags} -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=50 -; -D WITH_RS232_BRIDGE=Serial2 -; -D WITH_RS232_BRIDGE_RX=5 -; -D WITH_RS232_BRIDGE_TX=6 -; -D BRIDGE_DEBUG=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${Station_G2.build_src_filter} -; + -; +<../examples/simple_repeater> -; lib_deps = -; ${Station_G2.lib_deps} -; ${esp32_ota.lib_deps} - -[env:Station_G2_repeater_bridge_espnow] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_ESPNOW_BRIDGE=1 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - + - +<../examples/simple_repeater> -lib_deps = - ${Station_G2.lib_deps} - ${esp32_ota.lib_deps} - -[env:Station_G2_logging_repeater] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -D ADVERT_NAME='"Station G2 Logging Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D MESH_PACKET_LOGGING=1 - -D SX126X_RX_BOOSTED_GAIN=1 -; https://wiki.uniteng.com/en/meshtastic/station-g2#impact-of-lora-node-dense-areashigh-noise-environments-on-rf-performance -; -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - +<../examples/simple_repeater> -lib_deps = - ${Station_G2.lib_deps} - ${esp32_ota.lib_deps} - -; [env:Station_G2_logging_repeater_bridge_rs232] -; extends = Station_G2 -; build_flags = -; ${Station_G2.build_flags} -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D SX126X_RX_BOOSTED_GAIN=1 -; -D WITH_RS232_BRIDGE=Serial2 -; -D WITH_RS232_BRIDGE_RX=5 -; -D WITH_RS232_BRIDGE_TX=6 -; -D BRIDGE_DEBUG=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${Station_G2.build_src_filter} -; + -; +<../examples/simple_repeater> -; lib_deps = -; ${Station_G2.lib_deps} -; ${esp32_ota.lib_deps} - -[env:Station_G2_logging_repeater_bridge_espnow] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D MESH_PACKET_LOGGING=1 - -D SX126X_RX_BOOSTED_GAIN=1 - -D WITH_ESPNOW_BRIDGE=1 -; -D BRIDGE_DEBUG=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - + - +<../examples/simple_repeater> -lib_deps = - ${Station_G2.lib_deps} - ${esp32_ota.lib_deps} - -[env:Station_G2_room_server] -extends = Station_G2 -build_src_filter = ${Station_G2.build_src_filter} - +<../examples/simple_room_server> -build_flags = - ${Station_G2.build_flags} - -D ADVERT_NAME='"Station G2 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Station_G2.lib_deps} - ${esp32_ota.lib_deps} - -[env:Station_G2_companion_radio_usb] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Station_G2.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Station_G2_companion_radio_ble] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Station_G2.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Station_G2_companion_radio_wifi] -extends = Station_G2 -build_flags = - ${Station_G2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D WIFI_DEBUG_LOGGING=1 - -D WIFI_SSID='"myssid"' - -D WIFI_PWD='"mypwd"' - -D OFFLINE_QUEUE_SIZE=256 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Station_G2.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Station_G2.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/station_g2/target.cpp b/variants/station_g2/target.cpp deleted file mode 100644 index 3f0c1404..00000000 --- a/variants/station_g2/target.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include "target.h" - -StationG2Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#if ENV_INCLUDE_GPS - #include - MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); - EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else - EnvironmentSensorManager sensors; -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - -#if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/station_g2/target.h b/variants/station_g2/target.h deleted file mode 100644 index 2bf7016d..00000000 --- a/variants/station_g2/target.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -#ifdef DISPLAY_CLASS - #include - #include -#endif - -extern StationG2Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/t1000-e/T1000eBoard.cpp b/variants/t1000-e/T1000eBoard.cpp deleted file mode 100644 index 0d390f79..00000000 --- a/variants/t1000-e/T1000eBoard.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include - -#include "T1000eBoard.h" - -void T1000eBoard::begin() { - NRF52BoardDCDC::begin(); - btn_prev_state = HIGH; - -#ifdef BUTTON_PIN - pinMode(BATTERY_PIN, INPUT); - pinMode(BUTTON_PIN, INPUT); - pinMode(LED_PIN, OUTPUT); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); -#endif - - Wire.begin(); - - delay(10); // give sx1262 some time to power up -} \ No newline at end of file diff --git a/variants/t1000-e/T1000eBoard.h b/variants/t1000-e/T1000eBoard.h deleted file mode 100644 index f26bdf02..00000000 --- a/variants/t1000-e/T1000eBoard.h +++ /dev/null @@ -1,94 +0,0 @@ -#pragma once - -#include -#include -#include - -class T1000eBoard : public NRF52BoardDCDC { -protected: - uint8_t btn_prev_state; - -public: - void begin(); - - uint16_t getBattMilliVolts() override { - #ifdef BATTERY_PIN - #ifdef PIN_3V3_EN - digitalWrite(PIN_3V3_EN, HIGH); - #endif - analogReference(AR_INTERNAL_3_0); - analogReadResolution(12); - delay(10); - float volts = (analogRead(BATTERY_PIN) * ADC_MULTIPLIER * AREF_VOLTAGE) / 4096; - #ifdef PIN_3V3_EN - digitalWrite(PIN_3V3_EN, LOW); - #endif - - analogReference(AR_DEFAULT); // put back to default - analogReadResolution(10); - - return volts * 1000; - #else - return 0; - #endif - } - - const char* getManufacturerName() const override { - return "Seeed Tracker T1000-E"; - } - - int buttonStateChanged() { - #ifdef BUTTON_PIN - uint8_t v = digitalRead(BUTTON_PIN); - if (v != btn_prev_state) { - btn_prev_state = v; - return (v == LOW) ? 1 : -1; - } - #endif - return 0; - } - - void powerOff() override { - #ifdef HAS_GPS - digitalWrite(GPS_VRTC_EN, LOW); - digitalWrite(GPS_RESET, LOW); - digitalWrite(GPS_SLEEP_INT, LOW); - digitalWrite(GPS_RTC_INT, LOW); - digitalWrite(GPS_EN, LOW); - #endif - - #ifdef BUZZER_EN - digitalWrite(BUZZER_EN, LOW); - #endif - - #ifdef PIN_3V3_EN - digitalWrite(PIN_3V3_EN, LOW); - #endif - - #ifdef PIN_3V3_ACC_EN - digitalWrite(PIN_3V3_ACC_EN, LOW); - #endif - #ifdef SENSOR_EN - digitalWrite(SENSOR_EN, LOW); - #endif - - // set led on and wait for button release before poweroff - #ifdef LED_PIN - digitalWrite(LED_PIN, HIGH); - #endif - #ifdef BUTTON_PIN - while(digitalRead(BUTTON_PIN)); - #endif - #ifdef LED_PIN - digitalWrite(LED_PIN, LOW); - #endif - - #ifdef BUTTON_PIN - nrf_gpio_cfg_sense_input(BUTTON_PIN, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); - #endif - - sd_power_system_off(); - } - -// bool startOTAUpdate(const char* id, char reply[]) override; -}; diff --git a/variants/t1000-e/platformio.ini b/variants/t1000-e/platformio.ini deleted file mode 100644 index ac929308..00000000 --- a/variants/t1000-e/platformio.ini +++ /dev/null @@ -1,119 +0,0 @@ -[t1000-e] -extends = nrf52_base -board = tracker-t1000-e -board_build.ldscript = boards/nrf52840_s140_v7.ld -build_flags = ${nrf52_base.build_flags} - -I src/helpers/nrf52 - -I lib/nrf52/s140_nrf52_7.3.0_API/include - -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 - -I variants/t1000-e - -I src/helpers/ui - -D T1000_E - -D PIN_USER_BTN=6 - -D USER_BTN_PRESSED=HIGH - -D PIN_STATUS_LED=24 - -D RADIO_CLASS=CustomLR1110 - -D WRAPPER_CLASS=CustomLR1110Wrapper - -D LORA_TX_POWER=22 - -D RF_SWITCH_TABLE - -D RX_BOOSTED_GAIN=true - -D P_LORA_BUSY=7 ; P0.7 - -D P_LORA_SCLK=11 ; P0.11 - -D P_LORA_NSS=12 ; P0.12 - -D P_LORA_DIO_1=33 ; P1.1 - -D P_LORA_MISO=40 ; P1.8 - -D P_LORA_MOSI=41 ; P0.9 - -D P_LORA_RESET=42 ; P1.10 - -D LR11X0_DIO_AS_RF_SWITCH=true - -D LR11X0_DIO3_TCXO_VOLTAGE=1.6 - -D ENV_INCLUDE_GPS=1 -build_src_filter = ${nrf52_base.build_src_filter} - + - + - +<../variants/t1000-e> -debug_tool = jlink -upload_protocol = nrfutil - -[env:t1000e_repeater] -extends = t1000-e -build_flags = ${t1000-e.build_flags} - -I examples/companion_radio/ui-orig - -D ADVERT_NAME='"t1000-e Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${t1000-e.build_src_filter} - +<../examples/simple_repeater> -lib_deps = ${t1000-e.lib_deps} - stevemarple/MicroNMEA @ ^2.0.6 - -[env:t1000e_room_server] -extends = t1000-e -build_flags = ${t1000-e.build_flags} - -I examples/companion_radio/ui-orig - -D ADVERT_NAME='"t1000-e Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 - -D RF_SWITCH_TABLE -build_src_filter = ${t1000-e.build_src_filter} - +<../examples/simple_room_server> -lib_deps = ${t1000-e.lib_deps} - stevemarple/MicroNMEA @ ^2.0.6 - -[env:t1000e_companion_radio_usb] -extends = t1000-e -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${t1000-e.build_flags} - -I examples/companion_radio/ui-orig - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=NullDisplayDriver - -D PIN_BUZZER=25 - -D PIN_BUZZER_EN=37 ; P1/5 - required for T1000-E -build_src_filter = ${t1000-e.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = ${t1000-e.lib_deps} - densaugeo/base64 @ ~1.4.0 - stevemarple/MicroNMEA @ ^2.0.6 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:t1000e_companion_radio_ble] -extends = t1000-e -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${t1000-e.build_flags} - -I examples/companion_radio/ui-orig - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_TX_POWER=0 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=NullDisplayDriver - -D PIN_BUZZER=25 - -D PIN_BUZZER_EN=37 ; P1/5 - required for T1000-E - -D ADVERT_NAME='"@@MAC"' -build_src_filter = ${t1000-e.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = ${t1000-e.lib_deps} - densaugeo/base64 @ ~1.4.0 - stevemarple/MicroNMEA @ ^2.0.6 - end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/variants/t1000-e/t1000e_sensors.cpp b/variants/t1000-e/t1000e_sensors.cpp deleted file mode 100644 index f0254138..00000000 --- a/variants/t1000-e/t1000e_sensors.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "t1000e_sensors.h" - -#include - -#define HEATER_NTC_BX 4250 // thermistor coefficient B -#define HEATER_NTC_RP 8250 // ohm, series resistance to thermistor -#define HEATER_NTC_KA 273.15 // 25 Celsius at Kelvin -#define NTC_REF_VCC 3300 // mV, max voltage of 3V3 sensor rail -#define LIGHT_REF_VCC 2400 // - -static unsigned int ntc_res2[136] = { - 113347, 107565, 102116, 96978, 92132, 87559, 83242, 79166, 75316, 71677, 68237, 64991, 61919, 59011, - 56258, 53650, 51178, 48835, 46613, 44506, 42506, 40600, 38791, 37073, 35442, 33892, 32420, 31020, - 29689, 28423, 27219, 26076, 24988, 23951, 22963, 22021, 21123, 20267, 19450, 18670, 17926, 17214, - 16534, 15886, 15266, 14674, 14108, 13566, 13049, 12554, 12081, 11628, 11195, 10780, 10382, 10000, - 9634, 9284, 8947, 8624, 8315, 8018, 7734, 7461, 7199, 6948, 6707, 6475, 6253, 6039, - 5834, 5636, 5445, 5262, 5086, 4917, 4754, 4597, 4446, 4301, 4161, 4026, 3896, 3771, - 3651, 3535, 3423, 3315, 3211, 3111, 3014, 2922, 2834, 2748, 2666, 2586, 2509, 2435, - 2364, 2294, 2228, 2163, 2100, 2040, 1981, 1925, 1870, 1817, 1766, 1716, 1669, 1622, - 1578, 1535, 1493, 1452, 1413, 1375, 1338, 1303, 1268, 1234, 1202, 1170, 1139, 1110, - 1081, 1053, 1026, 999, 974, 949, 925, 902, 880, 858, -}; - -static char ntc_temp2[136] = { - -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, - -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, -}; - -static float get_heater_temperature(unsigned int vcc_volt, unsigned int ntc_volt) { - int i = 0; - float Vout = 0, Rt = 0, temp = 0; - Vout = ntc_volt; - - Rt = (HEATER_NTC_RP * vcc_volt) / Vout - HEATER_NTC_RP; - - for (i = 0; i < 136; i++) { - if (Rt >= ntc_res2[i]) { - break; - } - } - - temp = ntc_temp2[i - 1] + 1 * (ntc_res2[i - 1] - Rt) / (float)(ntc_res2[i - 1] - ntc_res2[i]); - - temp = (temp * 100 + 5) / 100; - return temp; -} - -static int get_light_lv(unsigned int light_volt) { - float Vout = 0, Vin = 0, Rt = 0, temp = 0; - unsigned int light_level = 0; - - // Seeed's firmware maps the photocell reading to a 0-100 % range rather than lux. - if (light_volt <= 80) { - light_level = 0; - return light_level; - } else if (light_volt >= 2480) { - light_level = 100; - return light_level; - } - Vout = light_volt; - light_level = 100 * (Vout - 80) / LIGHT_REF_VCC; - - return light_level; -} - -float t1000e_get_temperature(void) { - unsigned int ntc_v, vcc_v; - - digitalWrite(PIN_3V3_EN, HIGH); - digitalWrite(SENSOR_EN, HIGH); - analogReference(AR_INTERNAL_3_0); - analogReadResolution(12); - delay(10); - unsigned int rail_v = (1000.0 * (analogRead(BATTERY_PIN) * ADC_MULTIPLIER * AREF_VOLTAGE)) / 4096; - vcc_v = (rail_v > NTC_REF_VCC) ? NTC_REF_VCC : rail_v; - ntc_v = (1000.0 * AREF_VOLTAGE * analogRead(TEMP_SENSOR)) / 4096; - digitalWrite(PIN_3V3_EN, LOW); - digitalWrite(SENSOR_EN, LOW); - - return get_heater_temperature(vcc_v, ntc_v); -} - -uint32_t t1000e_get_light(void) { - int lux = 0; - unsigned int lux_v = 0; - - digitalWrite(PIN_3V3_EN, HIGH); - digitalWrite(SENSOR_EN, HIGH); - analogReference(AR_INTERNAL_3_0); - analogReadResolution(12); - delay(10); - lux_v = 1000 * analogRead(LUX_SENSOR) * AREF_VOLTAGE / 4096; - lux = get_light_lv(lux_v); - digitalWrite(SENSOR_EN, LOW); - digitalWrite(PIN_3V3_EN, LOW); - - return lux; -} diff --git a/variants/t1000-e/t1000e_sensors.h b/variants/t1000-e/t1000e_sensors.h deleted file mode 100644 index e8f790b6..00000000 --- a/variants/t1000-e/t1000e_sensors.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include - -// Light and temperature sensors are on ADC ports -// functions adapted from Seeed examples to get values -// see : https://github.com/Seeed-Studio/Seeed-Tracker-T1000-E-for-LoRaWAN-dev-board - -extern uint32_t t1000e_get_light(); -extern float t1000e_get_temperature(); \ No newline at end of file diff --git a/variants/t1000-e/target.cpp b/variants/t1000-e/target.cpp deleted file mode 100644 index 82d958b5..00000000 --- a/variants/t1000-e/target.cpp +++ /dev/null @@ -1,201 +0,0 @@ -#include -#include "t1000e_sensors.h" -#include "target.h" -#include - -T1000eBoard board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock rtc_clock; -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); -T1000SensorManager sensors = T1000SensorManager(nmea); - -#ifdef DISPLAY_CLASS - NullDisplayDriver display; -#endif - -#ifndef LORA_CR - #define LORA_CR 5 -#endif - -#ifdef RF_SWITCH_TABLE -static const uint32_t rfswitch_dios[Module::RFSWITCH_MAX_PINS] = { - RADIOLIB_LR11X0_DIO5, - RADIOLIB_LR11X0_DIO6, - RADIOLIB_LR11X0_DIO7, - RADIOLIB_LR11X0_DIO8, - RADIOLIB_NC -}; - -static const Module::RfSwitchMode_t rfswitch_table[] = { - // mode DIO5 DIO6 DIO7 DIO8 - { LR11x0::MODE_STBY, {LOW, LOW, LOW, LOW }}, - { LR11x0::MODE_RX, {HIGH, LOW, LOW, HIGH }}, - { LR11x0::MODE_TX, {HIGH, HIGH, LOW, HIGH }}, - { LR11x0::MODE_TX_HP, {LOW, HIGH, LOW, HIGH }}, - { LR11x0::MODE_TX_HF, {LOW, LOW, LOW, LOW }}, - { LR11x0::MODE_GNSS, {LOW, LOW, HIGH, LOW }}, - { LR11x0::MODE_WIFI, {LOW, LOW, LOW, LOW }}, - END_OF_MODE_TABLE, -}; -#endif - -bool radio_init() { - //rtc_clock.begin(Wire); - -#ifdef LR11X0_DIO3_TCXO_VOLTAGE - float tcxo = LR11X0_DIO3_TCXO_VOLTAGE; -#else - float tcxo = 1.6f; -#endif - - SPI.setPins(P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); - SPI.begin(); - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_LR11X0_LORA_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo); - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - - radio.setCRC(2); - radio.explicitHeader(); - -#ifdef RF_SWITCH_TABLE - radio.setRfSwitchTable(rfswitch_dios, rfswitch_table); -#endif -#ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); -#endif - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - -void T1000SensorManager::start_gps() { - gps_active = true; - //_nmea->begin(); - // this init sequence should be better - // comes from seeed examples and deals with all gps pins - pinMode(GPS_EN, OUTPUT); - digitalWrite(GPS_EN, HIGH); - delay(10); - pinMode(GPS_VRTC_EN, OUTPUT); - digitalWrite(GPS_VRTC_EN, HIGH); - delay(10); - - pinMode(GPS_RESET, OUTPUT); - digitalWrite(GPS_RESET, HIGH); - delay(10); - digitalWrite(GPS_RESET, LOW); - - pinMode(GPS_SLEEP_INT, OUTPUT); - digitalWrite(GPS_SLEEP_INT, HIGH); - pinMode(GPS_RTC_INT, OUTPUT); - digitalWrite(GPS_RTC_INT, LOW); - pinMode(GPS_RESETB, INPUT_PULLUP); -} - -void T1000SensorManager::sleep_gps() { - gps_active = false; - digitalWrite(GPS_VRTC_EN, HIGH); - digitalWrite(GPS_EN, LOW); - digitalWrite(GPS_RESET, HIGH); - digitalWrite(GPS_SLEEP_INT, HIGH); - digitalWrite(GPS_RTC_INT, LOW); - pinMode(GPS_RESETB, OUTPUT); - digitalWrite(GPS_RESETB, LOW); - //_nmea->stop(); -} - -void T1000SensorManager::stop_gps() { - gps_active = false; - digitalWrite(GPS_VRTC_EN, LOW); - digitalWrite(GPS_EN, LOW); - digitalWrite(GPS_RESET, HIGH); - digitalWrite(GPS_SLEEP_INT, HIGH); - digitalWrite(GPS_RTC_INT, LOW); - pinMode(GPS_RESETB, OUTPUT); - digitalWrite(GPS_RESETB, LOW); - //_nmea->stop(); -} - - -bool T1000SensorManager::begin() { - // init GPS - Serial1.begin(115200); - return true; -} - -bool T1000SensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { - if (requester_permissions & TELEM_PERM_LOCATION) { // does requester have permission? - telemetry.addGPS(TELEM_CHANNEL_SELF, node_lat, node_lon, node_altitude); - } - if (requester_permissions & TELEM_PERM_ENVIRONMENT) { - // Firmware reports light as a 0-100 % scale, but expose it via Luminosity so app labels it "Luminosity". - telemetry.addLuminosity(TELEM_CHANNEL_SELF, t1000e_get_light()); - telemetry.addTemperature(TELEM_CHANNEL_SELF, t1000e_get_temperature()); - } - return true; -} - -void T1000SensorManager::loop() { - static long next_gps_update = 0; - - _nmea->loop(); - - if (millis() > next_gps_update) { - if (gps_active && _nmea->isValid()) { - node_lat = ((double)_nmea->getLatitude())/1000000.; - node_lon = ((double)_nmea->getLongitude())/1000000.; - node_altitude = ((double)_nmea->getAltitude()) / 1000.0; - //Serial.printf("lat %f lon %f\r\n", _lat, _lon); - } - next_gps_update = millis() + 1000; - } -} - -int T1000SensorManager::getNumSettings() const { return 1; } // just one supported: "gps" (power switch) - -const char* T1000SensorManager::getSettingName(int i) const { - return i == 0 ? "gps" : NULL; -} -const char* T1000SensorManager::getSettingValue(int i) const { - if (i == 0) { - return gps_active ? "1" : "0"; - } - return NULL; -} -bool T1000SensorManager::setSettingValue(const char* name, const char* value) { - if (strcmp(name, "gps") == 0) { - if (strcmp(value, "0") == 0) { - sleep_gps(); // sleep for faster fix ! - } else { - start_gps(); - } - return true; - } - return false; // not supported -} diff --git a/variants/t1000-e/target.h b/variants/t1000-e/target.h deleted file mode 100644 index 27351b94..00000000 --- a/variants/t1000-e/target.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include "T1000eBoard.h" -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include "NullDisplayDriver.h" -#endif - -class T1000SensorManager: public SensorManager { - bool gps_active = false; - LocationProvider * _nmea; - - void start_gps(); - void sleep_gps(); - void stop_gps(); -public: - T1000SensorManager(LocationProvider &nmea): _nmea(&nmea) { } - bool begin() override; - bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override; - void loop() override; - int getNumSettings() const override; - const char* getSettingName(int i) const override; - const char* getSettingValue(int i) const override; - bool setSettingValue(const char* name, const char* value) override; - LocationProvider* getLocationProvider() { return _nmea; } -}; - -#ifdef DISPLAY_CLASS - extern NullDisplayDriver display; -#endif - -extern T1000eBoard board; -extern WRAPPER_CLASS radio_driver; -extern VolatileRTCClock rtc_clock; -extern T1000SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/t1000-e/variant.cpp b/variants/t1000-e/variant.cpp deleted file mode 100644 index a598e3ca..00000000 --- a/variants/t1000-e/variant.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - * variant.cpp - * Copyright (C) 2023 Seeed K.K. - * MIT License - */ - -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" - -const uint32_t g_ADigitalPinMap[PINS_COUNT + 1] = -{ - 0, // P0.00 - 1, // P0.01 - 2, // P0.02, AIN0 BATTERY_PIN - 3, // P0.03 - 4, // P0.04, SENSOR_EN - 5, // P0.05, EXT_PWR_DETEC - 6, // P0.06, PIN_BUTTON1 - 7, // P0.07, LORA_BUSY - 8, // P0.08, GPS_VRTC_EN - 9, // P0.09 - 10, // P0.10 - 11, // P0.11, PIN_SPI_SCK - 12, // P0.12, PIN_SPI_NSS - 13, // P0.13, PIN_SERIAL1_TX - 14, // P0.14, PIN_SERIAL1_RX - 15, // P0.15, GPS_RTC_INT - 16, // P0.16, PIN_SERIAL2_TX - 17, // P0.17, PIN_SERIAL2_RX - 18, // P0.18 - 19, // P0.19 - 20, // P0.20 - 21, // P0.21 - 22, // P0.22 - 23, // P0.23 - 24, // P0.24, LED_GREEN - 25, // P0.25, BUZZER_PIN - 26, // P0.26, PIN_WIRE_SDA - 27, // P0.27, PIN_WIRE_SCL - 28, // P0.28 - 29, // P0.29, AIN5, LUX_SENSOR - 30, // P0.30 - 31, // P0.31, AIN7, TEMP_SENSOR - 32, // P1.00 - 33, // P1.01, LORA_DIO_1 - 34, // P1.02 - 35, // P1.03, EXT_CHRG_DETECT - 36, // P1.04 - 37, // P1.05, LR1110_EN - 38, // P1.06, 3V3_EN PWR TO SENSORS - 39, // P1.07, PIN_3V3_ACC_EN - 40, // P1.08, PIN_SPI_MISO - 41, // P1.09, PIN_SPI_MOSI - 42, // P1.10, LORA_RESET - 43, // P1.11, GPS_EN - 44, // P1.12, GPS_SLEEP_INT - 45, // P1.13 - 46, // P1.14, GPS_RESETB - 47, // P1.15, PIN_GPS_RESET - 255, // NRFX_SPIM_PIN_NOT_USED -}; - -void initVariant() -{ - // All pins output HIGH by default. - // https://github.com/Seeed-Studio/Adafruit_nRF52_Arduino/blob/fab7d30a997a1dfeef9d1d59bfb549adda73815a/cores/nRF5/wiring.c#L65-L69 - - pinMode(BATTERY_PIN, INPUT); - pinMode(TEMP_SENSOR, INPUT); - pinMode(LUX_SENSOR, INPUT); - pinMode(EXT_CHRG_DETECT, INPUT); - pinMode(EXT_PWR_DETECT, INPUT); - pinMode(GPS_RESETB, INPUT); - pinMode(PIN_BUTTON1, INPUT); - - pinMode(PIN_3V3_EN, OUTPUT); - pinMode(PIN_3V3_ACC_EN, OUTPUT); - pinMode(BUZZER_EN, OUTPUT); - pinMode(SENSOR_EN, OUTPUT); - pinMode(GPS_EN, OUTPUT); - pinMode(GPS_RESET, OUTPUT); - pinMode(GPS_VRTC_EN, OUTPUT); - pinMode(GPS_SLEEP_INT, OUTPUT); - pinMode(GPS_RTC_INT, OUTPUT); - pinMode(LED_PIN, OUTPUT); - - digitalWrite(PIN_3V3_EN, LOW); - digitalWrite(PIN_3V3_ACC_EN, LOW); - digitalWrite(BUZZER_EN, LOW); - digitalWrite(SENSOR_EN, LOW); - digitalWrite(GPS_EN, LOW); - digitalWrite(GPS_RESET, LOW); - digitalWrite(GPS_VRTC_EN, LOW); - digitalWrite(GPS_SLEEP_INT, HIGH); - digitalWrite(GPS_RTC_INT, LOW); - digitalWrite(LED_PIN, LOW); -} diff --git a/variants/t1000-e/variant.h b/variants/t1000-e/variant.h deleted file mode 100644 index 458f12bc..00000000 --- a/variants/t1000-e/variant.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * variant.h - * Copyright (C) 2023 Seeed K.K. - * MIT License - */ - -#pragma once - -#include "WVariant.h" - -//////////////////////////////////////////////////////////////////////////////// -// Low frequency clock source - -#define USE_LFXO // 32.768 kHz crystal oscillator -#define VARIANT_MCK (64000000ul) -// #define USE_LFRC // 32.768 kHz RC oscillator - -//////////////////////////////////////////////////////////////////////////////// -// Power - -#define NRF_APM // detect usb power -#define PIN_3V3_EN (38) // P1.6 Power to Sensors - -#define BATTERY_PIN (2) // P0.2/AIN0 -#define BATTERY_IMMUTABLE -#define ADC_MULTIPLIER (2.0F) - -#define EXT_CHRG_DETECT (35) // P1.3 -#define EXT_PWR_DETECT (5) // P0.5 - -#define ADC_RESOLUTION (14) -#define BATTERY_SENSE_RES (12) - -#define AREF_VOLTAGE (3.0) - -//////////////////////////////////////////////////////////////////////////////// -// Number of pins - -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (6) -#define NUM_ANALOG_OUTPUTS (0) - -//////////////////////////////////////////////////////////////////////////////// -// UART pin definition - -#define PIN_SERIAL1_RX (14) // P0.14 -#define PIN_SERIAL1_TX (13) // P0.13 - -#define PIN_SERIAL2_RX (17) // P0.17 -#define PIN_SERIAL2_TX (16) // P0.16 - -//////////////////////////////////////////////////////////////////////////////// -// I2C pin definition - -#define HAS_WIRE (1) -#define WIRE_INTERFACES_COUNT (1) - -#define PIN_WIRE_SDA (26) // P0.26 -#define PIN_WIRE_SCL (27) // P0.27 -#define I2C_NO_RESCAN -#define HAS_QMA6100P -#define QMA_6100P_INT_PIN (34) // P1.2 - -//////////////////////////////////////////////////////////////////////////////// -// SPI pin definition - -#define SPI_INTERFACES_COUNT (1) - -#define PIN_SPI_MISO (40) // P1.8 -#define PIN_SPI_MOSI (41) // P1.9 -#define PIN_SPI_SCK (11) // P0.11 -#define PIN_SPI_NSS (12) // P0.12 - -//////////////////////////////////////////////////////////////////////////////// -// Builtin LEDs - -#define LED_BUILTIN (-1) -#define LED_BLUE (-1) // No blue led -#define LED_GREEN (24) // P0.24 -#define LED_PIN LED_GREEN - -#define LED_STATE_ON HIGH - -//////////////////////////////////////////////////////////////////////////////// -// Builtin buttons - -#define PIN_BUTTON1 (6) // P0.6 -#define BUTTON_PIN PIN_BUTTON1 - -//////////////////////////////////////////////////////////////////////////////// -// LR1110 - -#define LORA_DIO_1 (33) // P1.1 -#define LORA_NSS (PIN_SPI_NSS) // P0.12 -#define LORA_RESET (42) // P1.10 -#define LORA_BUSY (7) // P0.7 -#define LORA_SCLK (PIN_SPI_SCK) // P0.11 -#define LORA_MISO (PIN_SPI_MISO) // P1.8 -#define LORA_MOSI (PIN_SPI_MOSI) // P0.9 - -#define LR11X0_DIO_AS_RF_SWITCH true -#define LR11X0_DIO3_TCXO_VOLTAGE 1.6 - -//////////////////////////////////////////////////////////////////////////////// -// GPS - -#define HAS_GPS 1 -#define GPS_RX_PIN PIN_SERIAL1_RX -#define GPS_TX_PIN PIN_SERIAL1_TX - -#define GPS_EN (43) // P1.11 -#define GPS_RESET (47) // P1.15 - -#define GPS_VRTC_EN (8) // P0.8 -#define GPS_SLEEP_INT (44) // P1.12 -#define GPS_RTC_INT (15) // P0.15 -#define GPS_RESETB (46) // P1.14 - -//////////////////////////////////////////////////////////////////////////////// -// Temp+Lux Sensor - -#define SENSOR_EN (4) // P0.4 -#define TEMP_SENSOR (31) // P0.31/AIN7 -#define LUX_SENSOR (29) // P0.29/AIN5 - -//////////////////////////////////////////////////////////////////////////////// -// Accelerometer (I2C addr : ??? ) - -#define PIN_3V3_ACC_EN (39) // P1.7 - -//////////////////////////////////////////////////////////////////////////////// -// Buzzer - -#define BUZZER_EN (37) // P1.5 -#define BUZZER_PIN (25) // P0.25 \ No newline at end of file diff --git a/variants/tenstar_c3/platformio.ini b/variants/tenstar_c3/platformio.ini deleted file mode 100644 index 183a5684..00000000 --- a/variants/tenstar_c3/platformio.ini +++ /dev/null @@ -1,163 +0,0 @@ -[Tenstar_esp32_C3] -extends = esp32_base -board = esp32-c3-devkitm-1 -build_flags = - ${esp32_base.build_flags} - -I variants/tenstar_c3 - -D ESP32_CPU_FREQ=80 - -D LORA_TX_BOOST_PIN=4 - -D P_LORA_TX_NEOPIXEL_LED=10 - -D PIN_VBAT_READ=1 - -D P_LORA_MISO=9 - -D P_LORA_SCLK=8 - -D P_LORA_MOSI=7 - -D P_LORA_DIO_1=2 - -D P_LORA_NSS=6 - -D P_LORA_RESET=RADIOLIB_NC - -D P_LORA_BUSY=3 -; -D PIN_BOARD_SDA=18 -; -D PIN_BOARD_SCL=19 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 -build_src_filter = ${esp32_base.build_src_filter} - +<../variants/tenstar_c3> - -[env:Tenstar_C3_sx1262_repeater] -extends = Tenstar_esp32_C3 -build_src_filter = ${Tenstar_esp32_C3.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Tenstar_esp32_C3.build_flags} - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"Tenstar C3 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Tenstar_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - -; [env:Tenstar_C3_sx1262_repeater_bridge_rs232] -; extends = Tenstar_esp32_C3 -; build_src_filter = ${Tenstar_esp32_C3.build_src_filter} -; + -; +<../examples/simple_repeater/*.cpp> -; build_flags = -; ${Tenstar_esp32_C3.build_flags} -; -D RADIO_CLASS=CustomSX1262 -; -D WRAPPER_CLASS=CustomSX1262Wrapper -; -D SX126X_RX_BOOSTED_GAIN=1 -; -D LORA_TX_POWER=22 -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=50 -; -D WITH_RS232_BRIDGE=Serial2 -; -D WITH_RS232_BRIDGE_RX=5 -; -D WITH_RS232_BRIDGE_TX=6 -; -D BRIDGE_DEBUG=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; lib_deps = -; ${Tenstar_esp32_C3.lib_deps} -; ${esp32_ota.lib_deps} - -[env:Tenstar_C3_sx1262_repeater_bridge_espnow] -extends = Tenstar_esp32_C3 -build_src_filter = ${Tenstar_esp32_C3.build_src_filter} - + - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Tenstar_esp32_C3.build_flags} - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_ESPNOW_BRIDGE=1 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Tenstar_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - -[env:Tenstar_C3_sx1268_repeater] -extends = Tenstar_esp32_C3 -build_src_filter = ${Tenstar_esp32_C3.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Tenstar_esp32_C3.build_flags} - -D RADIO_CLASS=CustomSX1268 - -D WRAPPER_CLASS=CustomSX1268Wrapper - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"Tenstar C3 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -lib_deps = - ${Tenstar_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - -; [env:Tenstar_C3_sx1268_repeater_bridge_rs232] -; extends = Tenstar_esp32_C3 -; build_src_filter = ${Tenstar_esp32_C3.build_src_filter} -; + -; +<../examples/simple_repeater/*.cpp> -; build_flags = -; ${Tenstar_esp32_C3.build_flags} -; -D RADIO_CLASS=CustomSX1268 -; -D WRAPPER_CLASS=CustomSX1268Wrapper -; -D LORA_TX_POWER=22 -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=50 -; -D WITH_RS232_BRIDGE=Serial2 -; -D WITH_RS232_BRIDGE_RX=5 -; -D WITH_RS232_BRIDGE_TX=6 -; -D BRIDGE_DEBUG=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; lib_deps = -; ${Tenstar_esp32_C3.lib_deps} -; ${esp32_ota.lib_deps} - -[env:Tenstar_C3_sx1268_repeater_bridge_espnow] -extends = Tenstar_esp32_C3 -build_src_filter = ${Tenstar_esp32_C3.build_src_filter} - + - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Tenstar_esp32_C3.build_flags} - -D RADIO_CLASS=CustomSX1268 - -D WRAPPER_CLASS=CustomSX1268Wrapper - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_ESPNOW_BRIDGE=1 -; -D BRIDGE_DEBUG=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -lib_deps = - ${Tenstar_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} diff --git a/variants/tenstar_c3/target.cpp b/variants/tenstar_c3/target.cpp deleted file mode 100644 index a29780f0..00000000 --- a/variants/tenstar_c3/target.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include "target.h" - -XiaoC3Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - -#if defined(P_LORA_SCLK) - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/tenstar_c3/target.h b/variants/tenstar_c3/target.h deleted file mode 100644 index fa29e52b..00000000 --- a/variants/tenstar_c3/target.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include - -extern XiaoC3Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/thinknode_m1/ThinkNodeM1Board.cpp b/variants/thinknode_m1/ThinkNodeM1Board.cpp deleted file mode 100644 index 45449baf..00000000 --- a/variants/thinknode_m1/ThinkNodeM1Board.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -#include "ThinkNodeM1Board.h" - -#ifdef THINKNODE_M1 - -void ThinkNodeM1Board::begin() { - NRF52Board::begin(); - - Wire.begin(); - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, LOW); -#endif - - pinMode(SX126X_POWER_EN, OUTPUT); - digitalWrite(SX126X_POWER_EN, HIGH); - delay(10); // give sx1262 some time to power up -} - -uint16_t ThinkNodeM1Board::getBattMilliVolts() { - int adcvalue = 0; - - analogReference(AR_INTERNAL_3_0); - analogReadResolution(12); - delay(10); - - // ADC range is 0..3000mV and resolution is 12-bit (0..4095) - adcvalue = analogRead(PIN_VBAT_READ); - // Convert the raw value to compensated mv, taking the resistor- - // divider into account (providing the actual LIPO voltage) - return (uint16_t)((float)adcvalue * REAL_VBAT_MV_PER_LSB); -} -#endif diff --git a/variants/thinknode_m1/ThinkNodeM1Board.h b/variants/thinknode_m1/ThinkNodeM1Board.h deleted file mode 100644 index 500a0265..00000000 --- a/variants/thinknode_m1/ThinkNodeM1Board.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include -#include -#include - -// built-ins -#define VBAT_MV_PER_LSB (0.73242188F) // 3.0V ADC range and 12-bit ADC resolution = 3000mV/4096 - -#define VBAT_DIVIDER (0.5F) // 150K + 150K voltage divider on VBAT -#define VBAT_DIVIDER_COMP (2.0F) // Compensation factor for the VBAT divider - -#define PIN_VBAT_READ (4) -#define REAL_VBAT_MV_PER_LSB (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB) - -class ThinkNodeM1Board : public NRF52BoardOTA { -public: - ThinkNodeM1Board() : NRF52BoardOTA("THINKNODE_M1_OTA") {} - void begin(); - uint16_t getBattMilliVolts() override; - - #if defined(P_LORA_TX_LED) - void onBeforeTransmit() override { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - } - void onAfterTransmit() override { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - } - #endif - - const char* getManufacturerName() const override { - return "Elecrow ThinkNode-M1"; - } - - void powerOff() override { - - // turn off all leds, sd_power_system_off will not do this for us - #ifdef P_LORA_TX_LED - digitalWrite(P_LORA_TX_LED, LOW); - #endif - - // power off board - sd_power_system_off(); - - } -}; diff --git a/variants/thinknode_m1/platformio.ini b/variants/thinknode_m1/platformio.ini deleted file mode 100644 index 397bf8e3..00000000 --- a/variants/thinknode_m1/platformio.ini +++ /dev/null @@ -1,130 +0,0 @@ -[ThinkNode_M1] -extends = nrf52_base -board = thinknode_m1 -board_build.ldscript = boards/nrf52840_s140_v6.ld -build_flags = ${nrf52_base.build_flags} - -I src/helpers/nrf52 - -I lib/nrf52/s140_nrf52_6.1.1_API/include - -I lib/nrf52/s140_nrf52_6.1.1_API/include/nrf52 - -I variants/thinknode_m1 - -D THINKNODE_M1=1 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=20 - -D P_LORA_NSS=24 - -D P_LORA_RESET=25 - -D P_LORA_BUSY=17 - -D P_LORA_SCLK=19 - -D P_LORA_MISO=23 - -D P_LORA_MOSI=22 - -D SX126X_POWER_EN=37 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 - -D P_LORA_TX_LED=13 -build_src_filter = ${nrf52_base.build_src_filter} - + - + - +<../variants/thinknode_m1> -lib_deps = - ${nrf52_base.lib_deps} - stevemarple/MicroNMEA @ ^2.0.6 -debug_tool = jlink -upload_protocol = nrfutil - -[env:ThinkNode_M1_repeater] -extends = ThinkNode_M1 -build_flags = - ${ThinkNode_M1.build_flags} - -D ADVERT_NAME='"ThinkNode Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M1.build_src_filter} - +<../examples/simple_repeater/*.cpp> -lib_deps = - ${ThinkNode_M1.lib_deps} - -[env:ThinkNode_M1_room_server] -extends = ThinkNode_M1 -build_flags = - ${ThinkNode_M1.build_flags} - -D ADVERT_NAME='"ThinkNode Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M1.build_src_filter} - +<../examples/simple_room_server/*.cpp> -lib_deps = - ${ThinkNode_M1.lib_deps} - -[env:ThinkNode_M1_companion_radio_ble] -extends = ThinkNode_M1 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${ThinkNode_M1.build_flags} - -I src/helpers/ui - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D DISPLAY_ROTATION=4 - -D DISPLAY_CLASS=GxEPDDisplay - -D OFFLINE_QUEUE_SIZE=256 - -D PIN_BUZZER=6 - -D AUTO_SHUTDOWN_MILLIVOLTS=3300 - -D QSPIFLASH=1 - -D ENV_INCLUDE_GPS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M1.build_src_filter} - + - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${ThinkNode_M1.lib_deps} - densaugeo/base64 @ ~1.4.0 - zinggjm/GxEPD2 @ 1.6.2 - bakercp/CRC32 @ ^2.0.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M1_companion_radio_usb] -extends = ThinkNode_M1 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${ThinkNode_M1.build_flags} - -I src/helpers/ui - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_ROTATION=4 - -D QSPIFLASH=1 - -D DISPLAY_CLASS=GxEPDDisplay - -D OFFLINE_QUEUE_SIZE=256 - -D PIN_BUZZER=6 - -D AUTO_SHUTDOWN_MILLIVOLTS=3300 -build_src_filter = ${ThinkNode_M1.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${ThinkNode_M1.lib_deps} - densaugeo/base64 @ ~1.4.0 - zinggjm/GxEPD2 @ 1.6.2 - bakercp/CRC32 @ ^2.0.0 - end2endzone/NonBlockingRTTTL@^1.3.0 \ No newline at end of file diff --git a/variants/thinknode_m1/target.cpp b/variants/thinknode_m1/target.cpp deleted file mode 100644 index c3b1abc2..00000000 --- a/variants/thinknode_m1/target.cpp +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include "target.h" -#include -#include - -ThinkNodeM1Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); -ThinkNodeM1SensorManager sensors = ThinkNodeM1SensorManager(nmea); - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - -void ThinkNodeM1SensorManager::start_gps() { - if (!gps_active) { - gps_active = true; - _location->begin(); - } -} - -void ThinkNodeM1SensorManager::stop_gps() { - if (gps_active) { - gps_active = false; - _location->stop(); - } -} - -bool ThinkNodeM1SensorManager::begin() { - Serial1.begin(9600); - - // Initialize GPS switch pin - pinMode(PIN_GPS_SWITCH, INPUT); - last_gps_switch_state = digitalRead(PIN_GPS_SWITCH); - - // Initialize GPS power pin - pinMode(GPS_EN, OUTPUT); - - // Check initial switch state to determine if GPS should be active - if (last_gps_switch_state == HIGH) { // Switch is HIGH when ON - start_gps(); - } - - return true; -} - -bool ThinkNodeM1SensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { - if (requester_permissions & TELEM_PERM_LOCATION) { // does requester have permission? - telemetry.addGPS(TELEM_CHANNEL_SELF, node_lat, node_lon, node_altitude); - } - return true; -} - -void ThinkNodeM1SensorManager::loop() { - static long next_gps_update = 0; - static long last_switch_check = 0; - - // Check GPS switch state every second - if (millis() - last_switch_check > 1000) { - bool current_switch_state = digitalRead(PIN_GPS_SWITCH); - - // Detect switch state change - if (current_switch_state != last_gps_switch_state) { - last_gps_switch_state = current_switch_state; - - if (current_switch_state == HIGH) { // Switch is ON - MESH_DEBUG_PRINTLN("GPS switch ON"); - start_gps(); - } else { // Switch is OFF - MESH_DEBUG_PRINTLN("GPS switch OFF"); - stop_gps(); - } - } - - last_switch_check = millis(); - } - - if (!gps_active) { - return; // GPS is not active, skip further processing - } - - _location->loop(); - - if (millis() > next_gps_update) { - if (_location->isValid()) { - node_lat = ((double)_location->getLatitude())/1000000.; - node_lon = ((double)_location->getLongitude())/1000000.; - node_altitude = ((double)_location->getAltitude()) / 1000.0; - MESH_DEBUG_PRINTLN("lat %f lon %f", node_lat, node_lon); - } - next_gps_update = millis() + 1000; - } -} - -int ThinkNodeM1SensorManager::getNumSettings() const { - return 1; // always show GPS setting -} - -const char* ThinkNodeM1SensorManager::getSettingName(int i) const { - return (i == 0) ? "gps" : NULL; -} - -const char* ThinkNodeM1SensorManager::getSettingValue(int i) const { - if (i == 0) { - return gps_active ? "1" : "0"; - } - return NULL; -} - -bool ThinkNodeM1SensorManager::setSettingValue(const char* name, const char* value) { - if (strcmp(name, "gps") == 0) { - if (strcmp(value, "0") == 0) { - stop_gps(); - } else { - start_gps(); - } - return true; - } - return false; // not supported -} diff --git a/variants/thinknode_m1/target.h b/variants/thinknode_m1/target.h deleted file mode 100644 index 8425369d..00000000 --- a/variants/thinknode_m1/target.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include - #include -#endif - -class ThinkNodeM1SensorManager : public SensorManager { - bool gps_active = false; - bool last_gps_switch_state = false; - LocationProvider* _location; - - void start_gps(); - void stop_gps(); -public: - ThinkNodeM1SensorManager(LocationProvider &location): _location(&location) { } - LocationProvider* getLocationProvider() override { return _location; } - bool begin() override; - bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override; - void loop() override; - int getNumSettings() const override; - const char* getSettingName(int i) const override; - const char* getSettingValue(int i) const override; - bool setSettingValue(const char* name, const char* value) override; -}; - -extern ThinkNodeM1Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern ThinkNodeM1SensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/thinknode_m1/variant.cpp b/variants/thinknode_m1/variant.cpp deleted file mode 100644 index 155aa42d..00000000 --- a/variants/thinknode_m1/variant.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" - -const int MISO = PIN_SPI1_MISO; -const int MOSI = PIN_SPI1_MOSI; -const int SCK = PIN_SPI1_SCK; - -const uint32_t g_ADigitalPinMap[] = { - 0xff, 0xff, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47 -}; - -void initVariant() { - pinMode(PIN_PWR_EN, OUTPUT); - digitalWrite(PIN_PWR_EN, HIGH); - - pinMode(PIN_BUTTON1, INPUT_PULLUP); - pinMode(PIN_BUTTON2, INPUT_PULLUP); - - pinMode(LED_RED, OUTPUT); - pinMode(LED_GREEN, OUTPUT); - pinMode(LED_BLUE, OUTPUT); - digitalWrite(LED_BLUE, HIGH); - - pinMode(PIN_TXCO, OUTPUT); - digitalWrite(PIN_TXCO, HIGH); - - // shutdown gps - pinMode(PIN_GPS_STANDBY, OUTPUT); - digitalWrite(PIN_GPS_STANDBY, LOW); -} diff --git a/variants/thinknode_m1/variant.h b/variants/thinknode_m1/variant.h deleted file mode 100644 index f7f52a6a..00000000 --- a/variants/thinknode_m1/variant.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * variant.h - * Copyright (C) 2023 Seeed K.K. - * MIT License - */ - -#pragma once - -#include "WVariant.h" - -//////////////////////////////////////////////////////////////////////////////// -// Low frequency clock source - -#define USE_LFXO // 32.768 kHz crystal oscillator -#define VARIANT_MCK (64000000ul) - -#define WIRE_INTERFACES_COUNT (1) -#define PIN_TXCO (21) -//////////////////////////////////////////////////////////////////////////////// -// Power - -#define PIN_PWR_EN (12) - -#define BATTERY_PIN (4) -#define ADC_MULTIPLIER (4.90F) - -#define ADC_RESOLUTION (14) -#define BATTERY_SENSE_RES (12) - -#define AREF_VOLTAGE (3.0) - -//////////////////////////////////////////////////////////////////////////////// -// Number of pins - -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (1) -#define NUM_ANALOG_OUTPUTS (0) - -//////////////////////////////////////////////////////////////////////////////// -// UART pin definition - -#define PIN_SERIAL1_RX PIN_GPS_TX -#define PIN_SERIAL1_TX PIN_GPS_RX -//////////////////////////////////////////////////////////////////////////////// -// I2C pin definition - -#define PIN_WIRE_SDA (26) // P0.26 -#define PIN_WIRE_SCL (27) // P0.27 - -//////////////////////////////////////////////////////////////////////////////// -// SPI pin definition - -#define SPI_INTERFACES_COUNT (2) - -#define PIN_SPI_MISO (23) -#define PIN_SPI_MOSI (22) -#define PIN_SPI_SCK (19) -#define PIN_SPI_NSS (24) - -//////////////////////////////////////////////////////////////////////////////// -// Builtin LEDs - -#define LED_RED (38) -#define LED_GREEN (36) -#define LED_BLUE (14) - -#define PIN_STATUS_LED LED_GREEN -#define LED_BUILTIN LED_GREEN -#define PIN_LED LED_BUILTIN -#define LED_PIN LED_BUILTIN -#define LED_STATE_ON LOW - -#define PIN_NEOPIXEL (14) -#define NEOPIXEL_NUM (2) - -//////////////////////////////////////////////////////////////////////////////// -// Builtin buttons - -#define PIN_BUTTON1 (42) -#define BUTTON_PIN PIN_BUTTON1 -#define PIN_USER_BTN BUTTON_PIN - -#define PIN_BUTTON2 (11) -#define BUTTON_PIN2 PIN_BUTTON2 - -#define EXTERNAL_FLASH_DEVICES MX25R1635F -#define EXTERNAL_FLASH_USE_QSPI - -//////////////////////////////////////////////////////////////////////////////// -// Lora - -#define USE_SX1262 -#define LORA_CS (24) -#define SX126X_DIO1 (20) -#define SX126X_BUSY (17) -#define SX126X_RESET (25) -#define SX126X_DIO2_AS_RF_SWITCH -#define SX126X_DIO3_TCXO_VOLTAGE 1.8 - -//////////////////////////////////////////////////////////////////////////////// -// SPI1 - -#define PIN_SPI1_MISO (38) -#define PIN_SPI1_MOSI (29) -#define PIN_SPI1_SCK (31) - -// GxEPD2 needs that for a panel that is not even used ! -extern const int MISO; -extern const int MOSI; -extern const int SCK; - -//////////////////////////////////////////////////////////////////////////////// -// QSPI -#define PIN_QSPI_SCK (46) -#define PIN_QSPI_CS (47) -#define PIN_QSPI_IO0 (44) // MOSI if using two bit interface -#define PIN_QSPI_IO1 (45) // MISO if using two bit interface -#define PIN_QSPI_IO2 (7) // WP if using two bit interface (i.e. not used) -#define PIN_QSPI_IO3 (5) // HOLD if using two bit interface (i.e. not used) - -//////////////////////////////////////////////////////////////////////////////// -// Display - -#define DISP_MISO (38) -#define DISP_MOSI (29) -#define DISP_SCLK (31) -#define DISP_CS (30) -#define DISP_DC (28) -#define DISP_RST (2) -#define DISP_BUSY (3) -#define DISP_BACKLIGHT (43) - -//////////////////////////////////////////////////////////////////////////////// -// GPS - -#define PIN_GPS_RX (40) -#define PIN_GPS_TX (41) -#define GPS_EN (34) -#define PIN_GPS_RESET (37) -#define PIN_GPS_PPS (36) -#define PIN_GPS_STANDBY (34) -#define PIN_GPS_SWITCH (33) diff --git a/variants/thinknode_m2/ThinknodeM2Board.cpp b/variants/thinknode_m2/ThinknodeM2Board.cpp deleted file mode 100644 index 05965103..00000000 --- a/variants/thinknode_m2/ThinknodeM2Board.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "ThinknodeM2Board.h" - - - -void ThinknodeM2Board::begin() { - pinMode(PIN_VEXT_EN, OUTPUT); - digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // force power cycle - delay(20); // allow power rail to discharge - digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // turn backlight back on - delay(120); // give display time to bias on cold boot - ESP32Board::begin(); - pinMode(PIN_STATUS_LED, OUTPUT); // init power led - } - - void ThinknodeM2Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) { - esp_deep_sleep_start(); - } - - void ThinknodeM2Board::powerOff() { - enterDeepSleep(0); - } - - uint16_t ThinknodeM2Board::getBattMilliVolts() { - analogReadResolution(12); - analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db); - - uint32_t mv = 0; - for (int i = 0; i < 8; ++i) { - mv += analogReadMilliVolts(PIN_VBAT_READ); - delayMicroseconds(200); - } - mv /= 8; - - analogReadResolution(10); - return static_cast(mv * ADC_MULTIPLIER ); -} - - const char* ThinknodeM2Board::getManufacturerName() const { - return "Elecrow ThinkNode M2"; - } diff --git a/variants/thinknode_m2/ThinknodeM2Board.h b/variants/thinknode_m2/ThinknodeM2Board.h deleted file mode 100644 index 8011fae6..00000000 --- a/variants/thinknode_m2/ThinknodeM2Board.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -class ThinknodeM2Board : public ESP32Board { - -public: - - void begin(); - void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1); - void powerOff() override; - uint16_t getBattMilliVolts() override; - const char* getManufacturerName() const override ; - -}; \ No newline at end of file diff --git a/variants/thinknode_m2/pins_arduino.h b/variants/thinknode_m2/pins_arduino.h deleted file mode 100644 index a5dee363..00000000 --- a/variants/thinknode_m2/pins_arduino.h +++ /dev/null @@ -1,28 +0,0 @@ -// Need this file for ESP32-S3 -// No need to modify this file, changes to pins imported from variant.h -// Most is similar to https://github.com/espressif/arduino-esp32/blob/master/variants/esp32s3/pins_arduino.h - -#ifndef Pins_Arduino_h -#define Pins_Arduino_h - -#include -#include - -#define USB_VID 0x303a -#define USB_PID 0x1001 - -// Serial -static const uint8_t TX = GPS_TX; -static const uint8_t RX = GPS_RX; - -// Default SPI will be mapped to Radio -static const uint8_t SS = P_LORA_NSS; -static const uint8_t SCK = P_LORA_SCLK; -static const uint8_t MOSI = P_LORA_MISO; -static const uint8_t MISO = P_LORA_MOSI; - -// The default Wire will be mapped to PMU and RTC -static const uint8_t SCL = PIN_BOARD_SCL; -static const uint8_t SDA = PIN_BOARD_SDA; - -#endif /* Pins_Arduino_h */ \ No newline at end of file diff --git a/variants/thinknode_m2/platformio.ini b/variants/thinknode_m2/platformio.ini deleted file mode 100644 index b2ebca73..00000000 --- a/variants/thinknode_m2/platformio.ini +++ /dev/null @@ -1,210 +0,0 @@ -[ThinkNode_M2] -extends = esp32_base -board = ESP32-S3-WROOM-1-N4 -build_flags = ${esp32_base.build_flags} - -I variants/thinknode_m2 - -D THINKNODE_M2 - -D GPS_RX=44 - -D GPS_TX=43 - -D PIN_VEXT_EN=46 - -D PIN_BUZZER=5 - -D PIN_VEXT_EN_ACTIVE=HIGH - -D PIN_BOARD_SCL=15 - -D PIN_BOARD_SDA=16 - -D P_LORA_DIO_1=3 - -D P_LORA_NSS=10 - -D P_LORA_RESET=21 ; RADIOLIB_NC - -D P_LORA_BUSY=14 ; DIO2 = 38 - -D P_LORA_SCLK=12 - -D P_LORA_MISO=13 - -D P_LORA_MOSI=11 - -D PIN_USER_BTN=47 - -D PIN_STATUS_LED=6 - -D PIN_LED=6 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=3.3 - -D SX126X_CURRENT_LIMIT=140 - -D DISPLAY_CLASS=SH1106Display - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_RX_BOOSTED_GAIN=1 - -D MESH_DEBUG=1 -build_src_filter = ${esp32_base.build_src_filter} - + - + - + - +<../variants/thinknode_m2> -lib_deps = ${esp32_base.lib_deps} - adafruit/Adafruit SH110X @ ~2.1.13 - adafruit/Adafruit GFX Library @ ^1.12.1 - -[env:ThinkNode_M2_Repeater] -extends = ThinkNode_M2 -build_src_filter = ${ThinkNode_M2.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${ThinkNode_M2.build_flags} - -D ADVERT_NAME='"Thinknode M2 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=8 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${ThinkNode_M2.lib_deps} - ${esp32_ota.lib_deps} - -; [env:ThinkNode_M2_Repeater_bridge_rs232] -; extends = ThinkNode_M2 -; build_src_filter = ${ThinkNode_M2.build_src_filter} -; + -; +<../examples/simple_repeater/*.cpp> -; build_flags = -; ${ThinkNode_M2.build_flags} -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=8 -; -D WITH_RS232_BRIDGE=Serial2 -; -D WITH_RS232_BRIDGE_RX=5 -; -D WITH_RS232_BRIDGE_TX=6 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; lib_deps = -; ${ThinkNode_M2.lib_deps} -; ${esp32_ota.lib_deps} - -[env:ThinkNode_M2_Repeater_bridge_espnow] -extends = ThinkNode_M2 -build_src_filter = ${ThinkNode_M2.build_src_filter} - + - +<../examples/simple_repeater/*.cpp> -build_flags = - ${ThinkNode_M2.build_flags} - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=8 - -D WITH_ESPNOW_BRIDGE=1 - -D WITH_ESPNOW_BRIDGE_SECRET='"shared-secret"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${ThinkNode_M2.lib_deps} - ${esp32_ota.lib_deps} - -[env:ThinkNode_M2_room_server] -extends = ThinkNode_M2 -build_src_filter = ${ThinkNode_M2.build_src_filter} - +<../examples/simple_room_server> -build_flags = - ${ThinkNode_M2.build_flags} - -D ADVERT_NAME='"Thinknode M2 Room Server"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${ThinkNode_M2.lib_deps} - ${esp32_ota.lib_deps} - -[env:ThinkNode_M2_terminal_chat] -extends = ThinkNode_M2 -build_flags = - ${ThinkNode_M2.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M2.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = - ${ThinkNode_M2.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:ThinkNode_M2_companion_radio_ble] -extends = ThinkNode_M2 -build_flags = - ${ThinkNode_M2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M2.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${ThinkNode_M2.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M2_companion_radio_usb] -extends = ThinkNode_M2 -build_flags = - ${ThinkNode_M2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 -build_src_filter = ${ThinkNode_M2.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${ThinkNode_M2.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M2_companion_radio_wifi] -extends = ThinkNode_M2 -build_flags = - ${ThinkNode_M2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 - -D WIFI_DEBUG_LOGGING=1 - -D WIFI_SSID='"myssid"' - -D WIFI_PWD='"mypwd"' -build_src_filter = ${ThinkNode_M2.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${ThinkNode_M2.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M2_companion_radio_serial] -extends = ThinkNode_M2 -build_flags = - ${ThinkNode_M2.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D SERIAL_TX=D6 - -D SERIAL_RX=D7 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M2.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${ThinkNode_M2.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/thinknode_m2/target.cpp b/variants/thinknode_m2/target.cpp deleted file mode 100644 index cb3c1624..00000000 --- a/variants/thinknode_m2/target.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include "target.h" - -ThinknodeM2Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - pinMode(21, INPUT); - pinMode(48, OUTPUT); - #if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - diff --git a/variants/thinknode_m2/target.h b/variants/thinknode_m2/target.h deleted file mode 100644 index b05def8a..00000000 --- a/variants/thinknode_m2/target.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -//#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include - #include -#endif - -extern ThinknodeM2Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); - - \ No newline at end of file diff --git a/variants/thinknode_m2/variant.h b/variants/thinknode_m2/variant.h deleted file mode 100644 index 223bfbb5..00000000 --- a/variants/thinknode_m2/variant.h +++ /dev/null @@ -1,12 +0,0 @@ -#define I2C_SCL 15 -#define I2C_SDA 16 -#define PIN_VBAT_READ 17 -#define AREF_VOLTAGE (3.0) -#define ADC_MULTIPLIER (1.509F) -#define PIN_BUZZER 5 -#define PIN_VEXT_EN_ACTIVE HIGH -#define PIN_VEXT_EN 46 -#define PIN_USER_BTN 47 -#define PIN_LED 6 -#define PIN_STATUS_LED 6 -#define PIN_PWRBTN 4 diff --git a/variants/thinknode_m3/ThinknodeM3Board.cpp b/variants/thinknode_m3/ThinknodeM3Board.cpp deleted file mode 100644 index 74019fcb..00000000 --- a/variants/thinknode_m3/ThinknodeM3Board.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include "ThinknodeM3Board.h" -#include - -#include - -void ThinknodeM3Board::begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - btn_prev_state = HIGH; - - sd_power_mode_set(NRF_POWER_MODE_LOWPWR); - - // Enable DC/DC converter for improved power efficiency - NRF_POWER->DCDCEN = 1; - - Wire.begin(); - - delay(10); // give sx1262 some time to power up -} - -#if 0 -static BLEDfu bledfu; - -static void connect_callback(uint16_t conn_handle) { - (void)conn_handle; - MESH_DEBUG_PRINTLN("BLE client connected"); -} - -static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { - (void)conn_handle; - (void)reason; - - MESH_DEBUG_PRINTLN("BLE client disconnected"); -} - - -bool TrackerThinknodeM3Board::startOTAUpdate(const char* id, char reply[]) { - // Config the peripheral connection with maximum bandwidth - // more SRAM required by SoftDevice - // Note: All config***() function must be called before begin() - Bluefruit.configPrphBandwidth(BANDWIDTH_MAX); - Bluefruit.configPrphConn(92, BLE_GAP_EVENT_LENGTH_MIN, 16, 16); - - Bluefruit.begin(1, 0); - // Set max power. Accepted values are: -40, -30, -20, -16, -12, -8, -4, 0, 4 - Bluefruit.setTxPower(4); - // Set the BLE device name - Bluefruit.setName("T1000E_OTA"); - - Bluefruit.Periph.setConnectCallback(connect_callback); - Bluefruit.Periph.setDisconnectCallback(disconnect_callback); - - // To be consistent OTA DFU should be added first if it exists - bledfu.begin(); - - // Set up and start advertising - // Advertising packet - Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); - Bluefruit.Advertising.addTxPower(); - Bluefruit.Advertising.addName(); - - /* Start Advertising - - Enable auto advertising if disconnected - - Interval: fast mode = 20 ms, slow mode = 152.5 ms - - Timeout for fast mode is 30 seconds - - Start(timeout) with timeout = 0 will advertise forever (until connected) - - For recommended advertising interval - https://developer.apple.com/library/content/qa/qa1931/_index.html - */ - Bluefruit.Advertising.restartOnDisconnect(true); - Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms - Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode - Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds - - strcpy(reply, "OK - started"); - return true; -} -#endif \ No newline at end of file diff --git a/variants/thinknode_m3/ThinknodeM3Board.h b/variants/thinknode_m3/ThinknodeM3Board.h deleted file mode 100644 index c9b96273..00000000 --- a/variants/thinknode_m3/ThinknodeM3Board.h +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include -#include - -#define ADC_FACTOR ((1000.0*ADC_MULTIPLIER*AREF_VOLTAGE)/ADC_MAX) - -class ThinknodeM3Board : public mesh::MainBoard { -protected: - uint8_t startup_reason; - uint8_t btn_prev_state; - -public: - void begin(); - - uint16_t getBattMilliVolts() override { - int adcvalue = 0; - - analogReference(AR_INTERNAL_2_4); - analogReadResolution(ADC_RESOLUTION); - delay(10); - - // ADC range is 0..2400mV and resolution is 12-bit (0..4095) - adcvalue = analogRead(PIN_VBAT_READ); - // Convert the raw value to compensated mv, taking the resistor- - // divider into account (providing the actual LIPO voltage) - return (uint16_t)((float)adcvalue * ADC_FACTOR); - } - - uint8_t getStartupReason() const override { return startup_reason; } - - #if defined(P_LORA_TX_LED) - #if !defined(P_LORA_TX_LED_ON) - #define P_LORA_TX_LED_ON HIGH - #endif - void onBeforeTransmit() override { - digitalWrite(P_LORA_TX_LED, P_LORA_TX_LED_ON); // turn TX LED on - } - void onAfterTransmit() override { - digitalWrite(P_LORA_TX_LED, !P_LORA_TX_LED_ON); // turn TX LED off - } - #endif - - const char* getManufacturerName() const override { - return "Elecrow ThinkNode M3"; - } - - int buttonStateChanged() { - #ifdef BUTTON_PIN - uint8_t v = digitalRead(BUTTON_PIN); - if (v != btn_prev_state) { - btn_prev_state = v; - return (v == LOW) ? 1 : -1; - } - #endif - return 0; - } - - void powerOff() override { - sd_power_system_off(); - } - - void reboot() override { - NVIC_SystemReset(); - } - -// bool startOTAUpdate(const char* id, char reply[]) override; -}; \ No newline at end of file diff --git a/variants/thinknode_m3/platformio.ini b/variants/thinknode_m3/platformio.ini deleted file mode 100644 index 8ef2ba54..00000000 --- a/variants/thinknode_m3/platformio.ini +++ /dev/null @@ -1,122 +0,0 @@ -[ThinkNode_M3] -extends = nrf52_base -board = thinknode_m3 -board_build.ldscript = boards/nrf52840_s140_v6.ld -build_flags = ${nrf52_base.build_flags} - -I src/helpers/nrf52 - -I lib/nrf52/s140_nrf52_6.1.1_API/include - -I lib/nrf52/s140_nrf52_6.1.1_API/include/nrf52 - -I variants/thinknode_m3 - -I src/helpers/ui - -D THINKNODE_M3 - -D PIN_USER_BTN=12 - -D USER_BTN_PRESSED=LOW - -D PIN_STATUS_LED=35 - -D RADIO_CLASS=CustomLR1110 - -D WRAPPER_CLASS=CustomLR1110Wrapper - -D LORA_TX_POWER=22 - -D RF_SWITCH_TABLE - -D RX_BOOSTED_GAIN=true - -D P_LORA_BUSY=43 - -D P_LORA_SCLK=45 - -D P_LORA_NSS=44 - -D P_LORA_DIO_1=40 - -D P_LORA_MISO=47 - -D P_LORA_MOSI=46 - -D P_LORA_RESET=42 - -D P_LORA_TX_LED=PIN_LED_BLUE - -D P_LORA_TX_LED_ON=LOW - -D LR11X0_DIO_AS_RF_SWITCH=true - -D LR11X0_DIO3_TCXO_VOLTAGE=3.3 - -D MESH_DEBUG=1 - -D ENV_INCLUDE_GPS=1 -build_src_filter = ${nrf52_base.build_src_filter} - + - +<../variants/thinknode_m3> - + -debug_tool = stlink -upload_protocol = nrfutil -lib_deps= ${nrf52_base.lib_deps} - -[env:ThinkNode_M3_repeater] -extends = ThinkNode_M3 -build_flags = ${ThinkNode_M3.build_flags} - -I examples/companion_radio/ui-orig - -D ADVERT_NAME='"ThinkNode_M3 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M3.build_src_filter} - +<../examples/simple_repeater> -lib_deps = ${ThinkNode_M3.lib_deps} - stevemarple/MicroNMEA @ ^2.0.6 - -[env:ThinkNode_M3_room_server] -extends = ThinkNode_M3 -build_flags = ${ThinkNode_M3.build_flags} - -I examples/companion_radio/ui-orig - -D ADVERT_NAME='"ThinkNode_M3 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 - -D RF_SWITCH_TABLE -build_src_filter = ${ThinkNode_M3.build_src_filter} - +<../examples/simple_room_server> -lib_deps = ${ThinkNode_M3.lib_deps} - stevemarple/MicroNMEA @ ^2.0.6 - -[env:ThinkNode_M3_companion_radio_usb] -extends = ThinkNode_M3 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${ThinkNode_M3.build_flags} - -I examples/companion_radio/ui-orig - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=NullDisplayDriver - -D PIN_BUZZER=23 - -D PIN_BUZZER_EN=36 -build_src_filter = ${ThinkNode_M3.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = ${ThinkNode_M3.lib_deps} - densaugeo/base64 @ ~1.4.0 - stevemarple/MicroNMEA @ ^2.0.6 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M3_companion_radio_ble] -extends = ThinkNode_M3 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${ThinkNode_M3.build_flags} - -I examples/companion_radio/ui-orig - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_TX_POWER=0 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 - -D GPS_NMEA_DEBUG - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=NullDisplayDriver - -D PIN_BUZZER=23 - -D PIN_BUZZER_EN=36 -build_src_filter = ${ThinkNode_M3.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = ${ThinkNode_M3.lib_deps} - densaugeo/base64 @ ~1.4.0 - stevemarple/MicroNMEA @ ^2.0.6 - end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/variants/thinknode_m3/target.cpp b/variants/thinknode_m3/target.cpp deleted file mode 100644 index c6708e4d..00000000 --- a/variants/thinknode_m3/target.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include "target.h" -#include - -ThinknodeM3Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -#ifdef ENV_INCLUDE_GPS -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); -EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else -EnvironmentSensorManager sensors = EnvironmentSensorManager(); -#endif - -#ifdef DISPLAY_CLASS - NullDisplayDriver display; -#endif - -#ifndef LORA_CR - #define LORA_CR 5 -#endif - -#ifdef RF_SWITCH_TABLE -static const uint32_t rfswitch_dios[Module::RFSWITCH_MAX_PINS] = { - RADIOLIB_LR11X0_DIO5, - RADIOLIB_LR11X0_DIO6, - RADIOLIB_NC, - RADIOLIB_NC, - RADIOLIB_NC -}; - -static const Module::RfSwitchMode_t rfswitch_table[] = { - // mode DIO5 DIO6 - { LR11x0::MODE_STBY, {LOW , LOW }}, - { LR11x0::MODE_RX, {HIGH, LOW }}, - { LR11x0::MODE_TX, {HIGH, HIGH }}, - { LR11x0::MODE_TX_HP, {LOW , HIGH }}, - { LR11x0::MODE_TX_HF, {LOW , LOW }}, - { LR11x0::MODE_GNSS, {LOW , LOW }}, - { LR11x0::MODE_WIFI, {LOW , LOW }}, - END_OF_MODE_TABLE, -}; -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - -#ifdef LR11X0_DIO3_TCXO_VOLTAGE - float tcxo = LR11X0_DIO3_TCXO_VOLTAGE; -#else - float tcxo = 1.6f; -#endif - - SPI.setPins(P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); - SPI.begin(); - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_LR11X0_LORA_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo); - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - - radio.setCRC(2); - radio.explicitHeader(); - -#ifdef RF_SWITCH_TABLE - radio.setRfSwitchTable(rfswitch_dios, rfswitch_table); -#endif -#ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); -#endif - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} \ No newline at end of file diff --git a/variants/thinknode_m3/target.h b/variants/thinknode_m3/target.h deleted file mode 100644 index f60a85b0..00000000 --- a/variants/thinknode_m3/target.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include "ThinknodeM3Board.h" -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include "NullDisplayDriver.h" -#endif - -#ifdef DISPLAY_CLASS - extern NullDisplayDriver display; -#endif - -extern ThinknodeM3Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/thinknode_m3/variant.cpp b/variants/thinknode_m3/variant.cpp deleted file mode 100644 index dad0f3f5..00000000 --- a/variants/thinknode_m3/variant.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * variant.cpp - * Copyright (C) 2023 Seeed K.K. - * MIT License - */ - -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" - -const uint32_t g_ADigitalPinMap[] = -{ - 0, // P0.00 - 1, // P0.01 - 2, // P0.02 - 3, // P0.03 - 4, // P0.04 - 5, // P0.05 - 6, // P0.06 - 7, // P0.07 - 8, // P0.08 - 9, // P0.09 - 10, // P0.10 - 11, // P0.11 - 12, // P0.12 - 13, // P0.13 - 14, // P0.14 - 15, // P0.15 - 16, // P0.16 - 17, // P0.17 - 18, // P0.18 - 19, // P0.19 - 20, // P0.20 - 21, // P0.21 - 22, // P0.22 - 23, // P0.23 - 24, // P0.24 - 25, // P0.25 - 26, // P0.26 - 27, // P0.27 - 28, // P0.28 - 29, // P0.29 - 30, // P0.30 - 31, // P0.31 - 32, // P1.00 - 33, // P1.01 - 34, // P1.02 - 35, // P1.03 - 36, // P1.04 - 37, // P1.05 - 38, // P1.06 - 39, // P1.07 - 40, // P1.08 - 41, // P1.09 - 42, // P1.10 - 43, // P1.11 - 44, // P1.12 - 45, // P1.13 - 46, // P1.14 - 47, // P1.15 -}; - -void initVariant() -{ -/* TODO */ - pinMode(PIN_PWR_EN, OUTPUT); - digitalWrite(PIN_PWR_EN, HIGH); - - pinMode(BAT_POWER, OUTPUT); - digitalWrite(BAT_POWER, HIGH); - pinMode(EEPROM_POWER, OUTPUT); - digitalWrite(EEPROM_POWER, HIGH); - - pinMode(36, OUTPUT); - digitalWrite(36, HIGH); - pinMode(34, OUTPUT); - digitalWrite(34, HIGH); - - pinMode(LED_POWER, OUTPUT); - digitalWrite(LED_POWER, HIGH); - - pinMode(PIN_LED_BLUE, OUTPUT); - pinMode(PIN_LED_GREEN, OUTPUT); - pinMode(PIN_LED_RED, OUTPUT); - - pinMode(BUTTON_PIN, INPUT_PULLUP); - - pinMode(PIN_GPS_POWER, OUTPUT); - pinMode(PIN_GPS_EN, OUTPUT); - pinMode(PIN_GPS_RESET, OUTPUT); - - // Power on gps but in standby - digitalWrite(PIN_GPS_EN, LOW); - digitalWrite(PIN_GPS_POWER, HIGH); -} diff --git a/variants/thinknode_m3/variant.h b/variants/thinknode_m3/variant.h deleted file mode 100644 index 02ed78a8..00000000 --- a/variants/thinknode_m3/variant.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * variant.h - * Copyright (C) 2023 Seeed K.K. - * MIT License - */ - -#pragma once - -#include "WVariant.h" - -//////////////////////////////////////////////////////////////////////////////// -// Low frequency clock source - -#define USE_LFXO // 32.768 kHz crystal oscillator -#define VARIANT_MCK (64000000ul) -// #define USE_LFRC // 32.768 kHz RC oscillator - -//////////////////////////////////////////////////////////////////////////////// -// Number of pins - -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (1) -#define NUM_ANALOG_OUTPUTS (0) - -//////////////////////////////////////////////////////////////////////////////// -// Power - -#define NRF_APM // detect usb power - - -#define EXT_CHRG_DETECT (32) // P1.3 -#define EXT_PWR_DETECT (31) // P0.5 - -#define PIN_VBAT_READ (5) -#define AREF_VOLTAGE (2.4f) -#define ADC_MULTIPLIER (2.0) //(1.75f) -// 2.0 gives more coherent value, 4.2V when charged, needs tweaking -#define ADC_RESOLUTION (12) -#define ADC_MAX (4096) - -#define EEPROM_POWER (7) -#define BAT_POWER (17) -#define PIN_PWR_EN (16) - - -//////////////////////////////////////////////////////////////////////////////// -// UART pin definition - -#define PIN_SERIAL1_RX PIN_GPS_TX -#define PIN_SERIAL1_TX PIN_GPS_RX - -//////////////////////////////////////////////////////////////////////////////// -// I2C pin definition - -#define HAS_WIRE (1) -#define WIRE_INTERFACES_COUNT (1) - -#define PIN_WIRE_SDA (26) // P0.26 -#define PIN_WIRE_SCL (27) // P0.27 -#define I2C_NO_RESCAN - -//////////////////////////////////////////////////////////////////////////////// -// SPI pin definition - -#define SPI_INTERFACES_COUNT (1) - -#define PIN_SPI_MISO (47) // P1.15 -#define PIN_SPI_MOSI (46) // P1.14 -#define PIN_SPI_SCK (45) // P1.13 -#define PIN_SPI_NSS (44) // P1.12 - -//////////////////////////////////////////////////////////////////////////////// -// Builtin LEDs - -#define LED_POWER (29) -#define LED_BLUE (-1) // No blue led -#define PIN_LED_BLUE (37) -#define PIN_LED_GREEN (35) // P0.24 -#define PIN_LED_RED (33) -#define LED_PIN PIN_LED_GREEN -#define LED_BUILTIN PIN_LED_BLUE -#define LED_STATE_ON LOW - -//////////////////////////////////////////////////////////////////////////////// -// Builtin buttons - -#define PIN_BUTTON1 (12) // P0.12 -#define BUTTON_PIN PIN_BUTTON1 - -//////////////////////////////////////////////////////////////////////////////// -// GPS - -#define HAS_GPS 1 -#define PIN_GPS_RX (22) -#define PIN_GPS_TX (20) - -#define PIN_GPS_POWER (14) -#define PIN_GPS_EN (21) // STANDBY -#define PIN_GPS_RESET (25) // REINIT -#define GPS_RESET_ACTIVE LOW -#define GPS_EN_ACTIVE HIGH -#define GPS_BAUDRATE 9600 - -//////////////////////////////////////////////////////////////////////////////// -// Buzzer - -#define BUZZER_EN (37) // P1.5 -#define BUZZER_PIN (25) // P0.25 \ No newline at end of file diff --git a/variants/thinknode_m5/ThinknodeM5Board.cpp b/variants/thinknode_m5/ThinknodeM5Board.cpp deleted file mode 100644 index 5adc8c00..00000000 --- a/variants/thinknode_m5/ThinknodeM5Board.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "ThinknodeM5Board.h" - -PCA9557 expander (0x18, &Wire1); - -void ThinknodeM5Board::begin() { - // Start expander and configure pins - Wire1.begin(48, 47); - expander.pinMode(EXP_PIN_POWER, OUTPUT); // eink - expander.pinMode(EXP_PIN_BACKLIGHT, OUTPUT); // peripherals - expander.pinMode(EXP_PIN_LED, OUTPUT); // peripherals - expander.digitalWrite(EXP_PIN_POWER, HIGH); - expander.digitalWrite(EXP_PIN_BACKLIGHT, LOW); - expander.digitalWrite(EXP_PIN_LED, LOW); - -#ifdef PIN_GPS_SWITCH - pinMode(PIN_GPS_SWITCH, INPUT); -#endif - - ESP32Board::begin(); - } - - void ThinknodeM5Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) { - esp_deep_sleep_start(); - } - - void ThinknodeM5Board::powerOff() { - enterDeepSleep(0); - } - - uint16_t ThinknodeM5Board::getBattMilliVolts() { - analogReadResolution(12); - analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db); - - uint32_t mv = 0; - for (int i = 0; i < 8; ++i) { - mv += analogReadMilliVolts(PIN_VBAT_READ); - delayMicroseconds(200); - } - mv /= 8; - - analogReadResolution(10); - return static_cast(mv * ADC_MULTIPLIER ); -} - - const char* ThinknodeM5Board::getManufacturerName() const { - return "Elecrow ThinkNode M2"; - } diff --git a/variants/thinknode_m5/ThinknodeM5Board.h b/variants/thinknode_m5/ThinknodeM5Board.h deleted file mode 100644 index 3c120027..00000000 --- a/variants/thinknode_m5/ThinknodeM5Board.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -extern PCA9557 expander; - -class ThinknodeM5Board : public ESP32Board { - -public: - - void begin(); - void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1); - void powerOff() override; - uint16_t getBattMilliVolts() override; - const char* getManufacturerName() const override ; - - void onBeforeTransmit() override { - expander.digitalWrite(EXP_PIN_LED, HIGH); // turn TX LED on - } - void onAfterTransmit() override { - expander.digitalWrite(EXP_PIN_LED, LOW); // turn TX LED off - } -}; \ No newline at end of file diff --git a/variants/thinknode_m5/pins_arduino.h b/variants/thinknode_m5/pins_arduino.h deleted file mode 100644 index 408ed236..00000000 --- a/variants/thinknode_m5/pins_arduino.h +++ /dev/null @@ -1,28 +0,0 @@ -// Need this file for ESP32-S3 -// No need to modify this file, changes to pins imported from variant.h -// Most is similar to https://github.com/espressif/arduino-esp32/blob/master/variants/esp32s3/pins_arduino.h - -#ifndef Pins_Arduino_h -#define Pins_Arduino_h - -#include -#include - -#define USB_VID 0x303a -#define USB_PID 0x1001 - -// Serial -static const uint8_t TX = PIN_GPS_TX; -static const uint8_t RX = PIN_GPS_RX; - -// Default SPI will be mapped to Radio -static const uint8_t SS = P_LORA_NSS; -static const uint8_t SCK = P_LORA_SCLK; -static const uint8_t MOSI = P_LORA_MISO; -static const uint8_t MISO = P_LORA_MOSI; - -// The default Wire will be mapped to PMU and RTC -static const uint8_t SCL = PIN_BOARD_SCL; -static const uint8_t SDA = PIN_BOARD_SDA; - -#endif /* Pins_Arduino_h */ \ No newline at end of file diff --git a/variants/thinknode_m5/platformio.ini b/variants/thinknode_m5/platformio.ini deleted file mode 100644 index fb2ba3ac..00000000 --- a/variants/thinknode_m5/platformio.ini +++ /dev/null @@ -1,228 +0,0 @@ -[ThinkNode_M5] -extends = esp32_base -board = ESP32-S3-WROOM-1-N4 -build_flags = ${esp32_base.build_flags} - -I variants/thinknode_m5 - -I src/helpers/sensors - -D THINKNODE_M5 - -D PIN_BUZZER=9 - -D PIN_BOARD_SCL=1 - -D PIN_BOARD_SDA=2 - -D P_LORA_EN=46 - -D P_LORA_DIO_1=4 - -D P_LORA_NSS=17 - -D P_LORA_RESET=6 ; RADIOLIB_NC - -D P_LORA_BUSY=5 ; DIO2 = 38 - -D P_LORA_SCLK=16 - -D P_LORA_MISO=7 - -D P_LORA_MOSI=15 - -D PIN_USER_BTN=21 - -D PIN_BUTTON2=14 - -D EXP_PIN_LED=1 ; led is on bus expander - -D DISPLAY_ROTATION=4 - -D DISPLAY_CLASS=GxEPDDisplay - -D EINK_DISPLAY_MODEL=GxEPD2_154_D67 - -D EINK_SCALE_X=1.5625f - -D EINK_SCALE_Y=1.5625f - -D EINK_X_OFFSET=0 - -D EINK_Y_OFFSET=10 - -D BACKLIGHT_BTN=PIN_BUTTON2 - -D AUTO_OFF_MILLIS=0 - -D DISABLE_DIAGNOSTIC_OUTPUT - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=3.3 - -D SX126X_CURRENT_LIMIT=140 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_RX_BOOSTED_GAIN=1 - -D MESH_DEBUG=1 - -D ENV_INCLUDE_GPS=1 - -D PERSISTANT_GPS=1 - -D ENV_SKIP_GPS_DETECT=1 -build_src_filter = ${esp32_base.build_src_filter} - + - + - + - +<../variants/thinknode_m5> -lib_deps = ${esp32_base.lib_deps} - zinggjm/GxEPD2 @ 1.6.2 - bakercp/CRC32 @ ^2.0.0 - maxpromer/PCA9557-arduino - stevemarple/MicroNMEA @ ^2.0.6 - -[env:ThinkNode_M5_Repeater] -extends = ThinkNode_M5 -build_src_filter = ${ThinkNode_M5.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${ThinkNode_M5.build_flags} - -D ADVERT_NAME='"Thinknode M2 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=8 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${ThinkNode_M5.lib_deps} - ${esp32_ota.lib_deps} - -; [env:ThinkNode_M5_Repeater_bridge_rs232] -; extends = ThinkNode_M5 -; build_src_filter = ${ThinkNode_M5.build_src_filter} -; + -; +<../examples/simple_repeater/*.cpp> -; build_flags = -; ${ThinkNode_M5.build_flags} -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=8 -; -D WITH_RS232_BRIDGE=Serial2 -; -D WITH_RS232_BRIDGE_RX=5 -; -D WITH_RS232_BRIDGE_TX=6 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; lib_deps = -; ${ThinkNode_M5.lib_deps} -; ${esp32_ota.lib_deps} - -[env:ThinkNode_M5_Repeater_bridge_espnow] -extends = ThinkNode_M5 -build_src_filter = ${ThinkNode_M5.build_src_filter} - + - +<../examples/simple_repeater/*.cpp> -build_flags = - ${ThinkNode_M5.build_flags} - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=8 - -D WITH_ESPNOW_BRIDGE=1 - -D WITH_ESPNOW_BRIDGE_SECRET='"shared-secret"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${ThinkNode_M5.lib_deps} - ${esp32_ota.lib_deps} - -[env:ThinkNode_M5_room_server] -extends = ThinkNonde_M5 -build_src_filter = ${ThinkNode_M5.build_src_filter} - +<../examples/simple_room_server> -build_flags = - ${ThinkNode_M5.build_flags} - -D ADVERT_NAME='"Thinknode M2 Room Server"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${ThinkNode_M5.lib_deps} - ${esp32_ota.lib_deps} - -[env:ThinkNode_M5_terminal_chat] -extends = ThinkNode_M5 -build_flags = - ${ThinkNode_M5.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M5.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = - ${ThinkNode_M5.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:ThinkNode_M5_companion_radio_ble] -extends = ThinkNode_M5 -build_flags = - ${ThinkNode_M5.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 - -D UI_RECENT_LIST_SIZE=9 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D GPS_NMEA_DEBUG -build_src_filter = ${ThinkNode_M5.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> - + -lib_deps = - ${ThinkNode_M5.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M5_companion_radio_usb] -extends = ThinkNode_M5 -build_flags = - ${ThinkNode_M5.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 -build_src_filter = ${ThinkNode_M5.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> - + -lib_deps = - ${ThinkNode_M5.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M5_companion_radio_wifi] -extends = ThinkNode_M5 -build_flags = - ${ThinkNode_M5.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 - -D WIFI_DEBUG_LOGGING=1 - -D WIFI_SSID='"Livebox-633C"' - -D WIFI_PWD='"vvQUHGSxsWd7fKMYSr"' -build_src_filter = ${ThinkNode_M5.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> - + -lib_deps = - ${ThinkNode_M5.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M5_companion_radio_serial] -extends = ThinkNode_M5 -build_flags = - ${ThinkNode_M5.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D SERIAL_TX=D6 - -D SERIAL_RX=D7 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M5.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> - + -lib_deps = - ${ThinkNode_M5.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/variants/thinknode_m5/target.cpp b/variants/thinknode_m5/target.cpp deleted file mode 100644 index 8208d2c4..00000000 --- a/variants/thinknode_m5/target.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include "target.h" -#include - -ThinknodeM5Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#ifdef ENV_INCLUDE_GPS -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); -EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else -EnvironmentSensorManager sensors = EnvironmentSensorManager(); -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - pinMode(P_LORA_EN, OUTPUT); - digitalWrite(P_LORA_EN, HIGH); - #if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - diff --git a/variants/thinknode_m5/variant.h b/variants/thinknode_m5/variant.h deleted file mode 100644 index 9b82416b..00000000 --- a/variants/thinknode_m5/variant.h +++ /dev/null @@ -1,28 +0,0 @@ -#define I2C_SCL 1 -#define I2C_SDA 2 -#define PIN_VBAT_READ 8 -#define AREF_VOLTAGE (3.0) -#define ADC_MULTIPLIER (2.11F) -#define PIN_BUZZER 9 -#define PIN_VEXT_EN_ACTIVE HIGH -#define PIN_VEXT_EN 46 -#define PIN_USER_BTN 21 -//#define PIN_LED 3 -//#define PIN_STATUS_LED 1 -#define PIN_PWRBTN 14 - -#define PIN_DISPLAY_MISO (-1) -#define PIN_DISPLAY_MOSI (45) -#define PIN_DISPLAY_SCLK (38) -#define PIN_DISPLAY_CS (39) -#define PIN_DISPLAY_DC (40) -#define PIN_DISPLAY_RST (41) -#define PIN_DISPLAY_BUSY (42) -#define EXP_PIN_BACKLIGHT (5) -#define EXP_PIN_POWER (4) - -#define PIN_GPS_EN (11) -#define PIN_GPS_RESET (13) -#define PIN_GPS_RX (20) -#define PIN_GPS_TX (19) -#define PIN_GPS_SWITCH (10) \ No newline at end of file diff --git a/variants/thinknode_m6/ThinkNodeM6Board.cpp b/variants/thinknode_m6/ThinkNodeM6Board.cpp deleted file mode 100644 index 1ccc2026..00000000 --- a/variants/thinknode_m6/ThinkNodeM6Board.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "ThinkNodeM6Board.h" -#include - -#ifdef THINKNODE_M6 - -#include -#include - -static BLEDfu bledfu; - -static void connect_callback(uint16_t conn_handle) { - (void)conn_handle; - MESH_DEBUG_PRINTLN("BLE client connected"); -} - -static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { - (void)conn_handle; - (void)reason; - - MESH_DEBUG_PRINTLN("BLE client disconnected"); -} - -void ThinkNodeM6Board::begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - - Wire.begin(); - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, LOW); -#endif - - delay(10); // give sx1262 some time to power up -} - -uint16_t ThinkNodeM6Board::getBattMilliVolts() { - int adcvalue = 0; - - digitalWrite(PIN_ADC_CTRL, HIGH); - analogReference(AR_INTERNAL_3_0); - analogReadResolution(12); - delay(10); - - // ADC range is 0..3000mV and resolution is 12-bit (0..4095) - adcvalue = analogRead(PIN_VBAT_READ); - digitalWrite(PIN_ADC_CTRL, LOW); - // Convert the raw value to compensated mv, taking the resistor- - // divider into account (providing the actual LIPO voltage) - return (uint16_t)((float)adcvalue * REAL_VBAT_MV_PER_LSB); -} - -bool ThinkNodeM6Board::startOTAUpdate(const char *id, char reply[]) { - // Config the peripheral connection with maximum bandwidth - // more SRAM required by SoftDevice - // Note: All config***() function must be called before begin() - Bluefruit.configPrphBandwidth(BANDWIDTH_MAX); - Bluefruit.configPrphConn(92, BLE_GAP_EVENT_LENGTH_MIN, 16, 16); - - Bluefruit.begin(1, 0); - // Set max power. Accepted values are: -40, -30, -20, -16, -12, -8, -4, 0, 4 - Bluefruit.setTxPower(4); - // Set the BLE device name - Bluefruit.setName("THINKNODE_M1_OTA"); - - Bluefruit.Periph.setConnectCallback(connect_callback); - Bluefruit.Periph.setDisconnectCallback(disconnect_callback); - - // To be consistent OTA DFU should be added first if it exists - bledfu.begin(); - - // Set up and start advertising - // Advertising packet - Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); - Bluefruit.Advertising.addTxPower(); - Bluefruit.Advertising.addName(); - - /* Start Advertising - - Enable auto advertising if disconnected - - Interval: fast mode = 20 ms, slow mode = 152.5 ms - - Timeout for fast mode is 30 seconds - - Start(timeout) with timeout = 0 will advertise forever (until connected) - - For recommended advertising interval - https://developer.apple.com/library/content/qa/qa1931/_index.html - */ - Bluefruit.Advertising.restartOnDisconnect(true); - Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms - Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode - Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds - - strcpy(reply, "OK - started"); - return true; -} -#endif diff --git a/variants/thinknode_m6/ThinkNodeM6Board.h b/variants/thinknode_m6/ThinkNodeM6Board.h deleted file mode 100644 index c3d7dad6..00000000 --- a/variants/thinknode_m6/ThinkNodeM6Board.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#include -#include - -// built-ins -#define VBAT_MV_PER_LSB (0.73242188F) // 3.0V ADC range and 12-bit ADC resolution = 3000mV/4096 - -#define VBAT_DIVIDER_COMP ADC_MULTIPLIER // Compensation factor for the VBAT divider - -#define PIN_VBAT_READ BATTERY_PIN -#define REAL_VBAT_MV_PER_LSB (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB) - -class ThinkNodeM6Board : public mesh::MainBoard { -protected: - uint8_t startup_reason; - -public: - - void begin(); - uint16_t getBattMilliVolts() override; - bool startOTAUpdate(const char* id, char reply[]) override; - - uint8_t getStartupReason() const override { - return startup_reason; - } - - #if defined(P_LORA_TX_LED) - void onBeforeTransmit() override { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - } - void onAfterTransmit() override { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - } - #endif - - const char* getManufacturerName() const override { - return "Elecrow ThinkNode-M6"; - } - - void reboot() override { - NVIC_SystemReset(); - } - - void powerOff() override { - - // turn off all leds, sd_power_system_off will not do this for us - #ifdef P_LORA_TX_LED - digitalWrite(P_LORA_TX_LED, LOW); - #endif - - // power off board - sd_power_system_off(); - - } -}; diff --git a/variants/thinknode_m6/platformio.ini b/variants/thinknode_m6/platformio.ini deleted file mode 100644 index db22073c..00000000 --- a/variants/thinknode_m6/platformio.ini +++ /dev/null @@ -1,118 +0,0 @@ -[ThinkNode_M6] -extends = nrf52_base -board = thinknode_m6 -board_build.ldscript = boards/nrf52840_s140_v6.ld -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I src/helpers/nrf52 - -I lib/nrf52/s140_nrf52_6.1.1_API/include - -I lib/nrf52/s140_nrf52_6.1.1_API/include/nrf52 - -I variants/thinknode_m6 - -D THINKNODE_M6=1 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=38 - -D P_LORA_NSS=44 - -D P_LORA_RESET=42 - -D P_LORA_BUSY=43 - -D P_LORA_SCLK=45 - -D P_LORA_MISO=47 - -D P_LORA_MOSI=46 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=3.3 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 - -D P_LORA_TX_LED=PIN_LED_BLUE -; -D PERSISTANT_GPS=1 -; -D ENV_SKIP_GPS_DETECT=1 -build_src_filter = ${nrf52_base.build_src_filter} - + - + - + - +<../variants/thinknode_m6> -lib_deps = - ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} -debug_tool = jlink -upload_protocol = nrfutil - -[env:ThinkNode_M6_repeater] -extends = ThinkNode_M6 -build_flags = - ${ThinkNode_M6.build_flags} - -D ADVERT_NAME='"ThinkNode Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 - -D MESH_DEBUG=1 - -D GPS_NMEA_DEBUG=1 -build_src_filter = ${ThinkNode_M6.build_src_filter} - +<../examples/simple_repeater/*.cpp> -lib_deps = - ${ThinkNode_M6.lib_deps} - -[env:ThinkNode_M6_room_server] -extends = ThinkNode_M6 -build_flags = - ${ThinkNode_M6.build_flags} - -D ADVERT_NAME='"ThinkNode Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M6.build_src_filter} - +<../examples/simple_room_server/*.cpp> -lib_deps = - ${ThinkNode_M6.lib_deps} - -[env:ThinkNode_M6_companion_radio_ble] -extends = ThinkNode_M6 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${ThinkNode_M6.build_flags} - -I src/helpers/ui - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D AUTO_SHUTDOWN_MILLIVOLTS=3300 - -D QSPIFLASH=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${ThinkNode_M6.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> -lib_deps = - ${ThinkNode_M6.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:ThinkNode_M6_companion_radio_usb] -extends = ThinkNode_M6 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${ThinkNode_M6.build_flags} - -I src/helpers/ui - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D QSPIFLASH=1 - -D OFFLINE_QUEUE_SIZE=256 - -D AUTO_SHUTDOWN_MILLIVOLTS=3300 -build_src_filter = ${ThinkNode_M6.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> -lib_deps = - ${ThinkNode_M6.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 \ No newline at end of file diff --git a/variants/thinknode_m6/target.cpp b/variants/thinknode_m6/target.cpp deleted file mode 100644 index c14dd300..00000000 --- a/variants/thinknode_m6/target.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include "target.h" -#include -#include - -ThinkNodeM6Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -#ifdef ENV_INCLUDE_GPS -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); -EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else -EnvironmentSensorManager sensors = EnvironmentSensorManager(); -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/thinknode_m6/target.h b/variants/thinknode_m6/target.h deleted file mode 100644 index 38b1fed1..00000000 --- a/variants/thinknode_m6/target.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include - #include -#endif - -extern ThinkNodeM6Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/thinknode_m6/variant.cpp b/variants/thinknode_m6/variant.cpp deleted file mode 100644 index c88f387d..00000000 --- a/variants/thinknode_m6/variant.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" - -const uint32_t g_ADigitalPinMap[] = { - 0xff, 0xff, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47 -}; - -void initVariant() { - pinMode(PIN_PWR_EN, OUTPUT); - digitalWrite(PIN_PWR_EN, HIGH); - - pinMode(QSPI_FLASH_EN, OUTPUT); - digitalWrite(QSPI_FLASH_EN, HIGH); - - // For now stick adc_ctrl to fixed value - pinMode(PIN_ADC_CTRL, OUTPUT); - digitalWrite(PIN_ADC_CTRL, LOW); - - pinMode(PIN_LED_RED, OUTPUT); - pinMode(PIN_LED_BLUE, OUTPUT); - digitalWrite(PIN_LED_BLUE, LOW); - digitalWrite(PIN_LED_RED, LOW); - - // gps - pinMode(PIN_GPS_STANDBY, OUTPUT); - digitalWrite(PIN_GPS_STANDBY, HIGH); - pinMode(PIN_GPS_EN, OUTPUT); - digitalWrite(PIN_GPS_EN, HIGH); - pinMode(PIN_GPS_RESET, OUTPUT); - digitalWrite(PIN_GPS_RESET, HIGH); -} diff --git a/variants/thinknode_m6/variant.h b/variants/thinknode_m6/variant.h deleted file mode 100644 index 70fd6506..00000000 --- a/variants/thinknode_m6/variant.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * variant.h - * Copyright (C) 2023 Seeed K.K. - * MIT License - */ - -#pragma once - -#include "WVariant.h" - -//////////////////////////////////////////////////////////////////////////////// -// Low frequency clock source - -#define USE_LFXO // 32.768 kHz crystal oscillator -#define VARIANT_MCK (64000000ul) - -#define WIRE_INTERFACES_COUNT (1) -//////////////////////////////////////////////////////////////////////////////// -// Power - -#define PIN_PWR_EN (27) - -#define BATTERY_PIN (28) -#define ADC_MULTIPLIER (1.75F) -#define PIN_ADC_CTRL (11) - -#define ADC_RESOLUTION (12) -#define BATTERY_SENSE_RES (12) - -#define AREF_VOLTAGE (3.0) - -//////////////////////////////////////////////////////////////////////////////// -// Number of pins - -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (1) -#define NUM_ANALOG_OUTPUTS (0) - -//////////////////////////////////////////////////////////////////////////////// -// UART pin definition - -#define PIN_SERIAL1_RX PIN_GPS_TX -#define PIN_SERIAL1_TX PIN_GPS_RX - -#define PIN_SERIAL2_RX (22) -#define PIN_SERIAL2_TX (24) - -//////////////////////////////////////////////////////////////////////////////// -// I2C pin definition - -#define PIN_WIRE_SDA (41) // P1.9 -#define PIN_WIRE_SCL (8) // P0.8 - -//////////////////////////////////////////////////////////////////////////////// -// SPI pin definition - -#define SPI_INTERFACES_COUNT (1) - -#define PIN_SPI_MISO (47) -#define PIN_SPI_MOSI (46) -#define PIN_SPI_SCK (45) -//#define PIN_SPI_NSS (24) - -//////////////////////////////////////////////////////////////////////////////// -// Builtin LEDs - -#define PIN_LED_RED (12) -#define PIN_LED_BLUE (7) -#define LED_BLUE (-1) - -#define LED_BUILTIN PIN_LED_BLUE -#define PIN_LED LED_BUILTIN -#define LED_PIN LED_BUILTIN -#define LED_STATE_ON HIGH - -//////////////////////////////////////////////////////////////////////////////// -// Builtin buttons - -#define PIN_BUTTON1 (17) -#define BUTTON_PIN PIN_BUTTON1 -#define PIN_USER_BTN BUTTON_PIN - -//////////////////////////////////////////////////////////////////////////////// -// QSPI - -#define EXTERNAL_FLASH_DEVICES MX25R1635F -#define EXTERNAL_FLASH_USE_QSPI - -#define PIN_QSPI_SCK (35) -#define PIN_QSPI_CS (23) -#define PIN_QSPI_IO0 (33) // MOSI if using two bit interface -#define PIN_QSPI_IO1 (34) // MISO if using two bit interface -#define PIN_QSPI_IO2 (36) // WP if using two bit interface (i.e. not used) -#define PIN_QSPI_IO3 (37) // HOLD if using two bit interface (i.e. not used) -#define QSPI_FLASH_EN (21) - -//////////////////////////////////////////////////////////////////////////////// -// GPS - -#define GPS_L76K -#define PIN_GPS_RX (2) -#define PIN_GPS_TX (3) -#define PIN_GPS_EN (6) // EN -#define PIN_GPS_RESET (29) -#define PIN_GPS_STANDBY (30) // STANDBY -#define PIN_GPS_PPS (31) -#define GPS_BAUD_RATE 9600 diff --git a/variants/tiny_relay/platformio.ini b/variants/tiny_relay/platformio.ini deleted file mode 100644 index ed178727..00000000 --- a/variants/tiny_relay/platformio.ini +++ /dev/null @@ -1,50 +0,0 @@ -[Tiny_Relay] -extends = stm32_base -board = tiny_relay -board_upload.maximum_size = 229376 ; 32kb for FS -build_flags = ${stm32_base.build_flags} - -D RADIO_CLASS=CustomSTM32WLx - -D WRAPPER_CLASS=CustomSTM32WLxWrapper - -D SPI_INTERFACES_COUNT=0 - -D RX_BOOSTED_GAIN=true -; -D STM32WL_TCXO_VOLTAGE=1.6 ; defaults to 0 if undef -; -D LORA_TX_POWER=14 ; Defaults to 22 for HP, 14 is for LP version - -D LORA_TX_POWER=22 ; Enable 22dBm transmission - -D MAX_LORA_TX_POWER=22 ; Allow setting up to 22dBm in companion radio - -I variants/tiny_relay -build_src_filter = ${stm32_base.build_src_filter} - +<../variants/tiny_relay> - -[env:Tiny_Relay_repeater] -extends = Tiny_Relay -build_flags = ${Tiny_Relay.build_flags} - -D ADVERT_NAME='"tiny_relay Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -build_src_filter = ${Tiny_Relay.build_src_filter} - +<../examples/simple_repeater> - -[env:Tiny_Relay_sensor] -extends = Tiny_Relay -build_flags = ${Tiny_Relay.build_flags} - -D ADVERT_NAME='"tiny_relay Sensor"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -build_src_filter = ${Tiny_Relay.build_src_filter} - +<../examples/simple_sensor> - -[env:Tiny_Relay_companion_radio_usb] -extends = Tiny_Relay -build_flags = ${Tiny_Relay.build_flags} -; -D FORMAT_FS=true - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 - -D MAX_LORA_TX_POWER=22 -build_src_filter = ${Tiny_Relay.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${Tiny_Relay.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/tiny_relay/target.cpp b/variants/tiny_relay/target.cpp deleted file mode 100644 index f738ac17..00000000 --- a/variants/tiny_relay/target.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include "target.h" -#include -#include - -TinyRelayBoard board; - -RADIO_CLASS radio = new STM32WLx_Module(); - -WRAPPER_CLASS radio_driver(radio, board); - -static const uint32_t rfswitch_pins[] = {LORAWAN_RFSWITCH_PINS, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC}; -static const Module::RfSwitchMode_t rfswitch_table[] = { - {STM32WLx::MODE_IDLE, {LOW, LOW}}, - {STM32WLx::MODE_RX, {HIGH, LOW}}, - {STM32WLx::MODE_TX_LP, {LOW, HIGH}}, - {STM32WLx::MODE_TX_HP, {LOW, HIGH}}, - END_OF_MODE_TABLE, -}; - -VolatileRTCClock rtc_clock; -SensorManager sensors; - -#ifndef LORA_CR -#define LORA_CR 5 -#endif - -#ifndef STM32WL_TCXO_VOLTAGE -// TCXO set to 0 for RAK3172 -#define STM32WL_TCXO_VOLTAGE 0 -#endif - -#ifndef LORA_TX_POWER -#define LORA_TX_POWER 22 -#endif - -bool radio_init() -{ - // rtc_clock.begin(Wire); - - radio.setRfSwitchTable(rfswitch_pins, rfswitch_table); - - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, - STM32WL_TCXO_VOLTAGE, 0); - - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - -#ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); -#endif - - radio.setCRC(1); - - return true; // success -} - -uint32_t radio_get_rng_seed() -{ - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) -{ - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) -{ - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() -{ - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/tiny_relay/target.h b/variants/tiny_relay/target.h deleted file mode 100644 index 82747cdc..00000000 --- a/variants/tiny_relay/target.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -#define PIN_VBAT_READ A0 -#define ADC_MULTIPLIER (5 * 1.73 * 1000) - -class TinyRelayBoard : public STM32Board -{ - public: - void begin() override - { - STM32Board::begin(); - pinMode(PA0, OUTPUT); - pinMode(PA1, OUTPUT); - } - - const char *getManufacturerName() const override { return "Tiny Relay"; } - - uint16_t getBattMilliVolts() override - { - analogReadResolution(12); - uint32_t raw = 0; - for (int i = 0; i < 8; i++) { - raw += analogRead(PIN_VBAT_READ); - } - return ((double)raw) * ADC_MULTIPLIER / 8 / 4096; - } - - void setGpio(uint32_t values) override - { - // set led values - digitalWrite(PA0, values & 1); - digitalWrite(PA1, (values & 2) >> 1); - } - - uint32_t getGpio() override - { - // get led value - return (digitalRead(PA1) << 1) | digitalRead(PA0); - } -}; - -extern TinyRelayBoard board; -extern WRAPPER_CLASS radio_driver; -extern VolatileRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/tiny_relay/variant.h b/variants/tiny_relay/variant.h deleted file mode 100644 index 4405be0b..00000000 --- a/variants/tiny_relay/variant.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include - -#undef RNG diff --git a/variants/waveshare_rp2040_lora/WaveshareBoard.cpp b/variants/waveshare_rp2040_lora/WaveshareBoard.cpp deleted file mode 100644 index 2e622933..00000000 --- a/variants/waveshare_rp2040_lora/WaveshareBoard.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "WaveshareBoard.h" - -#include -#include - -void WaveshareBoard::begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); -#endif - -#ifdef PIN_VBAT_READ - pinMode(PIN_VBAT_READ, INPUT); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setSDA(PIN_BOARD_SDA); - Wire.setSCL(PIN_BOARD_SCL); -#endif - - Wire.begin(); - - delay(10); // give sx1262 some time to power up -} - -bool WaveshareBoard::startOTAUpdate(const char *id, char reply[]) { - return false; -} diff --git a/variants/waveshare_rp2040_lora/WaveshareBoard.h b/variants/waveshare_rp2040_lora/WaveshareBoard.h deleted file mode 100644 index 694b8bd1..00000000 --- a/variants/waveshare_rp2040_lora/WaveshareBoard.h +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#include -#include - -// LoRa radio module pins for Waveshare RP2040-LoRa-HF/LF -// https://files.waveshare.com/wiki/RP2040-LoRa/Rp2040-lora-sch.pdf - -/* - * This board has no built-in way to read battery voltage. - * Nevertheless it's very easy to make it work, you only require two 1% resistors. - * - * BAT+ -----+ - * | - * VSYS --+ -/\/\/\/\- --+ - * 200k | - * +-- GPIO28 - * | - * GND --+ -/\/\/\/\- --+ - * | 100k - * BAT- -----+ - */ -#define PIN_VBAT_READ 28 -#define BATTERY_SAMPLES 8 -#define ADC_MULTIPLIER (3.0f * 3.3f * 1000) - -class WaveshareBoard : public mesh::MainBoard { -protected: - uint8_t startup_reason; - -public: - void begin(); - uint8_t getStartupReason() const override { return startup_reason; } - -#ifdef P_LORA_TX_LED - void onBeforeTransmit() override { digitalWrite(P_LORA_TX_LED, HIGH); } - void onAfterTransmit() override { digitalWrite(P_LORA_TX_LED, LOW); } -#endif - - uint16_t getBattMilliVolts() override { -#if defined(PIN_VBAT_READ) && defined(ADC_MULTIPLIER) - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw) / 4096; -#else - return 0; -#endif - } - - const char *getManufacturerName() const override { return "Waveshare RP2040-LoRa"; } - - void reboot() override { rp2040.reboot(); } - - bool startOTAUpdate(const char *id, char reply[]) override; -}; diff --git a/variants/waveshare_rp2040_lora/platformio.ini b/variants/waveshare_rp2040_lora/platformio.ini deleted file mode 100644 index 78a5e3e7..00000000 --- a/variants/waveshare_rp2040_lora/platformio.ini +++ /dev/null @@ -1,131 +0,0 @@ -; Waveshare RP2040-LoRa-HF/LF -; https://files.waveshare.com/wiki/RP2040-LoRa/Rp2040-lora-sch.pdf - -[waveshare_rp2040_lora] -extends = rp2040_base -board = pico -board_build.filesystem_size = 0.5m -build_flags = ${rp2040_base.build_flags} - -I variants/waveshare_rp2040_lora - -D SX126X_CURRENT_LIMIT=140 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=16 - -D P_LORA_NSS=13 ; CS - -D P_LORA_RESET=23 - -D P_LORA_BUSY=18 - -D P_LORA_SCLK=14 - -D P_LORA_MISO=24 - -D P_LORA_MOSI=15 - -D P_LORA_TX_LED=25 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=0 - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 -; Debug options - ; -D DEBUG_RP2040_WIRE=1 - ; -D DEBUG_RP2040_SPI=1 - ; -D DEBUG_RP2040_CORE=1 - ; -D RADIOLIB_DEBUG_SPI=1 - ; -D DEBUG_RP2040_PORT=Serial -build_src_filter = ${rp2040_base.build_src_filter} - + - +<../variants/waveshare_rp2040_lora> -lib_deps = ${rp2040_base.lib_deps} - -[env:waveshare_rp2040_lora_repeater] -extends = waveshare_rp2040_lora -build_flags = ${waveshare_rp2040_lora.build_flags} - -D ADVERT_NAME='"RP2040-LoRa Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${waveshare_rp2040_lora.build_src_filter} - +<../examples/simple_repeater> - -[env:waveshare_rp2040_lora_repeater_bridge_rs232] -extends = waveshare_rp2040_lora -build_flags = ${waveshare_rp2040_lora.build_flags} - -D ADVERT_NAME='"RS232 Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_RS232_BRIDGE=Serial2 - -D WITH_RS232_BRIDGE_RX=9 - -D WITH_RS232_BRIDGE_TX=8 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${waveshare_rp2040_lora.build_src_filter} - + - +<../examples/simple_repeater> - -[env:waveshare_rp2040_lora_room_server] -extends = waveshare_rp2040_lora -build_flags = ${waveshare_rp2040_lora.build_flags} - -D ADVERT_NAME='"RP2040-LoRa Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${waveshare_rp2040_lora.build_src_filter} - +<../examples/simple_room_server> - -[env:waveshare_rp2040_lora_companion_radio_usb] -extends = waveshare_rp2040_lora -build_flags = ${waveshare_rp2040_lora.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${waveshare_rp2040_lora.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${waveshare_rp2040_lora.lib_deps} - densaugeo/base64 @ ~1.4.0 - -; [env:waveshare_rp2040_lora_companion_radio_ble] -; extends = waveshare_rp2040_lora -; build_flags = ${waveshare_rp2040_lora.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D BLE_PIN_CODE=123456 -; -D BLE_DEBUG_LOGGING=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${waveshare_rp2040_lora.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${waveshare_rp2040_lora.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -; [env:waveshare_rp2040_lora_companion_radio_wifi] -; extends = waveshare_rp2040_lora -; build_flags = ${waveshare_rp2040_lora.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D WIFI_DEBUG_LOGGING=1 -; -D WIFI_SSID='"myssid"' -; -D WIFI_PWD='"mypwd"' -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${waveshare_rp2040_lora.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${waveshare_rp2040_lora.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -[env:waveshare_rp2040_lora_terminal_chat] -extends = waveshare_rp2040_lora -build_flags = ${waveshare_rp2040_lora.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${waveshare_rp2040_lora.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = ${waveshare_rp2040_lora.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/waveshare_rp2040_lora/target.cpp b/variants/waveshare_rp2040_lora/target.cpp deleted file mode 100644 index 7bc1d043..00000000 --- a/variants/waveshare_rp2040_lora/target.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "target.h" - -#include -#include - -WaveshareBoard board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI1); -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -bool radio_init() { - rtc_clock.begin(Wire); - - SPI1.setSCK(P_LORA_SCLK); - SPI1.setTX(P_LORA_MOSI); - SPI1.setRX(P_LORA_MISO); - - pinMode(P_LORA_NSS, OUTPUT); - digitalWrite(P_LORA_NSS, HIGH); - - SPI1.begin(false); - - //passing NULL skips init of SPI - return radio.std_init(NULL); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/waveshare_rp2040_lora/target.h b/variants/waveshare_rp2040_lora/target.h deleted file mode 100644 index aed55893..00000000 --- a/variants/waveshare_rp2040_lora/target.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 - -#include -#include -#include -#include -#include -#include - -extern WaveshareBoard board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/wio-e5-dev/platformio.ini b/variants/wio-e5-dev/platformio.ini deleted file mode 100644 index d7e63c83..00000000 --- a/variants/wio-e5-dev/platformio.ini +++ /dev/null @@ -1,50 +0,0 @@ -[lora_e5] -extends = stm32_base -board = lora_e5_dev_board -board_upload.maximum_size = 229376 ; 32kb for FS -build_flags = ${stm32_base.build_flags} - -D RADIO_CLASS=CustomSTM32WLx - -D WRAPPER_CLASS=CustomSTM32WLxWrapper - -D SPI_INTERFACES_COUNT=0 - -D RX_BOOSTED_GAIN=true - -D PIN_SERIAL_RX=PB7 - -D PIN_SERIAL_TX=PB6 - -I variants/wio-e5-dev -build_src_filter = ${stm32_base.build_src_filter} - +<../variants/wio-e5-dev> - -[env:wio-e5_repeater] -extends = lora_e5 -build_flags = ${lora_e5.build_flags} - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"WIO-E5 Repeater"' - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -build_src_filter = ${lora_e5.build_src_filter} - +<../examples/simple_repeater/*.cpp> - -[env:wio-e5-repeater_bridge_rs232] -extends = lora_e5 -build_flags = ${lora_e5.build_flags} - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"WIO-E5 Repeater"' - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D ENABLE_HWSERIAL2 - -D WITH_RS232_BRIDGE=Serial2 - -D WITH_RS232_BRIDGE_RX=PA3 - -D WITH_RS232_BRIDGE_TX=PA2 -build_src_filter = ${lora_e5.build_src_filter} - + - +<../examples/simple_repeater/*.cpp> - -[env:wio-e5_companion_radio_usb] -extends = lora_e5 -build_flags = ${lora_e5.build_flags} - -D LORA_TX_POWER=22 - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 -build_src_filter = ${lora_e5.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${lora_e5.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/wio-e5-dev/target.cpp b/variants/wio-e5-dev/target.cpp deleted file mode 100644 index 42e900e4..00000000 --- a/variants/wio-e5-dev/target.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include "target.h" -#include - -WIOE5Board board; - -RADIO_CLASS radio = new STM32WLx_Module(); - -WRAPPER_CLASS radio_driver(radio, board); - -static const uint32_t rfswitch_pins[] = {PA4, PA5, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC}; -static const Module::RfSwitchMode_t rfswitch_table[] = { - {STM32WLx::MODE_IDLE, {LOW, LOW}}, - {STM32WLx::MODE_RX, {HIGH, LOW}}, - {STM32WLx::MODE_TX_HP, {LOW, HIGH}}, // for LoRa-E5 mini -// {STM32WLx::MODE_TX_LP, {HIGH, HIGH}}, // for LoRa-E5-LE mini - END_OF_MODE_TABLE, -}; - -VolatileRTCClock rtc_clock; -SensorManager sensors; - -#ifndef LORA_CR - #define LORA_CR 5 -#endif - -bool radio_init() { -// rtc_clock.begin(Wire); - -// #ifdef SX126X_DIO3_TCXO_VOLTAGE -// float tcxo = SX126X_DIO3_TCXO_VOLTAGE; -// #else -// float tcxo = 1.6f; -// #endif - - radio.setRfSwitchTable(rfswitch_pins, rfswitch_table); - - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, 1.7, 0); - - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - - #ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); - #endif - - radio.setCRC(1); - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/wio-e5-dev/target.h b/variants/wio-e5-dev/target.h deleted file mode 100644 index 5fdd0aba..00000000 --- a/variants/wio-e5-dev/target.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -class WIOE5Board : public STM32Board { -public: - const char* getManufacturerName() const override { - return "Seeed Wio E5 Dev Board"; - } - - // Just returns ADC value for now to test adc - uint16_t getBattMilliVolts() override { - uint32_t raw = analogRead(PIN_A3); - return raw; - } -}; - -extern WIOE5Board board; -extern WRAPPER_CLASS radio_driver; -extern VolatileRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/wio-e5-dev/variant.h b/variants/wio-e5-dev/variant.h deleted file mode 100644 index ffd366f9..00000000 --- a/variants/wio-e5-dev/variant.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include - -#undef RNG diff --git a/variants/wio-e5-mini/NullDisplayDriver.h b/variants/wio-e5-mini/NullDisplayDriver.h deleted file mode 100644 index 2a9670bd..00000000 --- a/variants/wio-e5-mini/NullDisplayDriver.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include - -class NullDisplayDriver : public DisplayDriver { -public: - NullDisplayDriver() : DisplayDriver(128, 64) { } - bool begin() { return false; } // not present - - bool isOn() override { return false; } - void turnOn() override { } - void turnOff() override { } - void clear() override { } - void startFrame(Color bkg = DARK) override { } - void setTextSize(int sz) override { } - void setColor(Color c) override { } - void setCursor(int x, int y) override { } - void print(const char* str) override { } - void fillRect(int x, int y, int w, int h) override { } - void drawRect(int x, int y, int w, int h) override { } - void drawXbm(int x, int y, const uint8_t* bits, int w, int h) override { } - uint16_t getTextWidth(const char* str) override { return 0; } - void endFrame() { } -}; diff --git a/variants/wio-e5-mini/platformio.ini b/variants/wio-e5-mini/platformio.ini deleted file mode 100644 index 83784443..00000000 --- a/variants/wio-e5-mini/platformio.ini +++ /dev/null @@ -1,50 +0,0 @@ -[lora_e5_mini] -extends = stm32_base -board = lora_e5_mini -board_upload.maximum_size = 229376 ; 32kb for FS -build_flags = ${stm32_base.build_flags} - -D RADIO_CLASS=CustomSTM32WLx - -D WRAPPER_CLASS=CustomSTM32WLxWrapper - -D SPI_INTERFACES_COUNT=0 - -D RX_BOOSTED_GAIN=true - -D P_LORA_TX_LED=LED_RED - -D PIN_USER_BTN=USER_BTN - -D USER_BTN_PRESSED=LOW - -I variants/wio-e5-mini -build_src_filter = ${stm32_base.build_src_filter} - +<../variants/wio-e5-mini> -lib_deps = ${stm32_base.lib_deps} - finitespace/BME280 @ ^3.0.0 - -[env:wio-e5-mini_repeater] -extends = lora_e5_mini -build_flags = ${lora_e5_mini.build_flags} - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"wio-e5-mini Repeater"' - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -build_src_filter = ${lora_e5_mini.build_src_filter} - +<../examples/simple_repeater/*.cpp> - -[env:wio-e5-mini_sensor] -extends = lora_e5_mini -build_flags = ${lora_e5_mini.build_flags} - -D LORA_TX_POWER=22 - -D ADVERT_NAME='"wio-e5-mini Sensor"' - -D ADMIN_PASSWORD='"password"' -build_src_filter = ${lora_e5_mini.build_src_filter} - +<../examples/simple_sensor> - -[env:wio-e5-mini_companion_radio_usb] -extends = lora_e5_mini -build_flags = ${lora_e5_mini.build_flags} - -I examples/companion_radio/ui-orig - -D LORA_TX_POWER=22 - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 - -D DISPLAY_CLASS=NullDisplayDriver -build_src_filter = ${lora_e5_mini.build_src_filter} - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = ${lora_e5_mini.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/wio-e5-mini/target.cpp b/variants/wio-e5-mini/target.cpp deleted file mode 100644 index 0e2358b8..00000000 --- a/variants/wio-e5-mini/target.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include "target.h" -#include - -WIOE5Board board; - -RADIO_CLASS radio = new STM32WLx_Module(); - -WRAPPER_CLASS radio_driver(radio, board); - -static const uint32_t rfswitch_pins[] = {PA4, PA5, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC}; -static const Module::RfSwitchMode_t rfswitch_table[] = { - {STM32WLx::MODE_IDLE, {LOW, LOW}}, - {STM32WLx::MODE_RX, {HIGH, LOW}}, - {STM32WLx::MODE_TX_HP, {LOW, HIGH}}, // for LoRa-E5 mini -// {STM32WLx::MODE_TX_LP, {HIGH, HIGH}}, // for LoRa-E5-LE mini - END_OF_MODE_TABLE, -}; - -VolatileRTCClock rtc_clock; -WIOE5SensorManager sensors; - -#ifdef DISPLAY_CLASS - NullDisplayDriver display; -#endif - -#ifndef LORA_CR - #define LORA_CR 5 -#endif - -bool radio_init() { - Wire.begin(); - - radio.setRfSwitchTable(rfswitch_pins, rfswitch_table); - - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, 1.7, 0); - - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - - #ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); - #endif - - radio.setCRC(1); - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - -bool WIOE5SensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { - if (!has_bme) return false; - - float temp(NAN), hum(NAN), pres(NAN); - - BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); - BME280::PresUnit presUnit(BME280::PresUnit_hPa); - - bme.read(pres, temp, hum, tempUnit, presUnit); - - telemetry.addTemperature(TELEM_CHANNEL_SELF, temp); - telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, hum); - telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, pres); - - return true; -} - -bool WIOE5SensorManager::begin() { - has_bme = bme.begin(); - - return has_bme; -} \ No newline at end of file diff --git a/variants/wio-e5-mini/target.h b/variants/wio-e5-mini/target.h deleted file mode 100644 index 921c38d3..00000000 --- a/variants/wio-e5-mini/target.h +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include "NullDisplayDriver.h" -#endif - -#include -#include - -#ifdef DISPLAY_CLASS - extern NullDisplayDriver display; -#endif - -class WIOE5Board : public STM32Board { -public: - void begin() override { - STM32Board::begin(); - - pinMode(LED_RED, OUTPUT); - digitalWrite(LED_RED, HIGH); - pinMode(USER_BTN, INPUT_PULLUP); - } - - const char* getManufacturerName() const override { - return "Seeed Wio E5 mini"; - } - - uint16_t getBattMilliVolts() override { - analogReadResolution(12); - uint32_t raw = 0; - for (int i=0; i<8;i++) { - raw += analogRead(PIN_A3); - } - return ((double)raw) * 1.73 * 5 * 1000 / 8 / 4096; - } -}; - -class WIOE5SensorManager : public SensorManager { - BME280I2C bme; - bool has_bme = false; - -public: - WIOE5SensorManager() {} - bool begin() override; - bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override; -}; - -extern WIOE5Board board; -extern WRAPPER_CLASS radio_driver; -extern VolatileRTCClock rtc_clock; -extern WIOE5SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/wio-e5-mini/variant.h b/variants/wio-e5-mini/variant.h deleted file mode 100644 index 79540c79..00000000 --- a/variants/wio-e5-mini/variant.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -// UART Definitions -// #ifndef SERIAL_UART_INSTANCE -// #define SERIAL_UART_INSTANCE 101 -// #endif - -#include - -#undef RNG diff --git a/variants/wio-tracker-l1-eink/platformio.ini b/variants/wio-tracker-l1-eink/platformio.ini deleted file mode 100644 index deb85f5e..00000000 --- a/variants/wio-tracker-l1-eink/platformio.ini +++ /dev/null @@ -1,69 +0,0 @@ -[WioTrackerL1Eink] -extends = nrf52_base -board = seeed-wio-tracker-l1 -board_build.ldscript = boards/nrf52840_s140_v7.ld -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I lib/nrf52/s140_nrf52_7.3.0_API/include - -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 - -I variants/wio-tracker-l1 - -D WIO_TRACKER_L1 - -D WIO_TRACKER_L1_EINK - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D PIN_OLED_RESET=-1 - -D EINK_DISPLAY_MODEL=GxEPD2_213_B74 - -D EINK_SCALE_X=1.953125f - -D EINK_SCALE_Y=1.28f - -D EINK_X_OFFSET=0 - -D EINK_Y_OFFSET=10 - -D DISPLAY_ROTATION=1 - -D DISABLE_DIAGNOSTIC_OUTPUT - -D AUTO_OFF_MILLIS=0 - -D GPS_BAUD_RATE=9600 - -D ENV_PIN_SDA=PIN_WIRE1_SDA - -D ENV_PIN_SCL=PIN_WIRE1_SCL -build_src_filter = ${nrf52_base.build_src_filter} - + - +<../variants/wio-tracker-l1> - + - + -lib_deps= ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - adafruit/Adafruit GFX Library @ ^1.12.1 - zinggjm/GxEPD2 @ 1.6.2 - bakercp/CRC32 @ ^2.0.0 - -[env:WioTrackerL1Eink_companion_radio_ble] -extends = WioTrackerL1Eink -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${WioTrackerL1Eink.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=GxEPDDisplay - -D UI_HAS_JOYSTICK=1 - -D PIN_BUZZER=12 - -D QSPIFLASH=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 - -D UI_RECENT_LIST_SIZE=6 - -D UI_SENSORS_PAGE=1 -build_src_filter = ${WioTrackerL1Eink.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = ${WioTrackerL1Eink.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 -debug_tool=stlink diff --git a/variants/wio-tracker-l1/WioTrackerL1Board.cpp b/variants/wio-tracker-l1/WioTrackerL1Board.cpp deleted file mode 100644 index 4153714e..00000000 --- a/variants/wio-tracker-l1/WioTrackerL1Board.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -#include "WioTrackerL1Board.h" - -void WioTrackerL1Board::begin() { - NRF52BoardDCDC::begin(); - btn_prev_state = HIGH; - - pinMode(PIN_VBAT_READ, INPUT); // VBAT ADC input - // Set all button pins to INPUT_PULLUP - pinMode(PIN_BUTTON1, INPUT_PULLUP); - pinMode(PIN_BUTTON2, INPUT_PULLUP); - pinMode(PIN_BUTTON3, INPUT_PULLUP); - pinMode(PIN_BUTTON4, INPUT_PULLUP); - pinMode(PIN_BUTTON5, INPUT_PULLUP); - pinMode(PIN_BUTTON6, INPUT_PULLUP); - - - #if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL) - Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL); - #endif - - Wire.begin(); - - #ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, LOW); - #endif - - delay(10); // give sx1262 some time to power up -} diff --git a/variants/wio-tracker-l1/WioTrackerL1Board.h b/variants/wio-tracker-l1/WioTrackerL1Board.h deleted file mode 100644 index bfd87d39..00000000 --- a/variants/wio-tracker-l1/WioTrackerL1Board.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#include -#include -#include - -class WioTrackerL1Board : public NRF52BoardDCDC, public NRF52BoardOTA { -protected: - uint8_t btn_prev_state; - -public: - WioTrackerL1Board() : NRF52BoardOTA("WioTrackerL1 OTA") {} - void begin(); - -#if defined(P_LORA_TX_LED) - void onBeforeTransmit() override { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - } - void onAfterTransmit() override { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - } -#endif - - uint16_t getBattMilliVolts() override { - int adcvalue = 0; - analogReadResolution(12); - analogReference(AR_INTERNAL); - delay(10); - adcvalue = analogRead(PIN_VBAT_READ); - return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE) / 4.096; - } - - const char* getManufacturerName() const override { - return "Seeed Wio Tracker L1"; - } - - void powerOff() override { - sd_power_system_off(); - } -}; diff --git a/variants/wio-tracker-l1/platformio.ini b/variants/wio-tracker-l1/platformio.ini deleted file mode 100644 index 75651d69..00000000 --- a/variants/wio-tracker-l1/platformio.ini +++ /dev/null @@ -1,110 +0,0 @@ -[WioTrackerL1] -extends = nrf52_base -board = seeed-wio-tracker-l1 -board_build.ldscript = boards/nrf52840_s140_v7.ld -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I lib/nrf52/s140_nrf52_7.3.0_API/include - -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 - -I variants/wio-tracker-l1 - -D WIO_TRACKER_L1 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D PIN_OLED_RESET=-1 - -D GPS_BAUD_RATE=9600 -build_src_filter = ${nrf52_base.build_src_filter} - + - +<../variants/wio-tracker-l1> - + - + -lib_deps= ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - adafruit/Adafruit SH110X @ ^2.1.13 - adafruit/Adafruit GFX Library @ ^1.12.1 - -[env:WioTrackerL1_repeater] -extends = WioTrackerL1 -build_src_filter = ${WioTrackerL1.build_src_filter} - +<../examples/simple_repeater> -build_flags = - ${WioTrackerL1.build_flags} - -D ADVERT_NAME='"WioTrackerL1 Repeater"' - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D DISPLAY_CLASS=SH1106Display -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = ${WioTrackerL1.lib_deps} - adafruit/RTClib @ ^2.1.3 - -[env:WioTrackerL1_room_server] -extends = WioTrackerL1 -build_src_filter = ${WioTrackerL1.build_src_filter} - +<../examples/simple_room_server> -build_flags = ${WioTrackerL1.build_flags} - -D ADVERT_NAME='"WioTrackerL1 Room"' - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' - -D DISPLAY_CLASS=SH1106Display -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = ${WioTrackerL1.lib_deps} - adafruit/RTClib @ ^2.1.3 - -[env:WioTrackerL1_companion_radio_usb] -extends = WioTrackerL1 -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${WioTrackerL1.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SH1106Display - -D UI_HAS_JOYSTICK=1 - -D OFFLINE_QUEUE_SIZE=256 - -D PIN_BUZZER=12 - -D QSPIFLASH=1 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${WioTrackerL1.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> - + - + -lib_deps = ${WioTrackerL1.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:WioTrackerL1_companion_radio_ble] -extends = WioTrackerL1 -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = ${WioTrackerL1.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=SH1106Display - -D UI_HAS_JOYSTICK=1 - -D PIN_BUZZER=12 - -D QSPIFLASH=1 - -D ADVERT_NAME='"@@MAC"' - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -build_src_filter = ${WioTrackerL1.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = ${WioTrackerL1.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/variants/wio-tracker-l1/target.cpp b/variants/wio-tracker-l1/target.cpp deleted file mode 100644 index 64866de0..00000000 --- a/variants/wio-tracker-l1/target.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include "target.h" -#include -#include - -WioTrackerL1Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#ifdef ENV_INCLUDE_GPS -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); -EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else -EnvironmentSensorManager sensors = EnvironmentSensorManager(); -#endif - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true, false, false); - MomentaryButton joystick_left(JOYSTICK_LEFT, 1000, true, false, false); - MomentaryButton joystick_right(JOYSTICK_RIGHT, 1000, true, false, false); - MomentaryButton back_btn(PIN_BACK_BTN, 1000, true, false, true); -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/wio-tracker-l1/target.h b/variants/wio-tracker-l1/target.h deleted file mode 100644 index 97e575d8..00000000 --- a/variants/wio-tracker-l1/target.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #if defined(WIO_TRACKER_L1_EINK) - #include - #else - #include - #endif - #include -#endif -#include - -extern WioTrackerL1Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; - extern MomentaryButton joystick_left; - extern MomentaryButton joystick_right; - extern MomentaryButton back_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/wio-tracker-l1/variant.cpp b/variants/wio-tracker-l1/variant.cpp deleted file mode 100644 index 4fc2606a..00000000 --- a/variants/wio-tracker-l1/variant.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" -#include "nrf.h" - -const uint32_t g_ADigitalPinMap[] = { - // D0 .. D10 - Peripheral control pins - 41, // D0 P1.09 GNSS_WAKEUP - 7, // D1 P0.07 LORA_DIO1 - 39, // D2 P1,07 LORA_RESET - 42, // D3 P1.10 LORA_BUSY - 46, // D4 P1.14 (A4/SDA) LORA_CS - 40, // D5 P1.08 (A5/SCL) LORA_SW - 27, // D6 P0.27 (UART_TX) GNSS_TX - 26, // D7 P0.26 (UART_RX) GNSS_RX - 30, // D8 P0.30 (SPI_SCK) LORA_SCK - 3, // D9 P0.3 (SPI_MISO) LORA_MISO - 28, // D10 P0.28 (SPI_MOSI) LORA_MOSI - - // D11-D12 - LED outputs - 33, // D11 P1.1 User LED - // Buzzzer - 32, // D12 P1.0 Buzzer - - // D13 - User input - 8, // D13 P0.08 User Button - - // D14-D15 - OLED - 6, // D14 P0.06 OLED SDA - 5, // D15 P0.05 OLED SCL - - // D16 - Battery voltage ADC input - 31, // D16 P0.31 VBAT_ADC - // GROVE - 43, // D17 P0.00 GROVE SDA - 44, // D18 P0.01 GROVE SCL - - // FLASH - 21, // D19 P0.21 (QSPI_SCK) - 25, // D20 P0.25 (QSPI_CSN) - 20, // D21 P0.20 (QSPI_SIO_0 DI) - 24, // D22 P0.24 (QSPI_SIO_1 DO) - 22, // D23 P0.22 (QSPI_SIO_2 WP) - 23, // D24 P0.23 (QSPI_SIO_3 HOLD) - - // JOYSTICK - 36, // D25 TB_UP - 12, // D26 TB_DOWN - 11, // D27 TB_LEFT - 35, // D28 TB_RIGHT - 37, // D29 TB_PRESS - - // VBAT ENABLE - 4, // D30 BAT_CTL - - // EINK - 13, // 31 SCK - 14, // 32 RST - 15, // 33 MOSI - 16, // 34 DC - 17, // 35 BUSY - 19, // 36 CS - 0xFF, // 37 MISO -}; - -void initVariant() { - pinMode(PIN_QSPI_CS, OUTPUT); - digitalWrite(PIN_QSPI_CS, HIGH); - - // VBAT_ENABLE - pinMode(VBAT_ENABLE, OUTPUT); - digitalWrite(VBAT_ENABLE, HIGH); - - // set LED pin as output and set it low - pinMode(PIN_LED, OUTPUT); - digitalWrite(PIN_LED, LOW); - - // set buzzer pin as output and set it low - pinMode(12, OUTPUT); - digitalWrite(12, LOW); - pinMode(12, OUTPUT); -} diff --git a/variants/wio-tracker-l1/variant.h b/variants/wio-tracker-l1/variant.h deleted file mode 100644 index 86ad62ba..00000000 --- a/variants/wio-tracker-l1/variant.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef _SEEED_WIO_TRACKER_L1_H_ -#define _SEEED_WIO_TRACKER_L1_H_ - -/** Master clock frequency */ -#define VARIANT_MCK (64000000ul) - -#define USE_LFXO // Board uses 32khz crystal for LF - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" - -#define PINS_COUNT (38) -#define NUM_DIGITAL_PINS (38) -#define NUM_ANALOG_INPUTS (8) -#define NUM_ANALOG_OUTPUTS (0) - -// LEDs -#define PIN_LED (11) -#define LED_BLUE (-1) // Disable annoying flashing caused by Bluefruit -#define LED_BUILTIN PIN_LED -#define P_LORA_TX_LED PIN_LED -#define LED_STATE_ON 1 - -// Buttons -#define PIN_BUTTON1 (13) // Menu / User Button -#define PIN_BUTTON2 (25) // Joystick Up -#define PIN_BUTTON3 (26) // Joystick Down -#define PIN_BUTTON4 (27) // Joystick Left -#define PIN_BUTTON5 (28) // Joystick Right -#define PIN_BUTTON6 (29) // Joystick Press -#define PIN_BACK_BTN PIN_BUTTON1 -#define JOYSTICK_UP PIN_BUTTON2 -#define JOYSTICK_DOWN PIN_BUTTON3 -#define JOYSTICK_LEFT PIN_BUTTON4 -#define JOYSTICK_RIGHT PIN_BUTTON5 -#define JOYSTICK_PRESS PIN_BUTTON6 -#define PIN_USER_BTN PIN_BUTTON6 - -// Buzzer -// #define PIN_BUZZER (12) // Buzzer pin (defined per firmware type) - -#define VBAT_ENABLE (30) - -// Analog pins -#define PIN_VBAT_READ (16) -#define AREF_VOLTAGE (3.6F) -#define ADC_MULTIPLIER (2.0F) -#define ADC_RESOLUTION (12) - -// Serial interfaces -#define PIN_SERIAL1_RX (7) -#define PIN_SERIAL1_TX (6) - -// SPI Interfaces -#define SPI_INTERFACES_COUNT (2) - -#define PIN_SPI_MISO (9) -#define PIN_SPI_MOSI (10) -#define PIN_SPI_SCK (8) - -// Lora Pins -#define P_LORA_SCLK PIN_SPI_SCK -#define P_LORA_MISO PIN_SPI_MISO -#define P_LORA_MOSI PIN_SPI_MOSI -#define P_LORA_DIO_1 (1) -#define P_LORA_RESET (2) -#define P_LORA_BUSY (3) -#define P_LORA_NSS (4) -#define SX126X_RXEN (5) -#define SX126X_TXEN RADIOLIB_NC -#define SX126X_DIO2_AS_RF_SWITCH true -#define SX126X_DIO3_TCXO_VOLTAGE (1.8f) - -// Wire Interfaces -#define WIRE_INTERFACES_COUNT (2) - -#define PIN_WIRE_SDA (14) -#define PIN_WIRE_SCL (15) -#define PIN_WIRE1_SDA (18) -#define PIN_WIRE1_SCL (17) -#define I2C_NO_RESCAN -#define DISPLAY_ADDRESS 0x3D // SH1106 OLED I2C address - -// GPS L76KB -#define GPS_BAUDRATE 9600 -#define PIN_GPS_TX PIN_SERIAL1_RX -#define PIN_GPS_RX PIN_SERIAL1_TX -#define PIN_GPS_STANDBY (0) -#define PIN_GPS_EN (PIN_GPS_STANDBY) - -// QSPI Pins -#define PIN_QSPI_SCK (19) -#define PIN_QSPI_CS (20) -#define PIN_QSPI_IO0 (21) -#define PIN_QSPI_IO1 (22) -#define PIN_QSPI_IO2 (23) -#define PIN_QSPI_IO3 (24) - -#define EXTERNAL_FLASH_DEVICES P25Q16H -#define EXTERNAL_FLASH_USE_QSPI - -// EInk on SPI1 -#define PIN_DISPLAY_CS (36) -#define PIN_DISPLAY_BUSY (35) -#define PIN_DISPLAY_DC (34) -#define PIN_DISPLAY_RST (32) - -#define PIN_SPI1_MISO (37) -#define PIN_SPI1_MOSI (33) -#define PIN_SPI1_SCK (31) - -// GxEPD2 needs that for a panel that is not even used ! -extern const int MISO; -extern const int MOSI; -extern const int SCK; - -#endif \ No newline at end of file diff --git a/variants/wio_wm1110/WioWM1110Board.cpp b/variants/wio_wm1110/WioWM1110Board.cpp deleted file mode 100644 index d0ab9785..00000000 --- a/variants/wio_wm1110/WioWM1110Board.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#ifdef WIO_WM1110 - -#include -#include -#include - -#include "WioWM1110Board.h" - -static BLEDfu bledfu; - -static void connect_callback(uint16_t conn_handle) { - (void)conn_handle; - MESH_DEBUG_PRINTLN("BLE client connected"); -} - -static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { - (void)conn_handle; - (void)reason; - - MESH_DEBUG_PRINTLN("BLE client disconnected"); -} - -void WioWM1110Board::begin() { - NRF52BoardDCDC::begin(); - - pinMode(BATTERY_PIN, INPUT); - pinMode(LED_GREEN, OUTPUT); - pinMode(LED_RED, OUTPUT); - pinMode(SENSOR_POWER_PIN, OUTPUT); - - digitalWrite(LED_GREEN, HIGH); - digitalWrite(LED_RED, LOW); - digitalWrite(SENSOR_POWER_PIN, LOW); - - Serial1.begin(115200); - -#if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL) - Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL); -#endif - - Wire.begin(); - - delay(10); -} - -bool WioWM1110Board::startOTAUpdate(const char *id, char reply[]) { - Bluefruit.configPrphBandwidth(BANDWIDTH_MAX); - Bluefruit.configPrphConn(92, BLE_GAP_EVENT_LENGTH_MIN, 16, 16); - - Bluefruit.begin(1, 0); - Bluefruit.setTxPower(4); - Bluefruit.setName("WM1110_OTA"); - - Bluefruit.Periph.setConnectCallback(connect_callback); - Bluefruit.Periph.setDisconnectCallback(disconnect_callback); - - bledfu.begin(); - - Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); - Bluefruit.Advertising.addTxPower(); - Bluefruit.Advertising.addName(); - Bluefruit.Advertising.restartOnDisconnect(true); - Bluefruit.Advertising.setInterval(32, 244); - Bluefruit.Advertising.setFastTimeout(30); - Bluefruit.Advertising.start(0); - - strcpy(reply, "OK - started"); - return true; -} - -#endif - diff --git a/variants/wio_wm1110/WioWM1110Board.h b/variants/wio_wm1110/WioWM1110Board.h deleted file mode 100644 index 697028b0..00000000 --- a/variants/wio_wm1110/WioWM1110Board.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include -#include -#include - -#ifdef WIO_WM1110 - -#ifdef Serial - #undef Serial -#endif -#define Serial Serial1 - -class WioWM1110Board : public NRF52BoardDCDC { -public: - void begin(); - -#if defined(LED_GREEN) - void onBeforeTransmit() override { - digitalWrite(LED_RED, HIGH); - } - void onAfterTransmit() override { - digitalWrite(LED_RED, LOW); - } -#endif - - uint16_t getBattMilliVolts() override { - int adcvalue = 0; - analogReadResolution(12); - analogReference(AR_INTERNAL_3_0); - delay(10); - adcvalue = analogRead(BATTERY_PIN); - return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE * 1000.0) / 4096.0; - } - - const char* getManufacturerName() const override { - return "Seeed Wio WM1110"; - } - - bool startOTAUpdate(const char* id, char reply[]) override; - - void enableSensorPower(bool enable) { - digitalWrite(SENSOR_POWER_PIN, enable ? HIGH : LOW); - if (enable) { - delay(100); - } - } -}; - -#endif - diff --git a/variants/wio_wm1110/platformio.ini b/variants/wio_wm1110/platformio.ini deleted file mode 100644 index ec65e706..00000000 --- a/variants/wio_wm1110/platformio.ini +++ /dev/null @@ -1,86 +0,0 @@ -[wio_wm1110] -extends = nrf52_base -board = seeed-xiao-afruitnrf52-nrf52840 -board_build.ldscript = boards/nrf52840_s140_v7.ld -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I lib/nrf52/s140_nrf52_7.3.0_API/include - -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 - -I variants/wio_wm1110 - -D NRF52_PLATFORM - -D WIO_WM1110 -; -D MESH_DEBUG=1 - -D RADIO_CLASS=CustomLR1110 - -D WRAPPER_CLASS=CustomLR1110Wrapper - -D LORA_TX_POWER=22 - -D RX_BOOSTED_GAIN=true - -D P_LORA_DIO_1=40 - -D P_LORA_RESET=42 - -D P_LORA_BUSY=43 - -D P_LORA_NSS=44 - -D P_LORA_SCLK=45 - -D P_LORA_MOSI=46 - -D P_LORA_MISO=47 - -D LR11X0_DIO_AS_RF_SWITCH=true - -D LR11X0_DIO3_TCXO_VOLTAGE=1.8 - -D RF_SWITCH_TABLE - -D ENV_INCLUDE_GPS=0 -build_src_filter = ${nrf52_base.build_src_filter} - + - + - +<../variants/wio_wm1110> -debug_tool = jlink -upload_protocol = jlink -lib_deps = ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - adafruit/Adafruit LIS3DH @ ^1.2.4 - adafruit/Adafruit SHT4x Library @ ^1.0.4 - -[env:wio_wm1110_repeater] -extends = wio_wm1110 -build_flags = - ${wio_wm1110.build_flags} - -D ADVERT_NAME='"WM1110 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${wio_wm1110.build_src_filter} - +<../examples/simple_repeater/*.cpp> - -[env:wio_wm1110_room_server] -extends = wio_wm1110 -build_flags = - ${wio_wm1110.build_flags} - -D ADVERT_NAME='"WM1110 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${wio_wm1110.build_src_filter} - +<../examples/simple_room_server/*.cpp> - -[env:wio_wm1110_companion_radio_ble] -extends = wio_wm1110 -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = - ${wio_wm1110.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D QSPIFLASH=1 - -D OFFLINE_QUEUE_SIZE=256 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${wio_wm1110.build_src_filter} - + - +<../examples/companion_radio/*.cpp> -lib_deps = - ${wio_wm1110.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/wio_wm1110/target.cpp b/variants/wio_wm1110/target.cpp deleted file mode 100644 index c659d708..00000000 --- a/variants/wio_wm1110/target.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include "target.h" -#include - -WioWM1110Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock rtc_clock; -EnvironmentSensorManager sensors; - -#ifndef LORA_CR - #define LORA_CR 5 -#endif - -#ifdef RF_SWITCH_TABLE -static const uint32_t rfswitch_dios[Module::RFSWITCH_MAX_PINS] = { - RADIOLIB_LR11X0_DIO5, - RADIOLIB_LR11X0_DIO6, - RADIOLIB_LR11X0_DIO7, - RADIOLIB_LR11X0_DIO8, - RADIOLIB_NC -}; - -static const Module::RfSwitchMode_t rfswitch_table[] = { - // mode DIO5 DIO6 DIO7 DIO8 - { LR11x0::MODE_STBY, {LOW, LOW, LOW, LOW }}, - { LR11x0::MODE_RX, {HIGH, LOW, LOW, HIGH }}, - { LR11x0::MODE_TX, {HIGH, HIGH, LOW, HIGH }}, - { LR11x0::MODE_TX_HP, {LOW, HIGH, LOW, HIGH }}, - { LR11x0::MODE_TX_HF, {LOW, LOW, LOW, LOW }}, - { LR11x0::MODE_GNSS, {LOW, LOW, HIGH, LOW }}, - { LR11x0::MODE_WIFI, {LOW, LOW, LOW, LOW }}, - END_OF_MODE_TABLE, -}; -#endif - -bool radio_init() { - board.enableSensorPower(true); - -#ifdef LR11X0_DIO3_TCXO_VOLTAGE - float tcxo = LR11X0_DIO3_TCXO_VOLTAGE; -#else - float tcxo = 1.8f; -#endif - - SPI.setPins(P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); - SPI.begin(); - - int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_LR11X0_LORA_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo); - if (status != RADIOLIB_ERR_NONE) { - Serial.print("ERROR: radio init failed: "); - Serial.println(status); - return false; // fail - } - - radio.setCRC(2); - radio.explicitHeader(); - -#ifdef RF_SWITCH_TABLE - radio.setRfSwitchTable(rfswitch_dios, rfswitch_table); -#endif - -#ifdef RX_BOOSTED_GAIN - radio.setRxBoostedGainMode(RX_BOOSTED_GAIN); -#endif - - return true; // success -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - diff --git a/variants/wio_wm1110/target.h b/variants/wio_wm1110/target.h deleted file mode 100644 index 9bd4a22b..00000000 --- a/variants/wio_wm1110/target.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include "WioWM1110Board.h" -#include -#include -#include - -extern WioWM1110Board board; -extern WRAPPER_CLASS radio_driver; -extern VolatileRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); - diff --git a/variants/wio_wm1110/variant.cpp b/variants/wio_wm1110/variant.cpp deleted file mode 100644 index 9691a304..00000000 --- a/variants/wio_wm1110/variant.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * variant.cpp - Seeed Wio WM1110 Dev Board - * Pin mapping for nRF52840 - */ - -#include "variant.h" -#include "wiring_constants.h" -#include "wiring_digital.h" - -const uint32_t g_ADigitalPinMap[PINS_COUNT + 1] = -{ - 0, // P0.00 - 1, // P0.01 - 2, // P0.02, AIN0, SENSOR_AIN_0 - 3, // P0.03, AIN1, SENSOR_AIN_1 - 4, // P0.04, AIN2, SENSOR_AIN_2 - 5, // P0.05, AIN3, SENSOR_AIN_3 - 6, // P0.06, PIN_SERIAL2_RX, SENSOR_RXD - 7, // P0.07, SENSOR_POWER_PIN - 8, // P0.08, PIN_SERIAL2_TX, SENSOR_TXD - 9, // P0.09 - 10, // P0.10 - 11, // P0.11, LIS3DH_INT_PIN_1, SENSOR_INT_1 - 12, // P0.12, LIS3DH_INT_PIN_2, SENSOR_INT_2 - 13, // P0.13, LED_GREEN, USER_LED_G - 14, // P0.14, LED_RED, USER_LED_R - 15, // P0.15 - 16, // P0.16 - 17, // P0.17 - 18, // P0.18 - 19, // P0.19 - 20, // P0.20 - 21, // P0.21 - 22, // P0.22, PIN_SERIAL1_RX, DEBUG_RX_PIN - 23, // P0.23 - 24, // P0.24, PIN_SERIAL1_TX, DEBUG_TX_PIN - 25, // P0.25 - 26, // P0.26, PIN_WIRE_SCL, SENSOR_SCL - 27, // P0.27, PIN_WIRE_SDA, SENSOR_SDA - 28, // P0.28, AIN4, SENSOR_AIN_4 - 29, // P0.29, AIN5, SENSOR_AIN_5 - 30, // P0.30, AIN6, SENSOR_AIN_6 - 31, // P0.31, AIN7, SENSOR_AIN_7, BATTERY_PIN - 32, // P1.00 - 33, // P1.01 - 34, // P1.02 - 35, // P1.03 - 36, // P1.04 - 37, // P1.05, LR1110_GNSS_ANT_PIN - 38, // P1.06 - 39, // P1.07 - 40, // P1.08, LORA_DIO_1, LR1110_IRQ_PIN - 41, // P1.09 - 42, // P1.10, LORA_RESET, LR1110_NRESET_PIN - 43, // P1.11, LORA_BUSY, LR1110_BUSY_PIN - 44, // P1.12, PIN_SPI_NSS, LR1110_SPI_NSS_PIN - 45, // P1.13, PIN_SPI_SCK, LR1110_SPI_SCK_PIN - 46, // P1.14, PIN_SPI_MOSI, LR1110_SPI_MOSI_PIN - 47, // P1.15, PIN_SPI_MISO, LR1110_SPI_MISO_PIN - 255, // NRFX_SPIM_PIN_NOT_USED -}; - -void initVariant() -{ - // All pins output HIGH by default. - // https://github.com/Seeed-Studio/Adafruit_nRF52_Arduino/blob/fab7d30a997a1dfeef9d1d59bfb549adda73815a/cores/nRF5/wiring.c#L65-L69 - - // Set analog input pins - pinMode(BATTERY_PIN, INPUT); - pinMode(SENSOR_AIN_0, INPUT); - pinMode(SENSOR_AIN_1, INPUT); - pinMode(SENSOR_AIN_2, INPUT); - pinMode(SENSOR_AIN_3, INPUT); - pinMode(SENSOR_AIN_4, INPUT); - pinMode(SENSOR_AIN_5, INPUT); - pinMode(SENSOR_AIN_6, INPUT); - - // Sensor interrupts as inputs - pinMode(LIS3DH_INT_PIN_1, INPUT); - pinMode(LIS3DH_INT_PIN_2, INPUT); - - // Set output pins - pinMode(LED_GREEN, OUTPUT); - pinMode(LED_RED, OUTPUT); - pinMode(SENSOR_POWER_PIN, OUTPUT); - - // Initialize outputs to safe states - digitalWrite(LED_GREEN, HIGH); // Power indicator LED on - digitalWrite(LED_RED, LOW); - digitalWrite(SENSOR_POWER_PIN, LOW); // Sensors powered off initially -} - diff --git a/variants/wio_wm1110/variant.h b/variants/wio_wm1110/variant.h deleted file mode 100644 index cc72c328..00000000 --- a/variants/wio_wm1110/variant.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * variant.h - Seeed Wio WM1110 Dev Board - * nRF52840 + LR1110 (LoRa + GNSS + WiFi Scanner) - */ - -#pragma once - -#include "WVariant.h" - -//////////////////////////////////////////////////////////////////////////////// -// Low frequency clock source - -#define USE_LFXO // 32.768 kHz crystal oscillator -#define VARIANT_MCK (64000000ul) - -//////////////////////////////////////////////////////////////////////////////// -// Power - -#define BATTERY_PIN (31) // AIN7 -#define BATTERY_IMMUTABLE -#define ADC_MULTIPLIER (2.0F) - -#define ADC_RESOLUTION (14) -#define BATTERY_SENSE_RES (12) - -#define AREF_VOLTAGE (3.0) - -//////////////////////////////////////////////////////////////////////////////// -// Number of pins - -#define PINS_COUNT (48) -#define NUM_DIGITAL_PINS (48) -#define NUM_ANALOG_INPUTS (8) -#define NUM_ANALOG_OUTPUTS (0) - -//////////////////////////////////////////////////////////////////////////////// -// UART pin definition - -#define PIN_SERIAL1_RX (22) -#define PIN_SERIAL1_TX (24) - -#define PIN_SERIAL2_RX (6) -#define PIN_SERIAL2_TX (8) - -//////////////////////////////////////////////////////////////////////////////// -// I2C pin definition - -#define HAS_WIRE (1) -#define WIRE_INTERFACES_COUNT (1) - -#define PIN_WIRE_SDA (27) -#define PIN_WIRE_SCL (26) -#define I2C_NO_RESCAN - -#define SENSOR_POWER_PIN (7) - -#define HAS_LIS3DH (1) -#define LIS3DH_INT_PIN_1 (11) -#define LIS3DH_INT_PIN_2 (12) - -#define HAS_SHT41 (1) - -//////////////////////////////////////////////////////////////////////////////// -// SPI pin definition - -#define SPI_INTERFACES_COUNT (1) - -#define PIN_SPI_MISO (47) -#define PIN_SPI_MOSI (46) -#define PIN_SPI_SCK (45) -#define PIN_SPI_NSS (44) - -//////////////////////////////////////////////////////////////////////////////// -// Builtin LEDs - -#define LED_BUILTIN (13) -#define LED_GREEN (13) -#define LED_RED (14) -#define LED_BLUE LED_RED -#define LED_PIN LED_GREEN - -#define LED_STATE_ON HIGH - -//////////////////////////////////////////////////////////////////////////////// -// Builtin buttons - -#define PIN_BUTTON1 (-1) -#define BUTTON_PIN PIN_BUTTON1 - -//////////////////////////////////////////////////////////////////////////////// -// LR1110 LoRa Radio + GNSS + WiFi - -#define LORA_DIO_1 (40) // P1.8 - LR1110_IRQ_PIN -#define LORA_NSS (PIN_SPI_NSS) // P1.12 -#define LORA_RESET (42) // P1.10 - LR1110_NRESET_PIN -#define LORA_BUSY (43) // P1.11 - LR1110_BUSY_PIN -#define LORA_SCLK (PIN_SPI_SCK) // P1.13 -#define LORA_MISO (PIN_SPI_MISO) // P1.15 -#define LORA_MOSI (PIN_SPI_MOSI) // P1.14 -#define LORA_CS PIN_SPI_NSS // P1.12 - -// LR1110 specific settings -#define LR11X0_DIO_AS_RF_SWITCH true -#define LR11X0_DIO3_TCXO_VOLTAGE 1.8 -#define LR1110_GNSS_ANT_PIN (37) // P1.5 - -// Pin aliases for LR1110 driver compatibility -#define LR1110_IRQ_PIN LORA_DIO_1 -#define LR1110_NRESET_PIN LORA_RESET -#define LR1110_BUSY_PIN LORA_BUSY -#define LR1110_SPI_NSS_PIN LORA_CS -#define LR1110_SPI_SCK_PIN LORA_SCLK -#define LR1110_SPI_MOSI_PIN LORA_MOSI -#define LR1110_SPI_MISO_PIN LORA_MISO - -//////////////////////////////////////////////////////////////////////////////// -// Analog Input Pins - -#define SENSOR_AIN_0 (2) -#define SENSOR_AIN_1 (3) -#define SENSOR_AIN_2 (4) -#define SENSOR_AIN_3 (5) -#define SENSOR_AIN_4 (28) -#define SENSOR_AIN_5 (29) -#define SENSOR_AIN_6 (30) -#define SENSOR_AIN_7 (31) - -static const uint8_t A0 = SENSOR_AIN_0; -static const uint8_t A1 = SENSOR_AIN_1; -static const uint8_t A2 = SENSOR_AIN_2; -static const uint8_t A3 = SENSOR_AIN_3; -static const uint8_t A4 = SENSOR_AIN_4; -static const uint8_t A5 = SENSOR_AIN_5; -static const uint8_t A6 = SENSOR_AIN_6; -static const uint8_t A7 = SENSOR_AIN_7; - -//////////////////////////////////////////////////////////////////////////////// -// GPS/GNSS - -#define HAS_GPS 0 -#define PIN_GPS_TX (-1) -#define PIN_GPS_RX (-1) -#define GPS_EN (-1) -#define GPS_RESET (-1) - diff --git a/variants/xiao_c3/XiaoC3Board.h b/variants/xiao_c3/XiaoC3Board.h deleted file mode 100644 index 6ea1c15f..00000000 --- a/variants/xiao_c3/XiaoC3Board.h +++ /dev/null @@ -1,112 +0,0 @@ -#pragma once - -#include -#include - -#include -#include - -class XiaoC3Board : public ESP32Board { -public: - void begin() { - ESP32Board::begin(); - - esp_reset_reason_t reason = esp_reset_reason(); - if (reason == ESP_RST_DEEPSLEEP) { - long wakeup_source = esp_sleep_get_gpio_wakeup_status(); // esp_sleep_get_ext1_wakeup_status(); - if (wakeup_source & (1 << P_LORA_DIO_1)) { // received a LoRa packet (while in deep sleep) - startup_reason = BD_STARTUP_RX_PACKET; - } - - #if defined(LORA_TX_BOOST_PIN) - gpio_hold_dis((gpio_num_t) LORA_TX_BOOST_PIN); - gpio_deep_sleep_hold_dis(); - #endif - } - - #ifdef PIN_VBAT_READ - // battery read support - pinMode(PIN_VBAT_READ, INPUT); - #endif - - #ifdef LORA_TX_BOOST_PIN - pinMode(LORA_TX_BOOST_PIN, OUTPUT); - digitalWrite(LORA_TX_BOOST_PIN, HIGH); - #endif - - #ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, LOW); - #endif - } - - void enterDeepSleep(uint32_t secs, int8_t wake_pin = -1) { - gpio_set_direction(gpio_num_t(P_LORA_DIO_1), GPIO_MODE_INPUT); - if (wake_pin >= 0) { - gpio_set_direction((gpio_num_t)wake_pin, GPIO_MODE_INPUT); - } - - //hold disable, isolate and power domain config functions may be unnecessary - //gpio_deep_sleep_hold_dis(); - //esp_sleep_config_gpio_isolate(); - gpio_deep_sleep_hold_en(); - -#if defined(LORA_TX_BOOST_PIN) - gpio_hold_en((gpio_num_t) LORA_TX_BOOST_PIN); - gpio_deep_sleep_hold_en(); -#endif - esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); - - if (wake_pin >= 0) { - esp_deep_sleep_enable_gpio_wakeup((1 << P_LORA_DIO_1) | (1 << wake_pin), ESP_GPIO_WAKEUP_GPIO_HIGH); - } else { - esp_deep_sleep_enable_gpio_wakeup(1 << P_LORA_DIO_1, ESP_GPIO_WAKEUP_GPIO_HIGH); - } - - if (secs > 0) { - esp_sleep_enable_timer_wakeup(secs * 1000000); - } - - // Finally set ESP32 into sleep - esp_deep_sleep_start(); // CPU halts here and never returns! - } - -#if defined(LORA_TX_BOOST_PIN) || defined(P_LORA_TX_LED) - void onBeforeTransmit() override { - #if defined(P_LORA_TX_LED) - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - #endif - #if defined(LORA_TX_BOOST_PIN) - digitalWrite(LORA_TX_BOOST_PIN, LOW); - delay(5); - #endif - } - void onAfterTransmit() override { - #if defined(LORA_TX_BOOST_PIN) - digitalWrite(LORA_TX_BOOST_PIN, HIGH); - #endif - #if defined(P_LORA_TX_LED) - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - #endif - } -#endif - - uint16_t getBattMilliVolts() override { - #ifdef PIN_VBAT_READ - analogReadResolution(10); - uint32_t raw = 0; - for (int i = 0; i < 8; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / 8; - - return ((5.78 * raw) / 1024.0) * 1000; - #else - return 0; // not supported - #endif - } - - const char* getManufacturerName() const override { - return "Xiao C3"; - } -}; diff --git a/variants/xiao_c3/platformio.ini b/variants/xiao_c3/platformio.ini deleted file mode 100644 index 76b72174..00000000 --- a/variants/xiao_c3/platformio.ini +++ /dev/null @@ -1,125 +0,0 @@ -[Xiao_esp32_C3] -extends = esp32_base -board = seeed_xiao_esp32c3 -build_flags = - ${esp32_base.build_flags} - ${sensor_base.build_flags} - -UENV_INCLUDE_GPS - -UENV_INCLUDE_VL53L0X - -I variants/xiao_c3 - -D ESP32_CPU_FREQ=80 - -D PIN_VBAT_READ=D0 - -D P_LORA_DIO_1=D1 - -D P_LORA_NSS=D4 - -D P_LORA_RESET=D2 - -D P_LORA_BUSY=D3 - -D PIN_BOARD_SDA=D6 - -D PIN_BOARD_SCL=D7 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 - -D SX126X_RXEN=D5 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 -build_src_filter = ${esp32_base.build_src_filter} - +<../variants/xiao_c3> - + -lib_deps = - ${esp32_base.lib_deps} - ${sensor_base.lib_deps} - -[env:Xiao_C3_repeater] -extends = Xiao_esp32_C3 -build_src_filter = ${Xiao_esp32_C3.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Xiao_esp32_C3.build_flags} - -D ADVERT_NAME='"Xiao C3 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - bakercp/CRC32 @ ^2.0.0 - -[env:Xiao_C3_room_server] -extends = Xiao_esp32_C3 -build_src_filter = ${Xiao_esp32_C3.build_src_filter} - +<../examples/simple_room_server/*.cpp> -build_flags = - ${Xiao_esp32_C3.build_flags} - -D ADVERT_NAME='"Xiao C3 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - bakercp/CRC32 @ ^2.0.0 - -[env:Xiao_C3_companion_radio_ble] -extends = Xiao_esp32_C3 -build_src_filter = ${Xiao_esp32_C3.build_src_filter} - +<../examples/companion_radio/*.cpp> - + -build_flags = - ${Xiao_esp32_C3.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 - ; -D BLE_DEBUG_LOGGING=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Xiao_C3_companion_radio_usb] -extends = Xiao_esp32_C3 -build_src_filter = ${Xiao_esp32_C3.build_src_filter} - +<../examples/companion_radio/*.cpp> - + -build_flags = - ${Xiao_esp32_C3.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 - ; -D BLE_DEBUG_LOGGING=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Xiao_C3_companion_radio_wifi] -extends = Xiao_esp32_C3 -build_src_filter = ${Xiao_esp32_C3.build_src_filter} - +<../examples/companion_radio/*.cpp> - + -build_flags = - ${Xiao_esp32_C3.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 - -D WIFI_DEBUG_LOGGING=1 - -D WIFI_SSID='"myssid"' - -D WIFI_PWD='"mypwd"' - ; -D BLE_DEBUG_LOGGING=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_esp32_C3.lib_deps} - ${esp32_ota.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/xiao_c3/target.cpp b/variants/xiao_c3/target.cpp deleted file mode 100644 index fe3f7196..00000000 --- a/variants/xiao_c3/target.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include "target.h" - -XiaoC3Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -#if ENV_INCLUDE_GPS - #include - MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); - EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else - EnvironmentSensorManager sensors; -#endif - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - -#if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/xiao_c3/target.h b/variants/xiao_c3/target.h deleted file mode 100644 index a7ef4421..00000000 --- a/variants/xiao_c3/target.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include - -extern XiaoC3Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/xiao_c6/XiaoC6Board.cpp b/variants/xiao_c6/XiaoC6Board.cpp deleted file mode 100644 index 555fed62..00000000 --- a/variants/xiao_c6/XiaoC6Board.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include "target.h" - -XiaoC6Board board; - -#if defined(P_LORA_SCLK) - static SPIClass spi(0); - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - -#if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} - - diff --git a/variants/xiao_c6/XiaoC6Board.h b/variants/xiao_c6/XiaoC6Board.h deleted file mode 100644 index 86c3475c..00000000 --- a/variants/xiao_c6/XiaoC6Board.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include -#include - -class XiaoC6Board : public ESP32Board { -public: - void begin() { - ESP32Board::begin(); - -#ifdef USE_XIAO_ESP32C6_EXTERNAL_ANTENNA -// Connect an external antenna to your XIAO ESP32C6 otherwise, it may be damaged! - pinMode(3, OUTPUT); - digitalWrite(3, LOW); // Activate RF switch control - - delay(100); - - pinMode(14, OUTPUT); - digitalWrite(14, HIGH); // Use external antenna -#endif - } - - const char* getManufacturerName() const override { - return "Xiao C6"; - } -}; - - diff --git a/variants/xiao_c6/platformio.ini b/variants/xiao_c6/platformio.ini deleted file mode 100644 index 8f02dc87..00000000 --- a/variants/xiao_c6/platformio.ini +++ /dev/null @@ -1,185 +0,0 @@ -[Xiao_C6] -extends = esp32c6_base -board = esp32-c6-devkitm-1 -board_build.partitions = min_spiffs.csv ; get around 4mb flash limit -build_flags = - ${esp32c6_base.build_flags} - -I variants/xiao_c6 - -D ARDUINO_USB_CDC_ON_BOOT=1 - -D ARDUINO_USB_MODE=1 - -D P_LORA_TX_LED=15 - -D P_LORA_SCLK=19 - -D P_LORA_MISO=20 - -D P_LORA_MOSI=18 - -D P_LORA_NSS=22 - -D P_LORA_DIO_1=1 - -D P_LORA_BUSY=21 - -D P_LORA_RESET=2 - -D PIN_BOARD_SDA=16 - -D PIN_BOARD_SCL=17 - -D SX126X_RXEN=23 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D DISABLE_WIFI_OTA=1 -build_src_filter = ${esp32c6_base.build_src_filter} - +<../variants/xiao_c6> - + - -[env:Xiao_C6_repeater_] -extends = Xiao_C6 -build_src_filter = ${Xiao_C6.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Xiao_C6.build_flags} - -D ADVERT_NAME='"Xiao C6 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_C6.lib_deps} -; ${esp32_ota.lib_deps} - -[env:Xiao_C6_companion_radio_ble_] -extends = Xiao_C6 -build_flags = ${Xiao_C6.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D ENABLE_PRIVATE_KEY_IMPORT=1 - -D ENABLE_PRIVATE_KEY_EXPORT=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_C6.build_src_filter} - + - - - +<../examples/companion_radio/*.cpp> -lib_deps = - ${Xiao_C6.lib_deps} - densaugeo/base64 @ ~1.4.0 - -; Meshimi variant -[Meshimi] -extends = Xiao_C6 -board_build.partitions = max_app_4MB.csv -build_flags = - ${Xiao_C6.build_flags} - -D P_LORA_TX_LED=15 - -D P_LORA_SCLK=19 - -D P_LORA_MISO=20 - -D P_LORA_MOSI=18 - -D P_LORA_NSS=21 - -D P_LORA_DIO_1=7 - -D P_LORA_BUSY=6 - -D P_LORA_RESET=2 - -D PIN_BOARD_SDA=22 - -D PIN_BOARD_SCL=23 - -D SX126X_RXEN=4 - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D USE_XIAO_ESP32C6_EXTERNAL_ANTENNA=1 - -[env:Meshimi_repeater_] -extends = Meshimi -build_src_filter = ${Meshimi.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Meshimi.build_flags} - -D ADVERT_NAME='"Meshimi Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -lib_deps = - ${Meshimi.lib_deps} - -[env:Meshimi_companion_radio_ble_] -extends = Meshimi -build_flags = ${Meshimi.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D ENABLE_PRIVATE_KEY_IMPORT=1 - -D ENABLE_PRIVATE_KEY_EXPORT=1 -build_src_filter = ${Meshimi.build_src_filter} - + - - - +<../examples/companion_radio/*.cpp> -lib_deps = - ${Meshimi.lib_deps} - densaugeo/base64 @ ~1.4.0 - -; WHY2025 badge variant -; requires soldering 2 pins between the esp32-C6 and the lora chip as shown here: https://wiki.why2025.org/Project:Meshtastic_on_the_WHY2025_badge -; also requires wiping the esp32-P4 -[WHY2025_badge] -extends = Xiao_C6 -board_build.partitions = default_8MB.csv -board_upload.flash_size = 8MB -board_upload.maximum_size = 8388608 -build_flags = - ${Xiao_C6.build_flags} - -D P_LORA_SCLK=6 - -D P_LORA_MISO=2 - -D P_LORA_MOSI=7 - -D P_LORA_NSS=4 - -D P_LORA_DIO_1=5 - -D P_LORA_BUSY=11 - -D P_LORA_RESET=1 - -D SX126X_TXEN=3 - -UPIN_BOARD_SDA - -UPIN_BOARD_SCL - -UP_LORA_TX_LED - -USX126X_RXEN - -USX126X_DIO2_AS_RF_SWITCH - -USX126X_DIO3_TCXO_VOLTAGE - -[env:WHY2025_badge_repeater_] -extends = WHY2025_badge -build_src_filter = ${WHY2025_badge.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${WHY2025_badge.build_flags} - -D ADVERT_NAME='"WHY2025 Badge Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${WHY2025_badge.lib_deps} -; ${esp32_ota.lib_deps} - -[env:WHY2025_badge_companion_radio_ble_] -extends = WHY2025_badge -build_flags = ${WHY2025_badge.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D ENABLE_PRIVATE_KEY_IMPORT=1 - -D ENABLE_PRIVATE_KEY_EXPORT=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${WHY2025_badge.build_src_filter} - + - - - +<../examples/companion_radio/*.cpp> -lib_deps = - ${WHY2025_badge.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/xiao_c6/target.h b/variants/xiao_c6/target.h deleted file mode 100644 index 0fbb0bb2..00000000 --- a/variants/xiao_c6/target.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include - -extern XiaoC6Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/xiao_nrf52/XiaoNrf52Board.cpp b/variants/xiao_nrf52/XiaoNrf52Board.cpp deleted file mode 100644 index 42ee6a87..00000000 --- a/variants/xiao_nrf52/XiaoNrf52Board.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#ifdef XIAO_NRF52 - -#include -#include - -#include "XiaoNrf52Board.h" - -#ifdef NRF52_POWER_MANAGEMENT -// Static configuration for power management -// Values set in variant.h defines -const PowerMgtConfig power_config = { - .lpcomp_ain_channel = PWRMGT_LPCOMP_AIN, - .lpcomp_refsel = PWRMGT_LPCOMP_REFSEL, - .voltage_bootlock = PWRMGT_VOLTAGE_BOOTLOCK -}; - -void XiaoNrf52Board::initiateShutdown(uint8_t reason) { - bool enable_lpcomp = (reason == SHUTDOWN_REASON_LOW_VOLTAGE || - reason == SHUTDOWN_REASON_BOOT_PROTECT); - - pinMode(VBAT_ENABLE, OUTPUT); - digitalWrite(VBAT_ENABLE, enable_lpcomp ? LOW : HIGH); - - if (enable_lpcomp) { - configureVoltageWake(power_config.lpcomp_ain_channel, power_config.lpcomp_refsel); - } - - enterSystemOff(reason); -} -#endif // NRF52_POWER_MANAGEMENT - -void XiaoNrf52Board::begin() { - NRF52BoardDCDC::begin(); - - // Configure battery voltage ADC - pinMode(PIN_VBAT, INPUT); - pinMode(VBAT_ENABLE, OUTPUT); - digitalWrite(VBAT_ENABLE, LOW); // Enable VBAT divider for reading - analogReadResolution(12); - analogReference(AR_INTERNAL_3_0); - delay(50); // Allow ADC to settle - -#ifdef PIN_USER_BTN - pinMode(PIN_USER_BTN, INPUT_PULLUP); -#endif - -#if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL) - Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL); -#endif - - Wire.begin(); - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, HIGH); -#endif - -#ifdef NRF52_POWER_MANAGEMENT - // Boot voltage protection check (may not return if voltage too low) - checkBootVoltage(&power_config); -#endif - - delay(10); // Give sx1262 some time to power up -} - -uint16_t XiaoNrf52Board::getBattMilliVolts() { - // https://wiki.seeedstudio.com/XIAO_BLE#q3-what-are-the-considerations-when-using-xiao-nrf52840-sense-for-battery-charging - // VBAT_ENABLE must be LOW to read battery voltage - digitalWrite(VBAT_ENABLE, LOW); - int adcvalue = analogRead(PIN_VBAT); - return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE) / 4.096; -} - -#endif \ No newline at end of file diff --git a/variants/xiao_nrf52/XiaoNrf52Board.h b/variants/xiao_nrf52/XiaoNrf52Board.h deleted file mode 100644 index db9ec380..00000000 --- a/variants/xiao_nrf52/XiaoNrf52Board.h +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once - -#include -#include -#include - -#ifdef XIAO_NRF52 - -class XiaoNrf52Board : public NRF52BoardDCDC, public NRF52BoardOTA { -protected: -#if NRF52_POWER_MANAGEMENT - void initiateShutdown(uint8_t reason) override; -#endif - -public: - XiaoNrf52Board() : NRF52BoardOTA("XIAO_NRF52_OTA") {} - void begin(); - -#if defined(P_LORA_TX_LED) - void onBeforeTransmit() override { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED on - } - void onAfterTransmit() override { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED off - } -#endif - - uint16_t getBattMilliVolts() override; - - const char* getManufacturerName() const override { - return "Seeed Xiao-nrf52"; - } - - void powerOff() override { - // set led on and wait for button release before poweroff - digitalWrite(PIN_LED, LOW); -#ifdef PIN_USER_BTN - while(digitalRead(PIN_USER_BTN) == LOW); -#endif - digitalWrite(LED_GREEN, HIGH); - digitalWrite(LED_BLUE, HIGH); - digitalWrite(PIN_LED, HIGH); - -#ifdef PIN_USER_BTN - // configure button press to wake up when in powered off state - nrf_gpio_cfg_sense_input(digitalPinToInterrupt(g_ADigitalPinMap[PIN_USER_BTN]), NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); -#endif - - sd_power_system_off(); - } -}; - -#endif \ No newline at end of file diff --git a/variants/xiao_nrf52/platformio.ini b/variants/xiao_nrf52/platformio.ini deleted file mode 100644 index 6e96018b..00000000 --- a/variants/xiao_nrf52/platformio.ini +++ /dev/null @@ -1,110 +0,0 @@ -[Xiao_nrf52] -extends = nrf52_base -board = seeed-xiao-afruitnrf52-nrf52840 -board_build.ldscript = boards/nrf52840_s140_v7.ld -build_flags = ${nrf52_base.build_flags} - ${sensor_base.build_flags} - -I lib/nrf52/s140_nrf52_7.3.0_API/include - -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 - -I variants/xiao_nrf52 - -UENV_INCLUDE_GPS - -D NRF52_PLATFORM - -D NRF52_POWER_MANAGEMENT - -D XIAO_NRF52 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D P_LORA_TX_LED=11 - -D P_LORA_DIO_1=D1 - -D P_LORA_RESET=D2 - -D P_LORA_BUSY=D3 - -D P_LORA_NSS=D4 - -D SX126X_RXEN=D5 - -D SX126X_TXEN=RADIOLIB_NC - -D SX126X_DIO2_AS_RF_SWITCH=1 - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D SX126X_RX_BOOSTED_GAIN=1 - -D PIN_WIRE_SCL=D6 - -D PIN_WIRE_SDA=D7 - -D PIN_USER_BTN=PIN_BUTTON1 - -D DISPLAY_CLASS=NullDisplayDriver -build_src_filter = ${nrf52_base.build_src_filter} - + - + - +<../variants/xiao_nrf52> - + -debug_tool = jlink -upload_protocol = nrfutil -lib_deps = ${nrf52_base.lib_deps} - ${sensor_base.lib_deps} - -[env:Xiao_nrf52_companion_radio_ble] -extends = Xiao_nrf52 -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = - ${Xiao_nrf52.build_flags} - -I examples/companion_radio/ui-orig - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 - -D MESH_DEBUG=1 - -D QSPIFLASH=1 -build_src_filter = ${Xiao_nrf52.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = - ${Xiao_nrf52.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Xiao_nrf52_companion_radio_usb] -extends = Xiao_nrf52 -board_build.ldscript = boards/nrf52840_s140_v7_extrafs.ld -board_upload.maximum_size = 708608 -build_flags = - ${Xiao_nrf52.build_flags} - -I examples/companion_radio/ui-orig - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D QSPIFLASH=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_nrf52.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-orig/*.cpp> -lib_deps = - ${Xiao_nrf52.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Xiao_nrf52_repeater] -extends = Xiao_nrf52 -build_flags = - ${Xiao_nrf52.build_flags} - -D ADVERT_NAME='"Xiao_nrf52 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_nrf52.build_src_filter} - +<../examples/simple_repeater/*.cpp> - -[env:Xiao_nrf52_room_server] -extends = Xiao_nrf52 -build_flags = - ${Xiao_nrf52.build_flags} - -D ADVERT_NAME='"Xiao_nrf52 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_nrf52.build_src_filter} - +<../examples/simple_room_server/*.cpp> \ No newline at end of file diff --git a/variants/xiao_nrf52/target.cpp b/variants/xiao_nrf52/target.cpp deleted file mode 100644 index c9c02d21..00000000 --- a/variants/xiao_nrf52/target.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include "target.h" -#include - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; -#endif - -XiaoNrf52Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); - -EnvironmentSensorManager sensors; - -bool radio_init() { - rtc_clock.begin(Wire); - - return radio.std_init(&SPI); -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/xiao_nrf52/target.h b/variants/xiao_nrf52/target.h deleted file mode 100644 index e1ea2a6b..00000000 --- a/variants/xiao_nrf52/target.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#include - -#ifdef DISPLAY_CLASS - #include - extern DISPLAY_CLASS display; -#endif - -extern XiaoNrf52Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/xiao_nrf52/variant.cpp b/variants/xiao_nrf52/variant.cpp deleted file mode 100644 index 04ef3a92..00000000 --- a/variants/xiao_nrf52/variant.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "variant.h" - -#include "nrf.h" -#include "wiring_constants.h" -#include "wiring_digital.h" - -const uint32_t g_ADigitalPinMap[] = { - // D0 .. D10 - 2, // D0 is P0.02 (A0) - 3, // D1 is P0.03 (A1) - 28, // D2 is P0.28 (A2) - 29, // D3 is P0.29 (A3) - 4, // D4 is P0.04 (A4,SDA) - 5, // D5 is P0.05 (A5,SCL) - 43, // D6 is P1.11 (TX) - 44, // D7 is P1.12 (RX) - 45, // D8 is P1.13 (SCK) - 46, // D9 is P1.14 (MISO) - 47, // D10 is P1.15 (MOSI) - - // LEDs - 26, // D11 is P0.26 (LED RED) - 6, // D12 is P0.06 (LED BLUE) - 30, // D13 is P0.30 (LED GREEN) - 14, // D14 is P0.14 (READ_BAT) - - // LSM6DS3TR - 40, // D15 is P1.08 (6D_PWR) - 27, // D16 is P0.27 (6D_I2C_SCL) - 7, // D17 is P0.07 (6D_I2C_SDA) - 11, // D18 is P0.11 (6D_INT1) - - // MIC - 42, // D19 is P1.10 (MIC_PWR) - 32, // D20 is P1.00 (PDM_CLK) - 16, // D21 is P0.16 (PDM_DATA) - - // BQ25100 - 13, // D22 is P0.13 (HICHG) - 17, // D23 is P0.17 (~CHG) - - // - 21, // D24 is P0.21 (QSPI_SCK) - 25, // D25 is P0.25 (QSPI_CSN) - 20, // D26 is P0.20 (QSPI_SIO_0 DI) - 24, // D27 is P0.24 (QSPI_SIO_1 DO) - 22, // D28 is P0.22 (QSPI_SIO_2 WP) - 23, // D29 is P0.23 (QSPI_SIO_3 HOLD) - - // NFC - 9, // D30 is P0.09 (NFC1) - 10, // D31 is P0.10 (NFC2) - - // VBAT - 31, // D32 is P0.31 (VBAT) -}; - -void initVariant() { - // Disable reading of the BAT voltage. - // https://wiki.seeedstudio.com/XIAO_BLE#q3-what-are-the-considerations-when-using-xiao-nrf52840-sense-for-battery-charging - pinMode(VBAT_ENABLE, OUTPUT); - // digitalWrite(VBAT_ENABLE, HIGH); - // This was taken from Seeed github butis not coherent with the doc, - // VBAT_ENABLE should be kept to LOW to protect P0.14, (1500/500)*(4.2-3.3)+3.3 = 3.9V > 3.6V - // This induces a 3mA current in the resistors :( but it's better than burning the nrf - digitalWrite(VBAT_ENABLE, LOW); - - // Low charging current (50mA) - // https://wiki.seeedstudio.com/XIAO_BLE#battery-charging-current - // pinMode(PIN_CHARGING_CURRENT, INPUT); - - // High charging current (100mA) - pinMode(PIN_CHARGING_CURRENT, OUTPUT); - digitalWrite(PIN_CHARGING_CURRENT, LOW); - - pinMode(PIN_QSPI_CS, OUTPUT); - digitalWrite(PIN_QSPI_CS, HIGH); - - pinMode(LED_RED, OUTPUT); - digitalWrite(LED_RED, HIGH); - pinMode(LED_GREEN, OUTPUT); - digitalWrite(LED_GREEN, HIGH); - pinMode(LED_BLUE, OUTPUT); - digitalWrite(LED_BLUE, HIGH); -} diff --git a/variants/xiao_nrf52/variant.h b/variants/xiao_nrf52/variant.h deleted file mode 100644 index 25619b9e..00000000 --- a/variants/xiao_nrf52/variant.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef _SEEED_XIAO_NRF52840_H_ -#define _SEEED_XIAO_NRF52840_H_ - -/** Master clock frequency */ -#define VARIANT_MCK (64000000ul) - -#define USE_LFXO // Board uses 32khz crystal for LF -//#define USE_LFRC // Board uses RC for LF - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -#define PINS_COUNT (33) -#define NUM_DIGITAL_PINS (33) -#define NUM_ANALOG_INPUTS (8) -#define NUM_ANALOG_OUTPUTS (0) - -// LEDs -#define PIN_LED (LED_RED) -#define LED_PWR (PINS_COUNT) -#define PIN_NEOPIXEL (PINS_COUNT) -#define NEOPIXEL_NUM (0) - -#define LED_BUILTIN (PIN_LED) - -#define LED_RED (11) -#define LED_GREEN (13) -#define LED_BLUE (12) -#define PIN_STATUS_LED (LED_BLUE) - -#define LED_STATE_ON (0) // State when LED is on - -// Buttons -#define PIN_BUTTON1 (0) - -// Digital PINs -static const uint8_t D0 = 0 ; -static const uint8_t D1 = 1 ; -static const uint8_t D2 = 2 ; -static const uint8_t D3 = 3 ; -static const uint8_t D4 = 4 ; -static const uint8_t D5 = 5 ; -static const uint8_t D6 = 6 ; -static const uint8_t D7 = 7 ; -static const uint8_t D8 = 8 ; -static const uint8_t D9 = 9 ; -static const uint8_t D10 = 10; - -#define VBAT_ENABLE (14) // Output LOW to enable reading of the BAT voltage. - // https://wiki.seeedstudio.com/XIAO_BLE#q3-what-are-the-considerations-when-using-xiao-nrf52840-sense-for-battery-charging - -#define PIN_CHARGING_CURRENT (22) // Battery Charging current - // https://wiki.seeedstudio.com/XIAO_BLE#battery-charging-current - -// Analog pins -#define PIN_A0 (0) -#define PIN_A1 (1) -#define PIN_A2 (2) -#define PIN_A3 (3) -#define PIN_A4 (4) -#define PIN_A5 (5) -#define PIN_VBAT (32) // Read the BAT voltage. - // https://wiki.seeedstudio.com/XIAO_BLE#q3-what-are-the-considerations-when-using-xiao-nrf52840-sense-for-battery-charging - -#define BAT_NOT_CHARGING (23) // LOW when charging - -#define AREF_VOLTAGE (3.0) -#define ADC_MULTIPLIER (3.0F) // 1M, 512k divider bridge - -// Power management boot protection threshold (millivolts) -// Set to 0 to disable boot protection -#define PWRMGT_VOLTAGE_BOOTLOCK 3300 // Won't boot below this voltage - -// LPCOMP wake configuration (voltage recovery from SYSTEMOFF) -#define PWRMGT_LPCOMP_AIN 7 // AIN7 = P0.31 = PIN_VBAT -// IMPORTANT: The XIAO exposes battery via a resistor divider (ADC_MULTIPLIER = 3.0). -// LPCOMP measures the divided voltage, not the battery voltage directly. -// Vpin = VDD * (REFSEL fraction), and VBAT ≈ Vpin * ADC_MULTIPLIER. -// -// Using 3/8 VDD gives a wake threshold above the boot protection point: -// - If VDD ≈ 3.0V: VBAT ≈ (3.0 * 3/8) * 3 ≈ 3375mV -// - If VDD ≈ 3.3V: VBAT ≈ (3.3 * 3/8) * 3 ≈ 3712mV -#define PWRMGT_LPCOMP_REFSEL 2 // 3/8 VDD (~3.38-3.71V) - -static const uint8_t A0 = PIN_A0; -static const uint8_t A1 = PIN_A1; -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; - -#define ADC_RESOLUTION (12) - -// Other pins -#define PIN_NFC1 (30) -#define PIN_NFC2 (31) - -// Serial interfaces -#define PIN_SERIAL1_RX (7) -#define PIN_SERIAL1_TX (6) - -// SPI Interfaces -#define SPI_INTERFACES_COUNT (2) - -#define PIN_SPI_MISO (9) -#define PIN_SPI_MOSI (10) -#define PIN_SPI_SCK (8) - -#define PIN_SPI1_MISO (25) -#define PIN_SPI1_MOSI (26) -#define PIN_SPI1_SCK (29) - -// Lora SPI is on SPI0 -#define P_LORA_SCLK PIN_SPI_SCK -#define P_LORA_MISO PIN_SPI_MISO -#define P_LORA_MOSI PIN_SPI_MOSI - -// Wire Interfaces -#define WIRE_INTERFACES_COUNT (1) - -// #define PIN_WIRE_SDA (17) // 4 and 5 are used for the sx1262 ! -// #define PIN_WIRE_SCL (16) // use WIRE1_SDA - -// static const uint8_t SDA = PIN_WIRE_SDA; -// static const uint8_t SCL = PIN_WIRE_SCL; - -//#define PIN_WIRE1_SDA (17) -//#define PIN_WIRE1_SCL (16) -#define PIN_LSM6DS3TR_C_POWER (15) -#define PIN_LSM6DS3TR_C_INT1 (18) - -// PDM Interfaces -#define PIN_PDM_PWR (19) -#define PIN_PDM_CLK (20) -#define PIN_PDM_DIN (21) - -// QSPI Pins -#define PIN_QSPI_SCK (24) -#define PIN_QSPI_CS (25) -#define PIN_QSPI_IO0 (26) -#define PIN_QSPI_IO1 (27) -#define PIN_QSPI_IO2 (28) -#define PIN_QSPI_IO3 (29) - -// On-board QSPI Flash -#define EXTERNAL_FLASH_DEVICES (P25Q16H) -#define EXTERNAL_FLASH_USE_QSPI - -#ifdef __cplusplus -} -#endif - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#endif diff --git a/variants/xiao_rp2040/XiaoRP2040Board.cpp b/variants/xiao_rp2040/XiaoRP2040Board.cpp deleted file mode 100644 index bb439706..00000000 --- a/variants/xiao_rp2040/XiaoRP2040Board.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "XiaoRP2040Board.h" - -#include -#include - -void XiaoRP2040Board::begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - -#ifdef P_LORA_TX_LED - pinMode(P_LORA_TX_LED, OUTPUT); -#endif - -#ifdef PIN_VBAT_READ - pinMode(PIN_VBAT_READ, INPUT); -#endif - -#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.setSDA(PIN_BOARD_SDA); - Wire.setSCL(PIN_BOARD_SCL); -#endif - - Wire.begin(); - - delay(10); // give sx1262 some time to power up -} - -bool XiaoRP2040Board::startOTAUpdate(const char *id, char reply[]) { - return false; -} diff --git a/variants/xiao_rp2040/XiaoRP2040Board.h b/variants/xiao_rp2040/XiaoRP2040Board.h deleted file mode 100644 index d2951c75..00000000 --- a/variants/xiao_rp2040/XiaoRP2040Board.h +++ /dev/null @@ -1,60 +0,0 @@ -#pragma once - -#include -#include - -/* - * This board has no built-in way to read battery voltage. - * Nevertheless it's very easy to make it work, you only require two 1% resistors. - * If your using the WIO SX1262 Addon for xaio, make sure you dont connect D0! - * - * BAT+ -----+ - * | - * VSYS --+ -/\/\/\/\- --+ - * 200k | - * +-- D0 - * | - * GND --+ -/\/\/\/\- --+ - * | 100k - * BAT- -----+ - */ -#define PIN_VBAT_READ 26 // D0 -#define BATTERY_SAMPLES 8 -#define ADC_MULTIPLIER (3.0f * 3.3f * 1000) - -class XiaoRP2040Board : public mesh::MainBoard { -protected: - uint8_t startup_reason; - -public: - void begin(); - uint8_t getStartupReason() const override { return startup_reason; } - -#ifdef P_LORA_TX_LED - void onBeforeTransmit() override { digitalWrite(P_LORA_TX_LED, HIGH); } - void onAfterTransmit() override { digitalWrite(P_LORA_TX_LED, LOW); } -#endif - - - uint16_t getBattMilliVolts() override { -#if defined(PIN_VBAT_READ) && defined(ADC_MULTIPLIER) - analogReadResolution(12); - - uint32_t raw = 0; - for (int i = 0; i < BATTERY_SAMPLES; i++) { - raw += analogRead(PIN_VBAT_READ); - } - raw = raw / BATTERY_SAMPLES; - - return (ADC_MULTIPLIER * raw) / 4096; -#else - return 0; -#endif - } - - const char *getManufacturerName() const override { return "Xiao RP2040"; } - - void reboot() override { rp2040.reboot(); } - - bool startOTAUpdate(const char *id, char reply[]) override; -}; diff --git a/variants/xiao_rp2040/platformio.ini b/variants/xiao_rp2040/platformio.ini deleted file mode 100644 index 2b3e7442..00000000 --- a/variants/xiao_rp2040/platformio.ini +++ /dev/null @@ -1,109 +0,0 @@ -[Xiao_rp2040] -extends = rp2040_base -board = seeed_xiao_rp2040 -board_build.filesystem_size = 0.5m -build_flags = ${rp2040_base.build_flags} - -I variants/xiao_rp2040 - -D SX126X_CURRENT_LIMIT=140 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=27 ; D1 - -D P_LORA_NSS=6 ; D4 - -D P_LORA_RESET=28 ; D2 - -D P_LORA_BUSY=29 ; D3 - -D P_LORA_TX_LED=17 - -D SX126X_RXEN=7 ; D5 - -D SX126X_TXEN=RADIOLIB_NC - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_RX_BOOSTED_GAIN=1 - -D LORA_TX_POWER=22 -; Debug options - ; -D DEBUG_RP2040_WIRE=1 - ; -D DEBUG_RP2040_SPI=1 - ; -D DEBUG_RP2040_CORE=1 - ; -D RADIOLIB_DEBUG_SPI=1 - ; -D DEBUG_RP2040_PORT=Serial -build_src_filter = ${rp2040_base.build_src_filter} - + - +<../variants/xiao_rp2040> -lib_deps = ${rp2040_base.lib_deps} - -[env:Xiao_rp2040_repeater] -extends = Xiao_rp2040 -build_flags = ${Xiao_rp2040.build_flags} - -D ADVERT_NAME='"Xiao Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D MESH_PACKET_LOGGING=1 - -D MESH_DEBUG=1 -build_src_filter = ${Xiao_rp2040.build_src_filter} - +<../examples/simple_repeater> - -[env:Xiao_rp2040_room_server] -extends = Xiao_rp2040 -build_flags = ${Xiao_rp2040.build_flags} - -D ADVERT_NAME='"Xiao Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_rp2040.build_src_filter} - +<../examples/simple_room_server> - -[env:Xiao_rp2040_companion_radio_usb] -extends = Xiao_rp2040 -build_flags = ${Xiao_rp2040.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${Xiao_rp2040.build_src_filter} - +<../examples/companion_radio/*.cpp> -lib_deps = ${Xiao_rp2040.lib_deps} - densaugeo/base64 @ ~1.4.0 - -; [env:Xiao_rp2040_companion_radio_ble] -; extends = Xiao_rp2040 -; build_flags = ${Xiao_rp2040.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D BLE_PIN_CODE=123456 -; -D BLE_DEBUG_LOGGING=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${Xiao_rp2040.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${Xiao_rp2040.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -; [env:Xiao_rp2040_companion_radio_wifi] -; extends = Xiao_rp2040 -; build_flags = ${Xiao_rp2040.build_flags} -; -D MAX_CONTACTS=100 -; -D MAX_GROUP_CHANNELS=8 -; -D WIFI_DEBUG_LOGGING=1 -; -D WIFI_SSID='"myssid"' -; -D WIFI_PWD='"mypwd"' -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; build_src_filter = ${Xiao_rp2040.build_src_filter} -; +<../examples/companion_radio/*.cpp> -; lib_deps = ${Xiao_rp2040.lib_deps} -; densaugeo/base64 @ ~1.4.0 - -[env:Xiao_rp2040_terminal_chat] -extends = Xiao_rp2040 -build_flags = ${Xiao_rp2040.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_rp2040.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = ${Xiao_rp2040.lib_deps} - densaugeo/base64 @ ~1.4.0 diff --git a/variants/xiao_rp2040/target.cpp b/variants/xiao_rp2040/target.cpp deleted file mode 100644 index b7c19975..00000000 --- a/variants/xiao_rp2040/target.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "target.h" - -#include -#include - -XiaoRP2040Board board; - -RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); - -WRAPPER_CLASS radio_driver(radio, board); - -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -SensorManager sensors; - -#ifndef LORA_CR -#define LORA_CR 5 -#endif - -bool radio_init() { - rtc_clock.begin(Wire); - -#if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/xiao_rp2040/target.h b/variants/xiao_rp2040/target.h deleted file mode 100644 index 33b3766c..00000000 --- a/variants/xiao_rp2040/target.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 - -#include -#include -#include -#include -#include -#include - -extern XiaoRP2040Board board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern SensorManager sensors; - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); diff --git a/variants/xiao_s3_wio/XiaoS3WIOBoard.h b/variants/xiao_s3_wio/XiaoS3WIOBoard.h deleted file mode 100644 index 7ae06a35..00000000 --- a/variants/xiao_s3_wio/XiaoS3WIOBoard.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include -#include - -class XiaoS3WIOBoard : public ESP32Board { -public: - XiaoS3WIOBoard() { } - - const char* getManufacturerName() const override { - return "Xiao S3 WIO"; - } -}; diff --git a/variants/xiao_s3_wio/platformio.ini b/variants/xiao_s3_wio/platformio.ini deleted file mode 100644 index 22bb4090..00000000 --- a/variants/xiao_s3_wio/platformio.ini +++ /dev/null @@ -1,235 +0,0 @@ -[Xiao_S3_WIO] -extends = esp32_base -board = seeed_xiao_esp32s3 -board_check = true -board_build.mcu = esp32s3 -build_flags = ${esp32_base.build_flags} - ${sensor_base.build_flags} - -I variants/xiao_s3_wio - -UENV_INCLUDE_GPS - -D SEEED_XIAO_S3 - -D P_LORA_DIO_1=39 - -D P_LORA_NSS=41 - -D P_LORA_RESET=42 ; RADIOLIB_NC - -D P_LORA_BUSY=40 ; DIO2 = 38 - -D P_LORA_SCLK=7 - -D P_LORA_MISO=8 - -D P_LORA_MOSI=9 - -D PIN_USER_BTN=21 - -D PIN_STATUS_LED=48 - -D PIN_BOARD_SDA=D4 - -D PIN_BOARD_SCL=D5 - -D SX126X_RXEN=38 - -D SX126X_TXEN=RADIOLIB_NC - -D SX126X_DIO2_AS_RF_SWITCH=true - -D SX126X_DIO3_TCXO_VOLTAGE=1.8 - -D SX126X_CURRENT_LIMIT=140 - -D RADIO_CLASS=CustomSX1262 - -D WRAPPER_CLASS=CustomSX1262Wrapper - -D LORA_TX_POWER=22 - -D SX126X_RX_BOOSTED_GAIN=1 -build_src_filter = ${esp32_base.build_src_filter} - +<../variants/xiao_s3_wio> - + -lib_deps = - ${esp32_base.lib_deps} - ${sensor_base.lib_deps} - -[env:Xiao_S3_WIO_repeater] -extends = Xiao_S3_WIO -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Xiao_S3_WIO.build_flags} - -D ADVERT_NAME='"XiaoS3 Repeater"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_S3_WIO.lib_deps} - ${esp32_ota.lib_deps} - -; [env:Xiao_S3_WIO_repeater_bridge_rs232] -; extends = Xiao_S3_WIO -; build_src_filter = ${Xiao_S3_WIO.build_src_filter} -; + -; +<../examples/simple_repeater/*.cpp> -; build_flags = -; ${Xiao_S3_WIO.build_flags} -; -D ADVERT_NAME='"RS232 Bridge"' -; -D ADVERT_LAT=0.0 -; -D ADVERT_LON=0.0 -; -D ADMIN_PASSWORD='"password"' -; -D MAX_NEIGHBOURS=50 -; -D WITH_RS232_BRIDGE=Serial2 -; RS232 bridge Pins have been relocated from 5,6 which is the i2c bus on xiao_s3 -; -D WITH_RS232_BRIDGE_RX=3 -; -D WITH_RS232_BRIDGE_TX=4 -; -D BRIDGE_DEBUG=1 -; ; -D MESH_PACKET_LOGGING=1 -; ; -D MESH_DEBUG=1 -; lib_deps = -; ${Xiao_S3_WIO.lib_deps} -; ${esp32_ota.lib_deps} - -[env:Xiao_S3_WIO_repeater_bridge_espnow] -extends = Xiao_S3_WIO -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - + - +<../examples/simple_repeater/*.cpp> -build_flags = - ${Xiao_S3_WIO.build_flags} - -D ADVERT_NAME='"ESPNow Bridge"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D MAX_NEIGHBOURS=50 - -D WITH_ESPNOW_BRIDGE=1 -; -D BRIDGE_DEBUG=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_S3_WIO.lib_deps} - ${esp32_ota.lib_deps} - -[env:Xiao_S3_WIO_room_server] -extends = Xiao_S3_WIO -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - +<../examples/simple_room_server> -build_flags = - ${Xiao_S3_WIO.build_flags} - -D ADVERT_NAME='"XiaoS3 Room"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_S3_WIO.lib_deps} - ${esp32_ota.lib_deps} - -[env:Xiao_S3_WIO_terminal_chat] -extends = Xiao_S3_WIO -build_flags = - ${Xiao_S3_WIO.build_flags} - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = - ${Xiao_S3_WIO.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Xiao_S3_WIO_companion_radio_usb] -extends = Xiao_S3_WIO -build_flags = - ${Xiao_S3_WIO.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D OFFLINE_QUEUE_SIZE=256 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Xiao_S3_WIO.lib_deps} - densaugeo/base64 @ ~1.4.0 - adafruit/Adafruit SSD1306 @ ^2.5.13 - -[env:Xiao_S3_WIO_companion_radio_ble] -extends = Xiao_S3_WIO -build_flags = - ${Xiao_S3_WIO.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D DISPLAY_CLASS=SSD1306Display - -D OFFLINE_QUEUE_SIZE=256 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Xiao_S3_WIO.lib_deps} - densaugeo/base64 @ ~1.4.0 - adafruit/Adafruit SSD1306 @ ^2.5.13 - -[env:Xiao_S3_WIO_companion_radio_serial] -extends = Xiao_S3_WIO -build_flags = - ${Xiao_S3_WIO.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D SERIAL_TX=D6 - -D SERIAL_RX=D7 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Xiao_S3_WIO.lib_deps} - densaugeo/base64 @ ~1.4.0 - adafruit/Adafruit SSD1306 @ ^2.5.13 - -[env:Xiao_S3_WIO_companion_radio_wifi] -extends = Xiao_S3_WIO -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> -build_flags = - ${Xiao_S3_WIO.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D OFFLINE_QUEUE_SIZE=256 - -D WIFI_DEBUG_LOGGING=1 - -D WIFI_SSID='"myssid"' - -D WIFI_PWD='"password"' - ; -D BLE_DEBUG_LOGGING=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_S3_WIO.lib_deps} - densaugeo/base64 @ ~1.4.0 - -[env:Xiao_S3_WIO_sensor] -extends = Xiao_S3_WIO -build_src_filter = ${Xiao_S3_WIO.build_src_filter} - +<../examples/simple_sensor> -build_flags = - ${Xiao_S3_WIO.build_flags} - -D ADVERT_NAME='"XiaoS3 sensor"' - -D ADVERT_LAT=0.0 - -D ADVERT_LON=0.0 - -D ADMIN_PASSWORD='"password"' -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -lib_deps = - ${Xiao_S3_WIO.lib_deps} - ${esp32_ota.lib_deps} diff --git a/variants/xiao_s3_wio/target.cpp b/variants/xiao_s3_wio/target.cpp deleted file mode 100644 index 26cd27ac..00000000 --- a/variants/xiao_s3_wio/target.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include "target.h" - -XiaoS3WIOBoard board; - -#if defined(P_LORA_SCLK) - static SPIClass spi; - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); -#else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); -#endif - -WRAPPER_CLASS radio_driver(radio, board); - -ESP32RTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); -EnvironmentSensorManager sensors; - -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - MomentaryButton user_btn(PIN_USER_BTN, 1000, true); -#endif - -bool radio_init() { - fallback_clock.begin(); - rtc_clock.begin(Wire); - pinMode(21, INPUT); - pinMode(48, OUTPUT); - - #if defined(P_LORA_SCLK) - spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); - return radio.std_init(&spi); -#else - return radio.std_init(); -#endif -} - -uint32_t radio_get_rng_seed() { - return radio.random(0x7FFFFFFF); -} - -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - radio.setFrequency(freq); - radio.setSpreadingFactor(sf); - radio.setBandwidth(bw); - radio.setCodingRate(cr); -} - -void radio_set_tx_power(uint8_t dbm) { - radio.setOutputPower(dbm); -} - -mesh::LocalIdentity radio_new_identity() { - RadioNoiseListener rng(radio); - return mesh::LocalIdentity(&rng); // create new random identity -} diff --git a/variants/xiao_s3_wio/target.h b/variants/xiao_s3_wio/target.h deleted file mode 100644 index c3227368..00000000 --- a/variants/xiao_s3_wio/target.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#define RADIOLIB_STATIC_ONLY 1 -#include -#include -#include -#include -#include -#include -#ifdef DISPLAY_CLASS - #include - #include -#endif -#include "XiaoS3WIOBoard.h" - -extern XiaoS3WIOBoard board; -extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; -extern EnvironmentSensorManager sensors; - -#ifdef DISPLAY_CLASS - extern DISPLAY_CLASS display; - extern MomentaryButton user_btn; -#endif - -bool radio_init(); -uint32_t radio_get_rng_seed(); -void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); -void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity();