Commit Graph
887 Commits
Author SHA1 Message Date
mikecarper 8c7f4df1cd feat(radio): enable fast profile switching across direct SX1262 boards
Add acknowledged SetFs and packet-cache shortcuts for SX1262, extend the LR1110 FS-mode fast path with buffered SPI, and keep the expander-backed Indicator on its previous path. Include HIL fixtures, validation notes, and regression tests.
2026-09-21 22:57:22 -07:00
mikecarper de82477184 fix(picker): use release JSON for OTA and logging 2026-09-21 20:02:53 -07:00
mikecarper c1571077a5 docs(picker): publish verified runtime capabilities 2026-09-21 19:58:46 -07:00
mikecarper 4cf8e77d57 docs(picker): record verified iKoka logging modes 2026-09-21 19:52:21 -07:00
mikecarper 68d99b4f2c docs: keep node clock correction page-local 2026-09-21 16:09:47 -07:00
mikecarper 900339db90 docs: compensate scheduled radio for node clock 2026-09-21 16:03:31 -07:00
Blake Latchford 0c3fe356d0 Constrain agc.reset.interval and allow intervals > 255s 2026-09-21 12:26:36 -04:00
ripplebiz 65737d48f4 Merge pull request #3402 from meshcore-dev/sensor-improvements
Sensor improvements
2026-09-21 19:03:18 +10:00
mikecarper 653578c818 docs: show preset builder until configured 2026-09-21 01:17:09 -07:00
mikecarper 54eb0bd5b3 docs: add repeater tempradioat preset 2026-09-21 00:57:21 -07:00
mikecarper c4ef693395 fix(docs): reflect preset URL in page header 2026-09-20 16:40:49 -07:00
mikecarper c60eea9c59 docs: name the default preset test 2026-09-20 16:29:24 -07:00
mikecarper a37caf1507 feat(kiss): enable fast profile scanning on Station G3 2026-09-20 08:16:00 -07:00
mikecarper 7657840d38 feat(kiss): add dual-profile radio2 support for OpenHop 2026-09-20 07:59:43 -07:00
agessaman a1f3e2c3d3 feat(webconfig): let the portal discover board-specific CLI commands
The FEM commands moved out of CommonCLI into Board::handleCommand(), and
the T-Beam 1W fan control was added there too, but the portal never caught
up: `radio.fem.txgain` and the fan commands were missing from the terminal
table entirely, while `radio.fem.rxgain` was offered on every board even
though a board with no hook now answers "??:" rather than "unsupported".

Whether a node answers these is a property of the board, not of the build,
so the page cannot know from the firmware version. Ask the board instead:
probeBoardCommands() runs each candidate getter once on the loop task at
startup and keeps the ones that answer, which needs no per-variant list
because Board::handleCommand() already reports whether it handled a
command. /api/status names the survivors and the page hides everything
else, so adding a command to a variant means one entry in WC_BOARD_CMDS
rather than an edit per board.

The two FEM keys also become Radio-panel toggles, gated the same way;
their `set` reaches the board hook through the existing config batch, so
only the allowlist and /api/config needed to grow.

