Commit Graph
2246 Commits
Author SHA1 Message Date
mikecarper 62d76b7bab Reduce ESP contact save backend work with bounded buffering 2026-10-04 08:20:28 -07:00
mikecarper c1a80e95c7 Preserve ESP native USB bytes across short FIFO writes
Backport the pinned Arduino 2.0.17 HWCDC suffix and interrupt handling into a build-local source copy. Preserve unsent bytes, serialize ISR and producer rearm, and include FIFO, suffix and active writers in transport cleanup proofs without changing the loop stack allocation.

Validate zero and short writes, producer races, quarantine and stale cleanup with sanitizer-backed native tests and negative controls. Keep other frameworks and USB modes on their existing drivers; update the watchdog file mock for the existing buffer API.
2026-10-04 06:49:31 -07:00
mikecarper 0a3187ac30 Stage ESP contact transaction startup between loop passes
Heltec V4 timing measured 2.19 seconds for recovery checks, temporary-file cleanup, open and buffer configuration combined in one lazy-save pass. Defer those startup operations across guarded companion loops while explicit durability callers still initialize synchronously.

Track ownership only after attempting to create the temporary file, preserve unowned stale files on early cancellation, and reject premature writes or commits. Cover startup faults, interruption, mutation, cache pressure and synchronous-construction negative controls with native sanitizer tests.
2026-10-04 05:27:09 -07:00
mikecarper 7e1750ceac Bound ESP contact transaction file buffers between loop passes
Arduino defaults to 4 KiB stdio buffering, so small record writes and CRC
reads could still trigger large SPIFFS batches. Set the newly opened ESP
writer buffer to one 152-byte contact record and verifier buffer to 64
bytes before I/O. Fail closed if either setup fails; keep other platforms
unchanged.

Model backend buffering separately from logical File operations. Validate
mutation cancellation, durability, setup failures, and negative controls
which restore the hidden default writer or reader batching. Update API
seams in existing uncached, radio and telemetry fixtures.
2026-10-04 04:32:37 -07:00
mikecarper 4f114e914b Keep ESP contact saves responsive on PSRAM boards
Extend the cooperative contact transaction to uncached ESP32 storage,
including the PSRAM policy used by the XIAO and V4. Preserve owned contact
copies, the 152-byte disk format, revision cancellation and synchronous
durability operations. Keep contact capacities unchanged.

Avoid SDK error logs when optional blob or transaction cleanup files are
absent, while preserving metadata and deletion failure handling.

