Commit Graph
175 Commits
Author SHA1 Message Date
mikecarper 30464b022d Guard startup resets in the pinned Arduino 3.1.3 HWCDC driver 2026-10-05 13:08:55 -07:00
mikecarper 4b95a288ca Capture HWCDC startup resets in the pinned Arduino 3.3.11 driver 2026-10-05 12:59:37 -07:00
mikecarper 459d2a8cef Preserve the first HWCDC console session after flashing 2026-10-05 12:42:58 -07:00
mikecarper 54d204b418 Keep OTA headers aligned with the checked-out vendored source 2026-10-05 11:56:00 -07:00
mikecarper 47f4581056 Complete browser OTA responses before reboot and allow HTTP restarts 2026-10-05 11:52:24 -07:00
mikecarper ef98be919a Preserve download-only Mesh America hardware cards 2026-10-05 05:34:08 -07:00
mikecarper e2543c012a Support pinned Arduino 3 filesystem buffer checks 2026-10-05 05:33:09 -07:00
mikecarper 01c5cc2836 Qualify 1.17.1.9 memory limits and exact release asset routing 2026-10-05 01:14:02 -07:00
mikecarper 3ed1c5a26e Migrate ESP32 native USB roles to bounded hardware CDC
Switch eight S3 board defaults and 78 remaining TinyUSB recipes to hardware Serial/JTAG while preserving UART and other platforms. Restore retained S3 PHY ownership after a TinyUSB OTA restart and prepare KISS queues before enabling the driver.

Add real recipe resolution, Companion/KISS transport sanitizer coverage, and RF lifecycle reset regressions to CI. Native tests pass 1765/1765; SDK, transport, recipe and USB watchdog checks pass. Board and role cross-compilation and physical OTA qualification continue.
2026-10-04 23:36:54 -07:00
mikecarper e5dccbce9e Reject unhonored ESP filesystem buffer sizes before I/O 2026-10-04 08:20:16 -07:00
mikecarper 6955dad820 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 43f7f75ac0 Fix nRF52 loop stack allocation under LTO 2026-10-04 01:54:01 -07:00
mikecarper 9a3774ad04 Merge observer OTA channel switching into keymindCascade 2026-10-04 00:26:46 -07:00
mikecarper c3009096b2 Bind resumed firmware packages to their effective build recipe 2026-10-03 20:48:49 -07:00
mikecarper 10d16bba43 Use resolved PlatformIO directories for migration packaging 2026-10-03 20:35:27 -07:00
mikecarper 22360f4392 Share lossless voice prefixes across companion announcements 2026-10-03 19:11:15 -07:00
mikecarper 24fcbf3247 Merge USB session safety and preserve GPS preference compatibility 2026-10-03 16:12:32 -07:00
agessaman ebd562e2c8 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 b03fa60372 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 d454250cab Fix USB logging session safety and add hourly GPS sync interval 2026-10-03 15:43:35 -07:00
agessaman 6e2c94e9b2 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 33bc19722f ci(ota): verify each published binary's native channel by tag
Every observer build now carries both channel URLs, so checking for a URL's
presence or absence can no longer tell prod from beta (and the old checks would
reject every build). Read the ota-base-* tags from every .bin in out/ instead
of a single ELF, with URLs shared by build.sh and both workflows.
2026-10-03 15:24:11 -07:00
mikecarper 91d533bfff Fix USB logging ownership, persistence, and reconnect safety 2026-10-03 14:45:57 -07:00
mikecarper c1a533572a Improve firmware tooling docs and OTA seeder startup checks 2026-10-03 03:12:24 -07:00
mikecarper 8519638367 Add Zira spoken button confirmations and opt-in G726 speech tests 2026-10-03 03:03:02 -07:00
mikecarper 5833ac2f1f 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 29de7820e5 Integrate upstream fixes and paired nRF52 sensor OTA release profiles 2026-10-02 17:52:12 -07:00
mikecarper 8a69e73226 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 a2854f8f43 Support 2+ path-hash width filters 2026-10-02 10:21:17 -07:00
mikecarper 52c163ad6f Add encoded path-hash width selectors to forwarding rules 2026-10-02 10:07:48 -07:00
mikecarper a825307e4c Fix nRF52 Bluetooth DFU stack handoff 2026-10-01 16:15:59 -07:00
mikecarper 759c97477c Point logging sleep contract at archived release notes 2026-10-01 12:01:25 -07:00
mikecarper 4ee1e6b550 Publish 1.17.1.8 USA Cascade catalogs and firmware picker 2026-10-01 10:11:03 -07:00
mikecarper 5353a237a0 Verify picker disclosure of Indicator render memory tradeoffs 2026-10-01 07:54:34 -07:00
mikecarper bbda0ee2ea Preserve Indicator PSRAM capacities with the proven compact canvas 2026-10-01 07:53:21 -07:00
mikecarper 633e2ce832 Add opt-in nRF52 Bluetooth event diagnostics and USB capture 2026-10-01 02:19:45 -07:00
mikecarper a834882836 Keep Companion get radio compatible with upstream CSV 2026-09-30 23:48:47 -07:00
mikecarper c7dcbd4c31 Distinguish BLE link loss from firmware watchdog evidence 2026-09-30 23:39:25 -07:00
mikecarper 70e8c98567 Merge remote-tracking branch 'origin/keymindCascade' into keymindCascade 2026-09-30 23:38:05 -07:00
mikecarper fa9f7dd538 Add legacy RAK3401 OTA route and relay reboot recovery 2026-09-30 23:30:08 -07:00
mikecarper bb58b40d9c Persist Full Companion BLE subscriptions across reboot 2026-09-30 23:20:14 -07:00
mikecarper 72982fa55f Preserve SoftDevice memory side effects under nRF52 LTO 2026-09-30 23:01:37 -07:00
mikecarper 0feffaa3ab Fix WebConfig bootstrap for legacy Android Chrome
Physical LG Android 5.1.1 testing found Chrome 43 could decode gzip but failed on the bootstrap's arrow syntax. Use ES5 functions and Promises while preserving retries, version refresh, and optional abort handling. Keep Google Zopfli gzip compression at 1,000 iterations.

