Commit Graph
1397 Commits
Author SHA1 Message Date
MUSTARDTIGERFPV c6d71b969a Enable the on-demand mOTA context for every classic ESP32 build
Move OTA_HEAP_CONTEXT from two hand-edited envs to a pre-script gated on
build.mcu == "esp32", so every classic ESP32 image gets it and none can drift.
S2/S3/C-series and nRF52 keep the .bss singleton: they have no equivalent
static-DRAM ceiling, so there a guaranteed-present workspace is the better
trade for what is ultimately a recovery path. It has to be a build flag rather
than a header default, because OTA_HEAP_CONTEXT must hold the same value in
every translation unit that sees OtaContext.h - OtaContext.cpp included - and a
header test on CONFIG_IDF_TARGET_ESP32 would depend on include order relative
to sdkconfig.h. The script defers to OTA_SHARED_COMPANION_QUEUE where a Full
Companion recipe already owns the storage.

Fix a gap this exposes in the roles that now use it. Only CLI entry points
acquire the context, so once it was released, a repeater with the temporary
radio profile up would no longer serve or announce its own firmware - LoRa OTA
would look enabled and silently do nothing. ota_service_temp_radio_context()
holds the workspace for exactly the temp-radio window and hands it back
outside it, which is where the saving was coming from anyway. Wired into the
repeater, room server and sensor loops; the Companion keeps its own
acquire-on-host-demand policy, since its context is borrowed from the offline
message queue and must not be taken speculatively.

Static DRAM, classic ESP32 (bytes occupied of a 124,580 region):
  Heltec_v2_repeater                   108,332 -> 70,732
  Heltec_v2_room_server                 83,716 -> 68,300
  Heltec_v2_companion_radio_ble        123,236 -> 107,772  (was failing on main)
  Tbeam_SX1262_repeater                 86,932 -> 71,468
  Tbeam_SX1262_repeater_observer_mqtt  121,132 -> 83,532   (was failing)
2026-09-09 01:24:00 -07:00
MUSTARDTIGERFPV 0d42d3c8e1 Move large repeater tables off classic ESP32 static DRAM
Classic ESP32 links into a dram0_0_seg of only 124,580 bytes: memory.ld
carves the BT controller's 0xdb5c (56,156) reservation off the 0x2c200
window before the application gets any. Three large objects dominated what
was left, and Tbeam_SX1262_repeater_observer_mqtt overran the build's 8 KiB
static reserve by 4,744 bytes.

Heap-allocate them instead, each with a defined behaviour when the
allocation fails:

- OtaContext: generalize the Companion's borrowed-storage path behind
  OTA_DYNAMIC_CONTEXT and add OTA_HEAP_CONTEXT, which allocates the context
  on first use and frees it once no transfer, apply or folder link needs it.
  A repeater is idle nearly all the time, so the workspace is usually absent.
  Exhaustion is reported to the caller and the operation declines.
- ClientACL: the client table becomes a pointer with a live capacity;
  capacity 0 refuses new clients rather than writing through a null table.
- MyMesh flood packet filters: likewise, with flood_packet_filter_slots as
  the live bound for every rule loop. At capacity 0 the node forwards
  unfiltered, and both save paths refuse to write so a stored ruleset is
  never replaced by an empty file.

Also override the Arduino SDK's weak btInUse() in simple_repeater so
initArduino() releases the BT controller memory to the heap. That grows the
runtime heap these tables now come from; it cannot recover the same
reservation from the linker's static window.

Static DRAM, classic ESP32:
  Heltec_v2_repeater                   108,332 -> 70,732
  Tbeam_SX1262_repeater_observer_mqtt  121,132 -> 83,532  (was failing)
2026-09-09 01:24:00 -07:00
mikecarper f778d14c76 Add multi-tap channel navigation for messages 2026-09-08 22:47:15 -07:00
mikecarper c690f65376 Allow frequency changes over authorized LoRa CLI 2026-09-08 22:07:30 -07:00
mikecarper b9138c13b2 Allow local CLI maintenance across direct connections 2026-09-08 21:44:57 -07:00
mikecarper 5e6a74be50 Enable the shared terminal on WiFi-only Companions 2026-09-08 19:56:12 -07:00
mikecarper d178cf1474 Share the Companion terminal with the WiFi console 2026-09-08 19:48:15 -07:00
mikecarper cb79dcd4e3 Preserve MQTT settings across slot changes 2026-09-08 18:55:00 -07:00
mikecarper aa8caa4ed2 Unify device controls and restore the WiFi console 2026-09-08 18:36:23 -07:00
mikecarper 30d58d8e5b cleanup 2026-09-08 17:46:37 -07:00
mikecarper 1b3e5daa02 Add button navigation hints to the hidden John reader 2026-09-08 17:31:18 -07:00
mikecarper 05fd0a4794 Merge origin/keymindCascade with companion button hints 2026-09-08 17:24:27 -07:00
mikecarper 74d87c8d13 Show button controls on companion home and message screens 2026-09-08 17:11:43 -07:00
mikecarper ac694d536e Place setup AP status below the WiFi address 2026-09-08 16:56:10 -07:00
mikecarper 42a8795db6 Show connected WiFi address on the V4 setup screen 2026-09-08 16:47:19 -07:00
mikecarper 846282adf4 Use native display resolution and adaptive typography 2026-09-08 16:02:16 -07:00
mikecarper 469b47d190 Use readable 6px message font and keep 5px on tiny panels 2026-09-08 14:23:39 -07:00
mikecarper eeea15ef01 Use compact message text and sender lines on all small displays 2026-09-08 13:36:40 -07:00
mikecarper be41d9dd79 Cache Full Companion paths and shared secrets to recover RAM 2026-09-08 12:21:30 -07:00
mikecarper 9dbab4317d Avoid nested MQTT preference copies on the Companion loop stack 2026-09-08 10:05:59 -07:00
mikecarper 7ff11a2d64 Restore the V4 WiFi setup QR with a one-pixel border 2026-09-08 09:30:31 -07:00
mikecarper aa20e9278e Gate every firmware build on runtime RAM and share nRF52 mOTA storage 2026-09-08 02:09:26 -07:00
mikecarper 1b6a9dcb6a Share T096 Full mOTA memory with the offline queue 2026-09-08 01:15:19 -07:00
mikecarper 6958d82432 Add independent Companion Bluetooth stealth flag
Keep stealth separate from custom, saved-random and rotating MAC policies without migrating the development MAC mode. Persist authenticated peer state, guard advertising transitions and recovery, and expose the setting through the CLI and WebConfig.

