mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-07 20:56:11 +00:00
fix(repeater): close radio-profile bypass paths, dedupe preset/BW logic
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>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
afe7b8a0ca
commit
4999620fba
@@ -291,3 +291,23 @@ struct NodePrefs { // persisted to file
|
||||
if (pos < size) buf[pos] = '\0';
|
||||
}
|
||||
};
|
||||
|
||||
// Bounds for a usable repeater radio profile — must match the radio chip's own
|
||||
// validated range (see CustomSX1262Wrapper::getFreqBounds(), 150-960 MHz), so
|
||||
// a profile that passes here is guaranteed to actually take effect on the radio.
|
||||
static inline bool isValidRepeaterProfile(float freq, float bw, uint8_t sf, uint8_t cr) {
|
||||
return freq >= 150.0f && freq <= 960.0f
|
||||
&& sf >= 5 && sf <= 12
|
||||
&& cr >= 5 && cr <= 8
|
||||
&& bw >= 7.0f && bw <= 510.0f;
|
||||
}
|
||||
|
||||
// Seed a never-configured repeater profile in the same band as the companion's
|
||||
// own network (see defaultRepeaterFreqForBand() above for why).
|
||||
static inline void seedDefaultRepeaterProfile(NodePrefs& prefs) {
|
||||
prefs.repeater_use_profile = 1;
|
||||
prefs.repeater_freq = defaultRepeaterFreqForBand(prefs.freq);
|
||||
prefs.repeater_bw = LORA_BW;
|
||||
prefs.repeater_sf = LORA_SF;
|
||||
prefs.repeater_cr = LORA_CR;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user