feat(repeater): status-bar indicator, power-save lock, diag polish

- Status bar: blinking » indicator while relaying (new ICON_REPEATER), added to
  the 1 s blink cadence alongside the advert/trail markers.
- Power-save lock: a repeater must hear all traffic, so duty-cycle RX is forced
  off whenever client_repeat is on. Effective state = rx_powersave && !repeat,
  applied at boot, in applyPowerSave(), on the on-device toggle, and on the app's
  CMD_SET_RADIO_PARAMS. Settings shows "--" and blocks the toggle while repeating;
  the user's pref is preserved and restored when the repeater is switched off.
- Diagnostics: reset now uses the standard Hold-Enter one-item action menu (Back
  dismisses) instead of an Enter/Cancel popup; new "Errors" row decodes the
  Dispatcher ERR_EVENT_* flags (F/C/R, or OK).
- RepeaterScreen: drop the live stats block (they live on Diagnostics).
- Min-SNR load clamp tightened to the UI's -20..10 range.

Docs updated (settings_screen, tools_screen, FEATURES).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-06-19 14:05:00 +02:00
parent 0da487729d
commit 84a76adcf1
11 changed files with 80 additions and 53 deletions

View File

@@ -348,8 +348,8 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
if (_prefs.repeat_max_hops > 64) _prefs.repeat_max_hops = 0;
if (_prefs.repeat_delay_boost > 8) _prefs.repeat_delay_boost = 0;
if (_prefs.repeat_min_snr != NodePrefs::REPEAT_SNR_DISABLED &&
(_prefs.repeat_min_snr < -30 || _prefs.repeat_min_snr > 20))
_prefs.repeat_min_snr = NodePrefs::REPEAT_SNR_DISABLED;
(_prefs.repeat_min_snr < -20 || _prefs.repeat_min_snr > 10))
_prefs.repeat_min_snr = NodePrefs::REPEAT_SNR_DISABLED; // match the UI's -20..10 range
if (_prefs.repeat_suppress_dup > 1) _prefs.repeat_suppress_dup = 0;
rd(&_prefs.repeater_use_profile, sizeof(_prefs.repeater_use_profile));
rd(&_prefs.repeater_freq, sizeof(_prefs.repeater_freq));