Verified the flashed V4.3 through its WiFi link using the real Android browser: bootstrap and main page gzip responses completed, settings loaded at 910.525 MHz, and no JavaScript or transfer errors were reported. Add a loader syntax regression and document legacy browser support.
2026-09-30 19:20:12 -07:00
mikecarper 02b8935794 Merge PR #13 with gzip-only WebConfig assets
Keep the graceful final-ACK TCP close and optional FEM control guards from
pixitha's browser compatibility fixes. Replace Brotli negotiation and duplicate
page assets with one gzip representation compressed by Google Zopfli 0.4.3
using 1,000 iterations. Compress the bootstrap, captive success, compact OTA,
and static WiFi setup pages with the same validated build cache.

Honor gzip quality values and wildcard precedence. Validate compressed OTA
page evidence in the firmware capability gate, and add native and Python
regressions plus CI coverage. Remove the unused Brotli build dependency.

Validation: 54 native tests, 56 Python/browser checks, full V4.3 build and
verified application flash. Actual V4 WiFi responses matched the generated
gzip assets; 30 repeat downloads completed without reboot. Chromium loaded
the setup and settings pages without script or transfer errors. Physical
Android testing is pending because the Pi detects no phone over USB or mDNS.
2026-09-30 18:55:17 -07:00
Kyle Duren 22aa62e7d6 Use gzip fallback for WebConfig clients 2026-09-30 17:07:59 -04:00
Kyle Duren 70d183a3ae Fix WebConfig browser compatibility 2026-09-30 16:58:36 -04:00
mikecarper bf04fbb2e8 Offer exact latest bootloader files only for selected nRF52 hardware 2026-09-29 17:00:19 -07:00
mikecarper fd7b93c52d Link ESP32 picker to exact partition expansion packages 2026-09-27 21:13:25 -07:00
mikecarper 4db7780ba7 Prepare 1.17.1.7 Cascade release catalogs and STM32WL USB images 2026-09-27 10:20:43 -07:00
mikecarper 709a6fa735 Precompute ESP32 release partition lookup table 2026-09-26 19:58:28 -07:00