CMD_SET_RADIO_PARAMS and the on-device Settings radio editors
(Freq/SF/BW/CR/Preset) called radio_driver.setParams() directly instead
of applyRepeaterRadio(), so editing the companion's own radio params
while relaying on a dedicated profile silently retuned the live radio
off that profile. Both now route through applyRepeaterRadio(), the
single decision point already used at boot and by the on-device
repeater toggle.
Also: overhear-suppression matched queued packets by payload hash
alone, so it could cancel a queued direct-route retransmit that
happened to share a hash with an overheard flood packet — now scoped
to flood-queued entries only. repeaterProfileValid()'s frequency floor
(100 MHz) is raised to 150 MHz to match the radio's actual validated
range. RepeaterScreen's preset-name lookup now uses the same
epsilon-tolerant float comparison as Settings instead of exact ==,
avoiding inconsistent "Custom" labeling between the two screens.
Dedupe: the BW-options table, the value-column x-offset math, and the
default-profile-seeding block had each drifted into two or three
independent copies (RepeaterScreen vs Settings, MyMesh constructor vs
DataStore.cpp upgrade path); factored into shared helpers in
RadioPresets.h / NodePrefs.h.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Settings > Radio gains:
- Repeater toggle — turns on flood forwarding (client_repeat) on the current
operating frequency, with loop-detection and an 8-hop advert cap ported
from simple_repeater's allowPacketForward.
- Packet pool bumped 16->32: forwarding's queued retransmits were starving
Dispatcher::checkRecv()'s allocNew(), silently dropping incoming DMs and
channel messages while repeating.
- Preset picker (16 community-suggested region presets) plus manual
Freq/SF/BW/CR fields for fine-tuning. Freq bounds come from the radio
driver's own RadioLib-validated range (SX1262: 150-960MHz) instead of a
guessed sanity bound.
- Save current radio settings as a named user preset (4 persisted slots),
alongside the built-in list.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>