From 8765286119a22aa5d8a70aa302058f9ae579f003 Mon Sep 17 00:00:00 2001 From: liquidraver <504870+liquidraver@users.noreply.github.com> Date: Mon, 27 Apr 2026 09:09:51 +0200 Subject: [PATCH] fix CLI radio settings applied immediately instead after reboot --- zephcore/helpers/CommonCLI.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/zephcore/helpers/CommonCLI.cpp b/zephcore/helpers/CommonCLI.cpp index 17bea62..31b161e 100644 --- a/zephcore/helpers/CommonCLI.cpp +++ b/zephcore/helpers/CommonCLI.cpp @@ -629,11 +629,22 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch uint8_t cr = num > 3 ? atoi(parts[3]) : 0; if (freq >= 150.0f && freq <= 2500.0f && sf >= 5 && sf <= 12 && cr >= 5 && cr <= 8 && bw >= 7.0f && bw <= 500.0f) { - _prefs->sf = sf; - _prefs->cr = cr; + /* Snapshot current runtime params — the radio driver reads _prefs live, + * so restoring them after the disk write keeps the radio on current + * settings until reboot loads the new values from flash. */ + float old_freq = _prefs->freq; + float old_bw = _prefs->bw; + uint8_t old_sf = _prefs->sf; + uint8_t old_cr = _prefs->cr; _prefs->freq = freq; - _prefs->bw = bw; + _prefs->bw = bw; + _prefs->sf = sf; + _prefs->cr = cr; _callbacks->savePrefs(); + _prefs->freq = old_freq; + _prefs->bw = old_bw; + _prefs->sf = old_sf; + _prefs->cr = old_cr; strcpy(reply, "OK - reboot to apply"); } else { strcpy(reply, "Error: freq 150-2500, bw 7-500, sf 5-12, cr 5-8"); @@ -755,8 +766,10 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch } else if (sender_timestamp == 0 && memcmp(config, "freq ", 5) == 0) { float f = atof(&config[5]); if (f >= 150.0f && f <= 2500.0f) { + float old_freq = _prefs->freq; _prefs->freq = f; savePrefs(); + _prefs->freq = old_freq; strcpy(reply, "OK - reboot to apply"); } else { strcpy(reply, "Error: range 150-2500 MHz");