From 6f1cabc8076bba91b049c2a53ec8b8d17e3762d0 Mon Sep 17 00:00:00 2001 From: Juan Antonio Date: Fri, 22 Dec 2023 21:06:57 +0100 Subject: [PATCH] Simplify gSchedulePowerSave logic There was quite convoluted logic there, and what I believe, was a bug. Rationale: Both, - gBatterySaveCountdown_10ms = battery_save_count_10ms;, and - gSchedulePowerSave = false are always executed inside FUNCTION_Select(). So the code is equivalent to: if (any of those OR'd) { gBatterySaveCountdown_10ms = battery_save_count_10ms; gSchedulePowerSave = false; (but only if we have NOAA disabled) } else { [other stuff from FUNCTION_Select()] gBatterySaveCountdown_10ms = battery_save_count_10ms; gSchedulePowerSave = false; (regarless of having NOAA or not) } So: - OR is true, have NOAA-> don't clear gSchedulePowerSave -> implies we will enter here, again, until the OR is false, but only if we have NOAA. - OR is False -> clear gSchedulePowerSave. Moreover, checking with DualTachyon code at https://github.com/DualTachyon/uv-k5-firmware/blob/6f8afac8864e0349ecf8b10f91ce8f69273013db/app/app.c#L747 gSchedulePowerSave is always set to false if it was true. --- app/app.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/app/app.c b/app/app.c index f1dcb8f4b..325425e75 100644 --- a/app/app.c +++ b/app/app.c @@ -926,46 +926,35 @@ void APP_Update(void) #endif if (gSchedulePowerSave) { - if (gPttIsPressed || - gKeyBeingHeld || - gEeprom.BATTERY_SAVE == 0 || - gScanStateDir != SCAN_OFF || - gCssBackgroundScan || - gScreenToDisplay != DISPLAY_MAIN + if (gPttIsPressed + || gKeyBeingHeld + || gEeprom.BATTERY_SAVE == 0 + || gScanStateDir != SCAN_OFF + || gCssBackgroundScan + || gScreenToDisplay != DISPLAY_MAIN #ifdef ENABLE_FMRADIO || gFmRadioMode #endif #ifdef ENABLE_DTMF_CALLING || gDTMF_CallState != DTMF_CALL_STATE_NONE #endif - ){ - gBatterySaveCountdown_10ms = battery_save_count_10ms; - } - else #ifdef ENABLE_NOAA - if ((!IS_NOAA_CHANNEL(gEeprom.ScreenChannel[0]) && !IS_NOAA_CHANNEL(gEeprom.ScreenChannel[1])) || !gIsNoaaMode) + || (gIsNoaaMode && (IS_NOAA_CHANNEL(gEeprom.ScreenChannel[0]) || IS_NOAA_CHANNEL(gEeprom.ScreenChannel[1]))) #endif - { - //if (gCurrentFunction != FUNCTION_POWER_SAVE) - FUNCTION_Select(FUNCTION_POWER_SAVE); - } -#ifdef ENABLE_NOAA - else - { + ) { gBatterySaveCountdown_10ms = battery_save_count_10ms; + } else { + FUNCTION_Select(FUNCTION_POWER_SAVE); } -#else + gSchedulePowerSave = false; -#endif } - if (gPowerSaveCountdownExpired && gCurrentFunction == FUNCTION_POWER_SAVE #ifdef ENABLE_VOICE && gVoiceWriteIndex == 0 #endif - ) - { + ) { static bool goToSleep; // wake up, enable RX then go back to sleep if (gRxIdleMode)