From 74e7af3f57035545b9a168beabfa7553f5148eda Mon Sep 17 00:00:00 2001 From: James Hall Date: Thu, 27 Mar 2025 09:21:29 -0400 Subject: [PATCH 01/11] TBeam: Added Repeater --- variants/lilygo_tbeam/platformio.ini | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/variants/lilygo_tbeam/platformio.ini b/variants/lilygo_tbeam/platformio.ini index f754896f..155c2b7e 100644 --- a/variants/lilygo_tbeam/platformio.ini +++ b/variants/lilygo_tbeam/platformio.ini @@ -43,4 +43,22 @@ build_src_filter = ${LilyGo_TBeam.build_src_filter} +<../examples/companion_radio> lib_deps = ${LilyGo_TBeam.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:Tbeam_repeater] +extends = LilyGo_TBeam +build_flags = + ${LilyGo_TBeam.build_flags} + -D DISPLAY_CLASS=SSD1306Display + -D ADVERT_NAME='"Tbeam Repeater"' + -D ADVERT_LAT=-37.0 + -D ADVERT_LON=145.0 + -D ADMIN_PASSWORD='"password"' + -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${LilyGo_TBeam.build_src_filter} + + + +<../examples/simple_repeater> +lib_deps = + ${LilyGo_TBeam.lib_deps} + ${esp32_ota.lib_deps} \ No newline at end of file From 01e98caea74f46a24caa53e072f58f63d6d8775e Mon Sep 17 00:00:00 2001 From: taco Date: Sun, 30 Mar 2025 15:52:25 +1100 Subject: [PATCH 02/11] Refactor: FaketecBoard to PromicroBoard --- .../{FaketecBoard.cpp => PromicroBoard.cpp} | 8 ++-- .../nrf52/{FaketecBoard.h => PromicroBoard.h} | 4 +- variants/promicro/platformio.ini | 46 +++++++++---------- variants/promicro/target.cpp | 2 +- variants/promicro/target.h | 4 +- 5 files changed, 32 insertions(+), 32 deletions(-) rename src/helpers/nrf52/{FaketecBoard.cpp => PromicroBoard.cpp} (93%) rename src/helpers/nrf52/{FaketecBoard.h => PromicroBoard.h} (95%) diff --git a/src/helpers/nrf52/FaketecBoard.cpp b/src/helpers/nrf52/PromicroBoard.cpp similarity index 93% rename from src/helpers/nrf52/FaketecBoard.cpp rename to src/helpers/nrf52/PromicroBoard.cpp index 4b9ff023..58710509 100644 --- a/src/helpers/nrf52/FaketecBoard.cpp +++ b/src/helpers/nrf52/PromicroBoard.cpp @@ -1,12 +1,12 @@ #include -#include "FaketecBoard.h" +#include "PromicroBoard.h" #include #include static BLEDfu bledfu; -void FaketecBoard::begin() { +void PromicroBoard::begin() { // for future use, sub-classes SHOULD call this from their begin() startup_reason = BD_STARTUP_NORMAL; btn_prev_state = HIGH; @@ -39,7 +39,7 @@ static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { MESH_DEBUG_PRINTLN("BLE client disconnected"); } -bool FaketecBoard::startOTAUpdate(const char* id, char reply[]) { +bool PromicroBoard::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() @@ -50,7 +50,7 @@ bool FaketecBoard::startOTAUpdate(const char* id, char reply[]) { // 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("Faketec_OTA"); + Bluefruit.setName("ProMicro_OTA"); Bluefruit.Periph.setConnectCallback(connect_callback); Bluefruit.Periph.setDisconnectCallback(disconnect_callback); diff --git a/src/helpers/nrf52/FaketecBoard.h b/src/helpers/nrf52/PromicroBoard.h similarity index 95% rename from src/helpers/nrf52/FaketecBoard.h rename to src/helpers/nrf52/PromicroBoard.h index f407958b..89e71755 100644 --- a/src/helpers/nrf52/FaketecBoard.h +++ b/src/helpers/nrf52/PromicroBoard.h @@ -19,7 +19,7 @@ #define PIN_VBAT_READ 17 #define ADC_MULTIPLIER (1.815f) // dependent on voltage divider resistors. TODO: more accurate battery tracking -class FaketecBoard : public mesh::MainBoard { +class PromicroBoard : public mesh::MainBoard { protected: uint8_t startup_reason; uint8_t btn_prev_state; @@ -43,7 +43,7 @@ public: } const char* getManufacturerName() const override { - return "Faketec DIY"; + return "ProMicro DIY"; } int buttonStateChanged() { diff --git a/variants/promicro/platformio.ini b/variants/promicro/platformio.ini index f99a427d..ce1b7b99 100644 --- a/variants/promicro/platformio.ini +++ b/variants/promicro/platformio.ini @@ -1,4 +1,4 @@ -[faketec] +[Faketec] extends = nrf52840_base board = promicro_nrf52840 build_flags = ${nrf52840_base.build_flags} @@ -15,17 +15,17 @@ build_flags = ${nrf52840_base.build_flags} -D PIN_OLED_RESET=-1 -D PIN_USER_BTN=6 build_src_filter = ${nrf52840_base.build_src_filter} - + + + +<../variants/promicro> lib_deps= ${nrf52840_base.lib_deps} adafruit/Adafruit SSD1306 @ ^2.5.13 [env:Faketec_Repeater] -extends = faketec -build_src_filter = ${faketec.build_src_filter} +<../examples/simple_repeater> + +extends = Faketec +build_src_filter = ${Faketec.build_src_filter} +<../examples/simple_repeater> + build_flags = - ${faketec.build_flags} + ${Faketec.build_flags} -D ADVERT_NAME="\"Faketec Repeater\"" -D ADVERT_LAT=-37.0 -D ADVERT_LON=145.0 @@ -33,14 +33,14 @@ build_flags = ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 lib_deps = - ${faketec.lib_deps} + ${Faketec.lib_deps} adafruit/RTClib @ ^2.1.3 [env:Faketec_room_server] -extends = faketec -build_src_filter = ${faketec.build_src_filter} +<../examples/simple_room_server> + +extends = Faketec +build_src_filter = ${Faketec.build_src_filter} +<../examples/simple_room_server> + build_flags = - ${faketec.build_flags} + ${Faketec.build_flags} -D ADVERT_NAME="\"Test Room\"" -D ADVERT_LAT=-37.0 -D ADVERT_LON=145.0 @@ -49,41 +49,41 @@ build_flags = ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 lib_deps = - ${faketec.lib_deps} + ${Faketec.lib_deps} adafruit/RTClib @ ^2.1.3 [env:Faketec_terminal_chat] -extends = faketec +extends = Faketec build_flags = - ${faketec.build_flags} + ${Faketec.build_flags} -D MAX_CONTACTS=100 -D MAX_GROUP_CHANNELS=1 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -build_src_filter = ${faketec.build_src_filter} +<../examples/simple_secure_chat/main.cpp> +build_src_filter = ${Faketec.build_src_filter} +<../examples/simple_secure_chat/main.cpp> lib_deps = - ${faketec.lib_deps} + ${Faketec.lib_deps} densaugeo/base64 @ ~1.4.0 adafruit/RTClib @ ^2.1.3 [env:Faketec_companion_radio_usb] -extends = faketec +extends = Faketec build_flags = - ${faketec.build_flags} + ${Faketec.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 = ${faketec.build_src_filter} +<../examples/companion_radio> +<../examples/companion_radio> + +build_src_filter = ${Faketec.build_src_filter} +<../examples/companion_radio> +<../examples/companion_radio> + lib_deps = - ${faketec.lib_deps} + ${Faketec.lib_deps} adafruit/RTClib @ ^2.1.3 densaugeo/base64 @ ~1.4.0 [env:Faketec_companion_radio_ble] -extends = faketec +extends = Faketec build_flags = - ${faketec.build_flags} + ${Faketec.build_flags} -D MAX_CONTACTS=100 -D MAX_GROUP_CHANNELS=8 -D BLE_PIN_CODE=123456 @@ -92,9 +92,9 @@ build_flags = -D ENABLE_PRIVATE_KEY_IMPORT=1 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -build_src_filter = ${faketec.build_src_filter} + +<../examples/companion_radio> + +build_src_filter = ${Faketec.build_src_filter} + +<../examples/companion_radio> + lib_deps = - ${faketec.lib_deps} + ${Faketec.lib_deps} adafruit/RTClib @ ^2.1.3 densaugeo/base64 @ ~1.4.0 @@ -110,7 +110,7 @@ build_flags = ${nrf52840_base.build_flags} -D SX126X_CURRENT_LIMIT=130 -D SX126X_RX_BOOSTED_GAIN=1 build_src_filter = ${nrf52840_base.build_src_filter} - + + + +<../variants/promicro> [env:ProMicroLLCC68_Repeater] diff --git a/variants/promicro/target.cpp b/variants/promicro/target.cpp index 9958c9eb..059bd552 100644 --- a/variants/promicro/target.cpp +++ b/variants/promicro/target.cpp @@ -2,7 +2,7 @@ #include "target.h" #include -FaketecBoard board; +PromicroBoard board; RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); diff --git a/variants/promicro/target.h b/variants/promicro/target.h index b66020d4..79d0862f 100644 --- a/variants/promicro/target.h +++ b/variants/promicro/target.h @@ -3,12 +3,12 @@ #define RADIOLIB_STATIC_ONLY 1 #include #include -#include +#include #include #include #include -extern FaketecBoard board; +extern PromicroBoard board; extern WRAPPER_CLASS radio_driver; extern AutoDiscoverRTCClock rtc_clock; From b8f09531c4d2e39a87f98fcfd3b8f29ec81c8fbd Mon Sep 17 00:00:00 2001 From: taco Date: Sun, 30 Mar 2025 15:57:20 +1100 Subject: [PATCH 03/11] fix: give ProMicroLLCC68 a different definition --- variants/promicro/platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/promicro/platformio.ini b/variants/promicro/platformio.ini index ce1b7b99..f2cecad1 100644 --- a/variants/promicro/platformio.ini +++ b/variants/promicro/platformio.ini @@ -103,7 +103,7 @@ extends = nrf52840_base board = promicro_nrf52840 build_flags = ${nrf52840_base.build_flags} -I variants/promicro - -D FAKETEC + -D PROMICROLLCC68 -D RADIO_CLASS=CustomLLCC68 -D WRAPPER_CLASS=CustomLLCC68Wrapper -D LORA_TX_POWER=22 From 2f6427ce21975559a20af71b1239bbf4c87b7621 Mon Sep 17 00:00:00 2001 From: Florent Date: Sun, 30 Mar 2025 15:09:40 +0200 Subject: [PATCH 04/11] Remove rtc auto-detect on t1000 --- variants/t1000-e/target.cpp | 6 ++---- variants/t1000-e/target.h | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/variants/t1000-e/target.cpp b/variants/t1000-e/target.cpp index afc0eadb..cf51cc91 100644 --- a/variants/t1000-e/target.cpp +++ b/variants/t1000-e/target.cpp @@ -1,6 +1,5 @@ #include #include "target.h" -#include T1000eBoard board; @@ -8,8 +7,7 @@ RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BU WRAPPER_CLASS radio_driver(radio, board); -VolatileRTCClock fallback_clock; -AutoDiscoverRTCClock rtc_clock(fallback_clock); +VolatileRTCClock rtc_clock; #ifndef LORA_CR #define LORA_CR 5 @@ -38,7 +36,7 @@ static const Module::RfSwitchMode_t rfswitch_table[] = { #endif bool radio_init() { - rtc_clock.begin(Wire); + //rtc_clock.begin(Wire); #ifdef LR11X0_DIO3_TCXO_VOLTAGE float tcxo = LR11X0_DIO3_TCXO_VOLTAGE; diff --git a/variants/t1000-e/target.h b/variants/t1000-e/target.h index 7ffafded..83bd3eae 100644 --- a/variants/t1000-e/target.h +++ b/variants/t1000-e/target.h @@ -5,11 +5,11 @@ #include #include #include -#include +#include extern T1000eBoard board; extern WRAPPER_CLASS radio_driver; -extern AutoDiscoverRTCClock rtc_clock; +extern VolatileRTCClock rtc_clock; bool radio_init(); uint32_t radio_get_rng_seed(); From 3a920986ca83a205ab1a7667ef023be6612c6fc3 Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Mon, 31 Mar 2025 13:03:33 +1100 Subject: [PATCH 05/11] * Tbeam fix: GPIO assignments wrong --- variants/lilygo_tbeam/target.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/variants/lilygo_tbeam/target.cpp b/variants/lilygo_tbeam/target.cpp index 0852d69c..24e4a342 100644 --- a/variants/lilygo_tbeam/target.cpp +++ b/variants/lilygo_tbeam/target.cpp @@ -5,9 +5,9 @@ TBeamBoard 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); + RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_0, P_LORA_RESET, P_LORA_DIO_1, spi); #else - RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); + RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_0, P_LORA_RESET, P_LORA_DIO_1); #endif WRAPPER_CLASS radio_driver(radio, board); From 3a6b8fda9314eb2c7f0878f6afcd875e143998a4 Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Mon, 31 Mar 2025 14:01:49 +1100 Subject: [PATCH 06/11] * room server: faster sync of unread posts, MAX_UNSYNCED_POSTS now 32 (was 16) --- examples/simple_room_server/main.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/examples/simple_room_server/main.cpp b/examples/simple_room_server/main.cpp index c91765fc..34c8ebdf 100644 --- a/examples/simple_room_server/main.cpp +++ b/examples/simple_room_server/main.cpp @@ -62,7 +62,7 @@ #endif #ifndef MAX_UNSYNCED_POSTS - #define MAX_UNSYNCED_POSTS 16 + #define MAX_UNSYNCED_POSTS 32 #endif #ifdef DISPLAY_CLASS @@ -111,7 +111,7 @@ struct PostInfo { #define REPLY_DELAY_MILLIS 1500 #define PUSH_NOTIFY_DELAY_MILLIS 2000 -#define SYNC_PUSH_INTERVAL 2000 +#define SYNC_PUSH_INTERVAL 1200 #define PUSH_ACK_TIMEOUT_FLOOD 12000 #define PUSH_TIMEOUT_BASE 4000 @@ -782,6 +782,7 @@ public: } // check next Round-Robin client, and sync next new post auto client = &known_clients[next_client_idx]; + bool did_push = false; if (client->pending_ack == 0 && client->last_activity != 0 && client->push_failures < 3) { // not already waiting for ACK, AND not evicted, AND retries not max MESH_DEBUG_PRINTLN("loop - checking for client %02X", (uint32_t) client->id.pub_key[0]); for (int k = 0, idx = next_post_idx; k < MAX_UNSYNCED_POSTS; k++) { @@ -789,6 +790,7 @@ public: && !posts[idx].author.matches(client->id)) { // don't push posts to the author // push this post to Client, then wait for ACK pushPostToClient(client, posts[idx]); + did_push = true; MESH_DEBUG_PRINTLN("loop - pushed to client %02X: %s", (uint32_t) client->id.pub_key[0], posts[idx].text); break; } @@ -799,7 +801,12 @@ public: } next_client_idx = (next_client_idx + 1) % num_clients; // round robin polling for each client - next_push = futureMillis(SYNC_PUSH_INTERVAL); + if (did_push) { + next_push = futureMillis(SYNC_PUSH_INTERVAL); + } else { + // were no unsynced posts for curr client, so proccess next client much quicker! (in next loop()) + next_push = futureMillis(SYNC_PUSH_INTERVAL / 8); + } } if (next_flood_advert && millisHasNowPassed(next_flood_advert)) { From 87443ad43f0b032074a9df05cdd00a624345be62 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Tue, 1 Apr 2025 14:46:48 +1300 Subject: [PATCH 07/11] clear display on init to avoid static --- examples/companion_radio/main.cpp | 1 + src/helpers/ui/DisplayDriver.h | 1 + src/helpers/ui/SSD1306Display.cpp | 5 +++++ src/helpers/ui/SSD1306Display.h | 1 + 4 files changed, 8 insertions(+) diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index ef50d1ca..d6a6e990 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -1442,6 +1442,7 @@ void setup() { #ifdef DISPLAY_CLASS if (display.begin()) { disp = &display; + disp->clear(); } #endif #endif diff --git a/src/helpers/ui/DisplayDriver.h b/src/helpers/ui/DisplayDriver.h index 1c8bebc7..7086b807 100644 --- a/src/helpers/ui/DisplayDriver.h +++ b/src/helpers/ui/DisplayDriver.h @@ -15,6 +15,7 @@ public: virtual bool isOn() = 0; virtual void turnOn() = 0; virtual void turnOff() = 0; + virtual void clear() = 0; virtual void startFrame(Color bkg = DARK) = 0; virtual void setTextSize(int sz) = 0; virtual void setColor(Color c) = 0; diff --git a/src/helpers/ui/SSD1306Display.cpp b/src/helpers/ui/SSD1306Display.cpp index 4c2699ac..911dd6fa 100644 --- a/src/helpers/ui/SSD1306Display.cpp +++ b/src/helpers/ui/SSD1306Display.cpp @@ -20,6 +20,11 @@ void SSD1306Display::turnOff() { _isOn = false; } +void SSD1306Display::clear() { + display.clearDisplay(); + display.display(); +} + void SSD1306Display::startFrame(Color bkg) { display.clearDisplay(); // TODO: apply 'bkg' _color = SSD1306_WHITE; diff --git a/src/helpers/ui/SSD1306Display.h b/src/helpers/ui/SSD1306Display.h index c90a336d..cd0e2a0a 100644 --- a/src/helpers/ui/SSD1306Display.h +++ b/src/helpers/ui/SSD1306Display.h @@ -27,6 +27,7 @@ public: bool isOn() override { return _isOn; } 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; From af070af554cc7f922f30408dd7cc92d2b723e007 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Tue, 1 Apr 2025 15:50:24 +1300 Subject: [PATCH 08/11] show please wait message on companion boot --- examples/companion_radio/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index d6a6e990..4672e6e6 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -1442,7 +1442,9 @@ void setup() { #ifdef DISPLAY_CLASS if (display.begin()) { disp = &display; - disp->clear(); + disp->startFrame(); + disp->print("Please wait..."); + disp->endFrame(); } #endif #endif From f93a5156bb9d4bc23a7c6677b88b7a1d6c1e1db3 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Tue, 1 Apr 2025 16:00:09 +1300 Subject: [PATCH 09/11] show please wait message on repeater boot --- examples/simple_repeater/main.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/simple_repeater/main.cpp b/examples/simple_repeater/main.cpp index 4836c533..8ac1e8a7 100644 --- a/examples/simple_repeater/main.cpp +++ b/examples/simple_repeater/main.cpp @@ -616,6 +616,14 @@ void setup() { board.begin(); +#ifdef DISPLAY_CLASS + if(display.begin()){ + display.startFrame(); + display.print("Please wait..."); + display.endFrame(); + } +#endif + if (!radio_init()) { halt(); } fast_rng.begin(radio_get_rng_seed()); @@ -646,7 +654,6 @@ void setup() { the_mesh.begin(fs); #ifdef DISPLAY_CLASS - display.begin(); ui_task.begin(the_mesh.getNodeName(), FIRMWARE_BUILD_DATE); #endif From 7e583d7f98e84835d56dda18908b4c3ada46064c Mon Sep 17 00:00:00 2001 From: liamcottle Date: Tue, 1 Apr 2025 16:04:06 +1300 Subject: [PATCH 10/11] show please wait message on room server boot --- examples/simple_room_server/main.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/simple_room_server/main.cpp b/examples/simple_room_server/main.cpp index 34c8ebdf..36938ef6 100644 --- a/examples/simple_room_server/main.cpp +++ b/examples/simple_room_server/main.cpp @@ -846,6 +846,14 @@ void setup() { board.begin(); +#ifdef DISPLAY_CLASS + if(display.begin()){ + display.startFrame(); + display.print("Please wait..."); + display.endFrame(); + } +#endif + if (!radio_init()) { halt(); } fast_rng.begin(radio_get_rng_seed()); @@ -875,7 +883,6 @@ void setup() { the_mesh.begin(fs); #ifdef DISPLAY_CLASS - display.begin(); ui_task.begin(the_mesh.getNodeName(), FIRMWARE_BUILD_DATE); #endif From 4d4a0ae4e3f8e085c253356cc7b27222eab5b4ff Mon Sep 17 00:00:00 2001 From: liamcottle Date: Tue, 1 Apr 2025 16:10:12 +1300 Subject: [PATCH 11/11] init display before radio --- examples/companion_radio/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index 4672e6e6..31c441d5 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -1433,10 +1433,6 @@ void setup() { board.begin(); - if (!radio_init()) { halt(); } - - fast_rng.begin(radio_get_rng_seed()); - #ifdef HAS_UI DisplayDriver* disp = NULL; #ifdef DISPLAY_CLASS @@ -1449,6 +1445,10 @@ void setup() { #endif #endif + if (!radio_init()) { halt(); } + + fast_rng.begin(radio_get_rng_seed()); + #if defined(NRF52_PLATFORM) InternalFS.begin(); the_mesh.begin(InternalFS,