Validate cached ESP/nRF and uncached PSRAM paths under ASan/UBSan,
including bounded writes, mutation cancellation, faults, recovery and
reboot readback. Update the existing uncached production fixture.
2026-10-04 04:01:40 -07:00
mikecarper a71b99fd62 Service cached contact persistence between companion loop passes 2026-10-04 03:39:27 -07:00
mikecarper 1e03eb3056 Retain oversized native USB commands until they can be rejected 2026-10-04 02:53:04 -07:00
mikecarper 67408ffd13 Support reader commands through local Bluetooth and USB CLI 2026-10-04 02:16:04 -07:00
mikecarper b128ac9a70 Start radio liveness watchdog when loop service begins 2026-10-04 02:05:32 -07:00
mikecarper 8586ef5f51 Fix nRF52 loop stack allocation under LTO 2026-10-04 01:54:01 -07:00
mikecarper 63f4642252 Merge observer OTA channel switching into keymindCascade 2026-10-04 00:26:46 -07:00
mikecarper c3d3c4e294 Retain and isolate delayed Companion results under backpressure 2026-10-03 23:22:34 -07:00
mikecarper 161600b4b7 Inspect received ACK route before clearing its header 2026-10-03 21:28:24 -07:00
mikecarper ea938e8e84 Preserve ACK ownership across contact relocation and retirement 2026-10-03 21:10:49 -07:00
mikecarper f0828e025a Share lossless voice prefixes across companion announcements 2026-10-03 19:11:15 -07:00
mikecarper 4837265648 Preserve USB mOTA ownership across deadlines and logging handoffs 2026-10-03 19:01:22 -07:00
mikecarper ecdaacdd58 Reject oversized USB frames and bound serial receive work 2026-10-03 18:55:23 -07:00
mikecarper 1d05ef9e86 Reduce radio preamble validation overhead with equivalent math 2026-10-03 18:31:46 -07:00
mikecarper 581339efe7 Harden management report persistence and CLI input handling 2026-10-03 18:26:26 -07:00
mikecarper 06fc2d58d1 Fix radio profile reconfiguration transaction results 2026-10-03 18:25:22 -07:00
mikecarper 18f7edcf82 Keep USB watchdog snapshots coherent and fail-safe 2026-10-03 18:22:32 -07:00
mikecarper 5ee6059564 Finalize USB watchdog management format as MGR2 2026-10-03 16:34:37 -07:00
mikecarper eeb25a8b5f Merge USB session safety and preserve GPS preference compatibility 2026-10-03 16:12:32 -07:00
agessaman 45d8f15098 Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev 2026-10-03 15:52:39 -07:00
agessaman 8ec31dda71 fix(ota): skip the bare compat search literal when scanning an image
Every image also holds "ota-compat:" with no value (the search string);
finding it first made every channel switch look untagged.
2026-10-03 15:52:21 -07:00
mikecarper 7803d4fb07 Add saved repeater trace exception while repeating is disabled 2026-10-03 15:48:44 -07:00
agessaman a0856bed72 feat(ota): dev stores /mqtt.json, so its state generation is 2
Builds that only read /mqtt_prefs (gen 1) are refused as channel-switch
targets until they can read /mqtt.json.
2026-10-03 15:47:01 -07:00
agessaman baf01a5c16 Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev
# Conflicts:
#	examples/simple_repeater/MyMesh.cpp
2026-10-03 15:47:01 -07:00
agessaman ed8af1b7ca fix(ota): refuse a channel switch to a build that cannot carry this node
A switch can land on an older build: e.g. prod cannot read dev's /mqtt.json,
and prod's M7 image has no Ethernet. Each image carries an ota-compat tag
(state generation + transports). A switch is flashed without rebooting, the
new image's tag is read (bounded by its length), and boot is pointed back at
the running image unless the target keeps this node's state and transports.
CI now requires the tag in every published binary.
2026-10-03 15:46:46 -07:00
mikecarper 65512661c3 Fix USB logging session safety and add hourly GPS sync interval 2026-10-03 15:43:35 -07:00
mikecarper 9b82c74275 Merge origin/keymindCascade USB reconnect fixes 2026-10-03 15:37:49 -07:00
agessaman a1943a8eac fix(ota): always offer another channel's image, even from the same commit
Prod and beta are often built from one commit (e.g. after a dev->prod merge),
so a hash match does not mean the images are the same: the native base differs.
After the flash the target channel is native, so this cannot loop.
2026-10-03 15:37:49 -07:00
mikecarper 3add4695cc Harden USB logging and persist watchdog events in management reports 2026-10-03 15:29:19 -07:00
agessaman ee88192acb Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev
# Conflicts:
#	.github/workflows/build-observer-firmwares.yml
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_room_server/MyMesh.cpp
#	src/helpers/ESP32Board.cpp
#	src/helpers/ESP32Board.h
#	test/test_config_serializer/test_config_serializer.cpp
2026-10-03 15:24:33 -07:00
agessaman 9c65e198f1 feat(ota): prod/beta channel names for ota branch, with stable/dev aliases
Report the selected channel and the build's own channel, tag each baked-in
base for CI, and list ota branch in the CLI docs and portal autocomplete.
2026-10-03 15:19:06 -07:00
agessaman 2633b4267c fix(ota): compare by commit hash when targeting another channel
Build counters are per channel, so a cross-channel build number is not
comparable: a switch to a channel with a lower counter reported up to date
and never happened. Off the native channel, update unless the hash matches.
2026-10-03 15:17:46 -07:00
Elektr0Vodka ea541e182a feat(ota): add 'ota branch [stable|dev|default]' command
(cherry picked from commit 240804999edb284fd276489e6898ccad8a19a8e7)
2026-10-03 15:17:36 -07:00
Elektr0Vodka 942a19eb63 feat(ota): pass runtime manifest base through otaFromManifest
(cherry picked from commit 0bee84c0546780b2e7147148c32087e92d894ac0)
2026-10-03 15:17:36 -07:00
Elektr0Vodka 3910489414 feat(ota): persist ota_channel selector in NodePrefs
(cherry picked from commit db1db5b57ecce408c7441cb6aa70f29608b09603)
2026-10-03 15:17:36 -07:00
Elektr0Vodka f04d163bea feat(ota): channel-base resolver + arg parser with native tests
(cherry picked from commit 52a4ccc39093891b64e3752316fe7c191fd9b9ca)
2026-10-03 15:17:36 -07:00
mikecarper b4c8c0ab23 Fix USB logging ownership, persistence, and reconnect safety 2026-10-03 14:45:57 -07:00
mikecarper 4086222d85 Persist Companion Bluetooth on-off preference across reboots 2026-10-03 03:09:20 -07:00
mikecarper c917158167 Add Zira spoken button confirmations and opt-in G726 speech tests 2026-10-03 03:03:02 -07:00
mikecarper f0199b3111 Add compressed self-serve OTA and resilient native USB sleep
Use a bounded uzlib-derived block encoder with the existing strict tinf decoder, qualify infrastructure roles, budget temporary RAM, and cache running-image metadata. Add self-serve CLI and policy, USB host-loss sleep grace, hardware test harnesses, regression tests, and CI coverage.
2026-10-03 01:14:23 -07:00
mikecarper 43f474a806 Integrate upstream fixes and paired nRF52 sensor OTA release profiles 2026-10-02 17:52:12 -07:00
mikecarper 42d6bfd560 Reduce nRF52 infrastructure flash usage without trimming sensors
Keep Companion and Terminal Chat profiles unchanged; retain full-sensor and reduced-sensor OTA builds. Add compact crypto and OTA names, qualified display asset compression, font license packaging, and scope regression tests.
2026-10-02 15:52:23 -07:00
mikecarper a0105731f5 Fix Companion pairing PIN display and truthful identity startup 2026-10-02 12:42:26 -07:00
mikecarper 7324bf06ef Support 2+ path-hash width filters 2026-10-02 10:21:17 -07:00
mikecarper d084f5b837 Add encoded path-hash width selectors to forwarding rules 2026-10-02 10:07:48 -07:00
mikecarper 0ccac4539d Restore Companion boot display and default WiFi to opt-in 2026-10-01 23:19:48 -07:00