webconfig_cli_audit.py now scans variants/*/*Board.cpp for the boards that
actually build the portal, checks set-only keys in the reverse direction,
and verifies every gate is a command some board answers; the mock gained
--board-cmds so both shapes of board are testable. `stop ota` joins
NOT_OFFERED: `start ota` cannot run from the portal, so it has nothing to
stop.
2026-09-19 20:51:25 -07:00
mikecarper 66b605a49d Add Wi-Fi OTA partition migration support 2026-09-19 20:14:37 -07:00
mikecarper e5768b12d0 Correct stock preset test commands 2026-09-19 09:46:49 -07:00
mikecarper c5fb923cdc Publish canonical Full partition-migration targets 2026-09-19 09:28:04 -07:00
agessaman 8ab6a988aa Merge branch 'observer-firmware-dev' into feat/abstract-networking 2026-09-19 09:23:32 -07:00
mikecarper 5fd9d039f5 Add one-way OTA target migration aliases 2026-09-19 08:30:52 -07:00
mikecarper 86e8c413cd Hide superseded observer profiles in picker 2026-09-18 14:27:51 -07:00
mikecarper 5f7d03373c Fix capacity matrix build regressions 2026-09-17 23:54:11 -07:00
agessaman 77398bfc89 Merge upstream/dev into observer-firmware-dev 2026-09-17 21:19:23 -07:00
mikecarper da3ce75dd2 Add browser management report decoder 2026-09-17 14:31:12 -07:00
mikecarper 842be1841c Document room access 2026-09-17 13:57:15 -07:00
mikecarper ebee99af81 Consolidate companion components 2026-09-17 13:41:39 -07:00
mikecarper b981c5cf88 Split MQTT and ESP-NOW controls in Full ESP32 builds 2026-09-17 01:13:10 -07:00
mikecarper 6cb1c41eae Combine ESP-NOW and MQTT in ESP32 Full builds 2026-09-17 00:37:32 -07:00
mikecarper 57dd2661b6 Sync repeater GPS weekly in power saving mode 2026-09-16 22:42:51 -07:00
mikecarper cdd84bdb9f Limit repeater GPS acquisition and repair CI tests 2026-09-16 21:27:15 -07:00
mikecarper 9610cc4245 Add secure management reports and honor GPS off 2026-09-16 20:42:30 -07:00
mikecarper 644c9c078d Keep generated test URLs readable 2026-09-16 17:27:18 -07:00
mikecarper 17616b2951 Collapse reusable test generator 2026-09-16 17:20:59 -07:00
mikecarper d90b71aa21 Add interactive timezone map picker 2026-09-16 15:22:17 -07:00
mikecarper db91c9f22e Fix timezone dropdown cache mismatch 2026-09-16 15:09:11 -07:00
mikecarper 98b856d1d6 Use browser timezone in test generator 2026-09-16 15:03:02 -07:00
mikecarper 2cd9a9dbae Use stock-compatible radio test exit 2026-09-16 14:58:38 -07:00
mikecarper d61b287ddc Add reusable radio test link builder 2026-09-16 14:52:34 -07:00
mikecarper 1818e60387 Open radio test setup one hour early 2026-09-16 14:35:18 -07:00
mikecarper c919f18388 Disable Material copy controls before test 2026-09-16 14:29:55 -07:00
mikecarper 784eb2a0b2 Prevent early TempRadio command copying 2026-09-16 14:21:29 -07:00
mikecarper e350ace09b Document preset test continuity plan 2026-09-16 14:19:35 -07:00
mikecarper ce994065c6 Add temporary radio test command generator 2026-09-16 14:15:34 -07:00
mikecarper 4139e7e24d Merge meshcore-dev dev with companion and board integrations 2026-09-15 20:51:43 -07:00
mikecarper a88ced23b6 Fix OTA resume, CLI identity, radio persistence, and network sessions
Distinguish OTA read failures from missing blocks and select unique raw-flash checkpoints by MID and target. Keep deferred CLI requests and replies bound to immutable command identity and full authenticated keys.

Gate radio mutations on their exact reply delivery, recover coding-rate restoration, and roll back failed Companion preference writes. Preserve accepted low duty cycles across reboot.

Retain partial network writes, cancel displaced client operations, and reject malformed or stalled framed input. Add regression and CI coverage, and size-optimize the RAK4631 Ethernet build without dropping features.
2026-09-15 14:32:40 -07:00
mikecarper 931cb4928f Preserve Wi-Fi reconnect backlogs by client IP
Retain same-IP replies and park one displaced IP backlog for 30 seconds using existing fixed buffers. Cancel old route-owned operations on takeover, preserve partial TCP frames, and cover reconnect isolation and queue limits with regression tests.
2026-09-15 13:13:36 -07:00
mikecarper e4e0de8a79 Fix OTA resume and radio state recovery
Preserve resumed nRF52 flash pages and keep filtered OTA catalogs incomplete until full pages arrive. Bound stuck radio preparation, report companion setting failures, retain safe rollback, and codify conservative advert penalties with regression tests.
2026-09-15 12:17:54 -07:00
mikecarper 7c443e9f71 Harden radio recovery, OTA reconnects, and companion settings
Reject radio changes when receive mode cannot resume and restore the previous physical profile and power policy. Preserve selected folder OTA captures across disconnects and recoverable host I/O failures, while keeping corruption failures distinct. Validate OTA staging input before arithmetic or buffer writes and revoke published data before edits.

Commit companion channels through verified file replacement on ESP32, RP2040, and STM32, and quarantine incomplete startup reads. Recheck the last management connection during delayed wireless changes and prevent conflicting Bluetooth shutdowns. Detect complete OTA implementation sources rather than the shared inflater when configuring release builds.

Add fault-injection regressions and CI coverage for these paths, and document folder capture reconnect behavior.

Validation: 1,510 native tests; 55 host integration checks; build profile regressions; ESP32, nRF52, STM32, and RP2040 firmware builds.
2026-09-15 10:02:23 -07:00
mikecarper dde87f1d15 Preserve OTA block progress and channel checks during radio recovery
Drain received packets in single-profile radio fault backoff as well as
dual-profile mode. Share the normal channel-clear and bounded busy policy
with driver retries so a failed send cannot retry blindly or bypass the
existing single-retry limit.

Retain an unadmitted OTA request flight and count v2 fallback evidence only
after a sparse retry enters the transmit queue. Local queue congestion no
longer disables v2 before a request was sent or discards received fragments.

Include primary airtime when temporary RX-only radio2 crosses requests onto
that channel, keeping response allowances conservative on slower profiles.

Add six native regressions, including five failing-before cases, and document
the queue-admission and crossover timing behavior.

Validation: 1,502 native tests, 29 integration checks, and five firmware
builds passed across ESP32-S3, nRF52, and STM32.
2026-09-15 07:54:16 -07:00
mikecarper 5d69aa461f Fix OTA retry accounting and radio delivery races
Keep catalog, manifest and leaf requests pending when the local transmit
queue rejects them instead of spending their network retry allowance.

Keep the packet selected before CAD so work becoming due during sensing
cannot bypass its own channel or pacing checks. Retire cancelled radio
retries before waiting for BUSY hardware or their retry deadline.

Wait for active transmission completion before applying firmware. Stop
admitting new transmissions after the apply drain deadline so busy queues
cannot postpone reboot indefinitely, and keep those deadlines armed across
millis rollover. Retain the existing persistence-flush backoff.

Add failing-before/fixed-after regression coverage for all four issues,
including the production OTA apply and TX guards in CI.

Validation: 1,496 native tests, 42 Python integration tests, and five
firmware builds passed across ESP32-S3, nRF52, and STM32 targets.
2026-09-15 06:45:28 -07:00