Add regression and CI checks and record exact XIAO BLE pairing, reconnect, reboot and address-rotation hardware results.
2026-09-07 23:46:55 -07:00
mikecarper 4b400ea56b Add configurable Companion Bluetooth addresses 2026-09-07 18:29:00 -07:00
mikecarper fc3298c84d Fix G3 USB sleep and two-minute button wake 2026-09-07 16:28:02 -07:00
mikecarper 02020513f4 Prepare 1.17.1.5 USA Cascade release and verify update capabilities 2026-09-05 08:59:50 -07:00
mikecarper f8dfcaa240 Enforce classic ESP32 memory budgets and safe image merging 2026-09-05 08:22:56 -07:00
mikecarper 51ce1f8f0d Protect ESP32 HWCDC console sessions 2026-09-04 17:18:54 -07:00
mikecarper 69d9d9e62a Make uf2reset available across nRF52 CLI roles 2026-09-04 02:01:40 -07:00
mikecarper a8cf4fd12f Fix USB radio stalls and add durable replay timestamp recovery 2026-09-03 23:58:32 -07:00
mikecarper dea2ce495f Automatically recover internal Companion ExtraFS on boot 2026-09-03 15:15:23 -07:00
mikecarper 1f1ce55f81 Hide message footer on compact displays 2026-09-03 09:12:06 -07:00
mikecarper 942df304ca Give Full builds exclusive USB mOTA ownership 2026-09-03 02:33:23 -07:00
mikecarper ef92505429 Add observed login path commands 2026-09-02 19:23:56 -07:00
mikecarper 66894f9958 Harden nRF52 contact and settings persistence 2026-09-02 17:32:43 -07:00
mikecarper a8485057bd Fix auto nRF52 Companion OTA builds 2026-09-02 12:02:41 -07:00
mikecarper 610a88e8d5 Fix nRF52 contact persistence and ExtraFS recovery 2026-09-02 11:41:38 -07:00
mikecarper cf70478c51 Improve companion setup and USB session recovery 2026-09-02 03:44:28 -07:00
mikecarper ecaa5ac2a0 Harden nRF52 OTA, USB sessions, and T096 controls
Bind Companion replies to request transports, make dual-CDC USB sessions nonblocking and reconnect-safe, and harden nRF52 watchdog/OTA storage paths. Fix T096 button debounce, display wake, sleep races, and the compact message layout; add exact WisBlock OTA profiles plus expanded native/static/HIL documentation.
2026-09-01 20:51:43 -07:00
mikecarper fcd1f8cc6c Unify companion BLE and WiFi setup flows 2026-09-01 01:25:00 -07:00
mikecarper c0884680f8 Add WiFi setup QR to ESP32 displays 2026-08-31 21:49:12 -07:00
mikecarper 8ce1deacfe Make Indicator WiFi setup state actionable 2026-08-31 20:54:56 -07:00
mikecarper 3bd738c1c9 Keep Indicator RGB scanout alive during expander recovery 2026-08-31 19:10:54 -07:00
mikecarper 8351effff1 Recover Indicator display after warm reset 2026-08-31 19:06:07 -07:00
mikecarper 1abc36f636 Make Indicator WiFi display authoritative 2026-08-31 18:45:44 -07:00
mikecarper c2d4bcb7ba Refresh Indicator WiFi connection state 2026-08-31 18:36:44 -07:00
mikecarper 42888e6e3a Add Indicator WiFi setup as eighth home page 2026-08-31 17:31:48 -07:00
mikecarper a38e0370f9 Keep Indicator setup text large on fallback canvas 2026-08-31 16:36:46 -07:00
mikecarper e4ce6d7611 Enlarge Indicator native setup screen 2026-08-31 16:10:03 -07:00