From fec6ddbfa5f9db9354e183534c3576edb001cd98 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Thu, 28 May 2026 17:28:38 -0700 Subject: [PATCH] Remove Cascadia power saving default --- build.sh | 3 +-- docs/cli_commands.md | 2 +- examples/simple_repeater/MyMesh.cpp | 40 ++++++++++++++++++++++++++--- examples/simple_repeater/MyMesh.h | 2 ++ src/helpers/ESP32Board.h | 7 +++++ 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/build.sh b/build.sh index f30af6da..f06d9109 100755 --- a/build.sh +++ b/build.sh @@ -446,7 +446,6 @@ prompt_for_cascadia_profile_enable() { echo " - multi.acks: 1" echo " - path.hash.mode: 2" echo " - loop.detect: minimal" - echo " - powersaving: on" prompt_on_off_choice "Enable Cascadia profile overrides" "on" if [ "$MENU_CHOICE" == "on" ]; then FIRMWARE_PROFILE_OVERRIDE="cascadia" @@ -958,7 +957,7 @@ apply_radio_overrides() { apply_firmware_profile_overrides() { case "${FIRMWARE_PROFILE_OVERRIDE,,}" in cascadia) - export PLATFORMIO_BUILD_FLAGS="${PLATFORMIO_BUILD_FLAGS} -DCASCADIA_PROFILE=1 -DDEFAULT_RX_DELAY_BASE=1.0f -DDEFAULT_LOOP_DETECT=1 -DDEFAULT_POWERSAVING_ENABLED=1 -DDEFAULT_AGC_RESET_INTERVAL=2 -DDEFAULT_ADVERT_INTERVAL=0 -DDEFAULT_FLOOD_ADVERT_INTERVAL=83 -DDEFAULT_MULTI_ACKS=1 -DDEFAULT_PATH_HASH_MODE=2" + export PLATFORMIO_BUILD_FLAGS="${PLATFORMIO_BUILD_FLAGS} -DCASCADIA_PROFILE=1 -DDEFAULT_RX_DELAY_BASE=1.0f -DDEFAULT_LOOP_DETECT=1 -DDEFAULT_AGC_RESET_INTERVAL=2 -DDEFAULT_ADVERT_INTERVAL=0 -DDEFAULT_FLOOD_ADVERT_INTERVAL=83 -DDEFAULT_MULTI_ACKS=1 -DDEFAULT_PATH_HASH_MODE=2" ;; esac } diff --git a/docs/cli_commands.md b/docs/cli_commands.md index a5a55e80..cfbbe25a 100644 --- a/docs/cli_commands.md +++ b/docs/cli_commands.md @@ -498,7 +498,7 @@ This document provides an overview of CLI commands that can be sent to MeshCore - `on`: enable power saving - `off`: disable power saving -**Default:** `on` +**Default:** `off` **Note:** When enabled, device enters sleep mode between radio transmissions diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 26534931..d6e8a0c1 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -2143,7 +2143,6 @@ void MyMesh::begin(FILESYSTEM *fs) { _prefs.multi_acks = DEFAULT_MULTI_ACKS; _prefs.path_hash_mode = DEFAULT_PATH_HASH_MODE; _prefs.loop_detect = DEFAULT_LOOP_DETECT; - _prefs.powersaving_enabled = DEFAULT_POWERSAVING_ENABLED; #endif acl.load(_fs, self_id); // TODO: key_store.begin(); @@ -2208,6 +2207,34 @@ void MyMesh::sendFloodScoped(const TransportKey& scope, mesh::Packet* pkt, uint3 } } +void MyMesh::sendFloodScopedWithSelfPath(const TransportKey& scope, mesh::Packet* pkt, + uint32_t delay_millis, uint8_t path_hash_size) { + if (pkt == NULL) { + return; + } + if (path_hash_size == 0 || path_hash_size > MAX_ROUTE_HASH_BYTES) { + MESH_DEBUG_PRINTLN("%s MyMesh::sendFloodScopedWithSelfPath(): invalid path_hash_size", getLogDateTime()); + return; + } + + pkt->header &= ~PH_ROUTE_MASK; + if (scope.isNull()) { + pkt->header |= ROUTE_TYPE_FLOOD; + } else { + uint16_t codes[2]; + codes[0] = scope.calcTransportCode(pkt); + codes[1] = 0; + pkt->header |= ROUTE_TYPE_TRANSPORT_FLOOD; + pkt->transport_codes[0] = codes[0]; + pkt->transport_codes[1] = codes[1]; + } + + pkt->setPathHashSizeAndCount(path_hash_size, 1); + self_id.copyHashTo(pkt->path, path_hash_size); + getTables()->markSent(pkt); + sendPacket(pkt, 1, delay_millis); +} + bool MyMesh::sendRepeatersFloodText(const char* text) { if (text == NULL || *text == 0) return false; @@ -2223,8 +2250,15 @@ bool MyMesh::sendRepeatersFloodText(const char* text) { const size_t max_data_len = MAX_PACKET_PAYLOAD - CIPHER_BLOCK_SIZE; const size_t prefix_cap = max_data_len > 5 ? max_data_len - 5 + 1 : 0; + char sender_name[sizeof(_prefs.node_name)]; + StrHelper::strncpy(sender_name, _prefs.node_name, sizeof(sender_name)); + for (char* p = sender_name; *p; p++) { + if (*p == ':') { + *p = ';'; + } + } int prefix_written = prefix_cap > 0 - ? snprintf((char*)&temp[5], prefix_cap, "%s: ", _prefs.node_name) + ? snprintf((char*)&temp[5], prefix_cap, "%s: ", sender_name) : -1; if (prefix_written < 0) { return false; @@ -2247,7 +2281,7 @@ bool MyMesh::sendRepeatersFloodText(const char* text) { return false; } - sendFloodScoped(default_scope, pkt, 0, _prefs.path_hash_mode + 1); + sendFloodScopedWithSelfPath(default_scope, pkt, 0, _prefs.path_hash_mode + 1); return true; } diff --git a/examples/simple_repeater/MyMesh.h b/examples/simple_repeater/MyMesh.h index f55d1d40..5c1f09cb 100644 --- a/examples/simple_repeater/MyMesh.h +++ b/examples/simple_repeater/MyMesh.h @@ -242,6 +242,8 @@ protected: const uint8_t* path, uint8_t path_len, const uint8_t* alt_path, uint8_t alt_path_len, uint32_t delay_millis); + void sendFloodScopedWithSelfPath(const TransportKey& scope, mesh::Packet* pkt, + uint32_t delay_millis, uint8_t path_hash_size); public: MyMesh(mesh::MainBoard& board, mesh::Radio& radio, mesh::MillisecondClock& ms, mesh::RNG& rng, mesh::RTCClock& rtc, mesh::MeshTables& tables); diff --git a/src/helpers/ESP32Board.h b/src/helpers/ESP32Board.h index fe986593..e99752d9 100644 --- a/src/helpers/ESP32Board.h +++ b/src/helpers/ESP32Board.h @@ -73,6 +73,13 @@ public: return; } + #if defined(ARDUINO_USB_CDC_ON_BOOT) && ARDUINO_USB_CDC_ON_BOOT + if (Serial) { + delay(1); + return; + } + #endif + // Set GPIO wakeup gpio_num_t wakeupPin = (gpio_num_t)getIRQGpio();