Repository navigation
epic(#733): apply radio presets to repeaters, room servers and sensors - #746
Merged
Merged
Conversation
…tings The remote-node radio card gains the same grouped RadioPresetPicker as Radio Settings. Picking a preset fills frequency, bandwidth, SF and CR and marks the radio field dirty, so Save sends the existing `set radio`. TX power is untouched: on these nodes it is a separate command. Room servers share this screen (contacts_screen.dart:1063), so they get it too. The selection is matched from the current fields to the nearest kHz (repeaters report e.g. 908.205017). The list refreshes when stale. Epic: #733 Agent: MagentaHawk (session 5a8922d6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…adio settings A checkbox on the remote-node radio card switches Save from `set radio` (persisted, applied after a reboot) to stock `tempradio` (applied now, reverting after the duration, nothing saved). The duration defaults to 1440 minutes (owner decision) and is limited to 1-35791: firmware schedules the revert at 2000 + minutes * 60000 ms in a 32-bit int, which overflows beyond that. Because tempradio retunes the node 2 s after it replies, it is sent after every other command in the same save. Coding rate goes out as the 4/x denominator, which is what firmware range-checks. Unchecked behaviour is unchanged. Epic: #733 Agent: MagentaHawk (session 5a8922d6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picking a preset that carries a path hash size sets the screen's existing path hash field to the zero-based mode, so Save sends `set path.hash.mode N` alongside the radio params. With "Apply temporarily" checked, a preset's path hash is held back: firmware has no temporary path hash, so it would outlive the tempradio revert and leave the node off its mesh. A note says so on screen, and the value stays pending for a normal save. A path hash the user sets by hand is always sent. (Default chosen here; flagged for the owner.) Epic: #733 Agent: MagentaHawk (session 5a8922d6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sensor contacts gain a "Manage Sensor" item that opens the repeater login and admin hub. Stock sensor firmware handles the same admin login (SensorMesh::handleLoginReq) and CLI-over-mesh as repeaters, so the remote settings screen, its preset picker and tempradio option work there too. Repeater and room server menus are unchanged. Epic: #733 Agent: MagentaHawk (session 5a8922d6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 1, 2026
Same gap as the companion form: a repeater on the USA values with a 1- or 2-byte path hash matched MeshCore's "Canada" (3-byte). The remote matcher now takes the node's path hash mode and applies the same rule. Epic: #733 Agent: MagentaHawk (session 5a8922d6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
So "1 to N minutes" never shows as an error on an untouched form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Epic C of Feature #647 (plan of record:
docs/initiatives/standalone/647-mesh500-presets/PLAN.md). Epic: #733. Stacked on Epic B (#744): the base isfeat/726-preset-catalog, so this diff shows only Epic C. It retargets todevonce #744 merges.What this changes
Remote nodes (repeaters, room servers, sensors) can apply the same presets through the stock admin CLI.
tempradio f,bw,sf,cr,minutesinstead ofset radio. Default 1440 minutes, allowed 1 to 35791 (firmware's 32-bit revert timer overflows beyond that). It's sent after every other command, because the node retunes 2 s after replying. CR goes out as the 4/x denominator.set path.hash.mode(zero-based). On a temporary save it is held back and stays pending, since firmware has no temporary path hash and it would outlive the revert; a note says so on screen. This is a default I chose; the owner can reverse it.SensorMeshhandles the same login and CLI over the mesh.Verification (C4, #736)
CI-equivalent gates, run at
ba6f9462:check_no_emdash.py: OK.flutter analyze --fatal-infos --fatal-warnings: no issues.dart format --set-exit-if-changed: 0 files changed.flutter test: 1040 passed (1 skip predates this work).test/helpers/remote_radio_commands_test.dartpins:set radio/tempradiostrings;tempradiogoes last;The live
OK - temp params for N minsreply and the revert are checked on a real repeater at D1 (#738).Pre-PR Gemini review
scripts/llm-consult.py --backend gemini --model gemini-2.5-pro. Audit log~/.claude/llm-consultations/meshcore-open/2026-10-01-gemini-epicC-prompt-gemini-gemini-2.5-pro.log. Cost $0.0138, plus one earlier call that failed with no response parts and wrote no audit log (its cost is unknown).tempradiorevert, which is just as true after a frequency tweak. Only a deliberate edit to the path hash itself shows the user wants it applied, and that edit already clears the flag.helperTextrenders in the normal hint style; error styling iserrorText, which isn't used. A range hint is useful before the user hits a bad value.Agent: MagentaHawk (session 5a8922d6)
🤖 Generated with Claude Code