From 4249d917f8d57fe47d81840f7c19f0bfe1d268d1 Mon Sep 17 00:00:00 2001 From: Juan Antonio Date: Thu, 7 Dec 2023 12:13:35 +0100 Subject: [PATCH] Refactor of app/action.c * Extracted funcionts * Simplified logic of some functions * Moved things arround a bit. Conditional code moved to the end --- app/action.c | 484 ++++++++++++++++++++++++++------------------------- 1 file changed, 248 insertions(+), 236 deletions(-) diff --git a/app/action.c b/app/action.c index 5da5b8a..b0e18fe 100644 --- a/app/action.c +++ b/app/action.c @@ -42,6 +42,16 @@ #include "ui/inputbox.h" #include "ui/ui.h" + +#if defined(ENABLE_FMRADIO) +static void ACTION_Scan_FM(bool bRestart); +#endif + +#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) +static void ACTION_AlarmOr1750(bool b1750); +#endif + + void ACTION_Power(void) { if (++gTxVfo->OUTPUT_POWER > OUTPUT_POWER_HIGH) @@ -49,11 +59,12 @@ void ACTION_Power(void) gRequestSaveChannel = 1; + gRequestDisplayScreen = gScreenToDisplay; + #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_POWER; #endif - gRequestDisplayScreen = gScreenToDisplay; } void ACTION_Monitor(void) @@ -70,7 +81,7 @@ void ACTION_Monitor(void) } gMonitor = false; - + if (gScanStateDir != SCAN_OFF) { gScanPauseDelayIn_10ms = scan_pause_delay_in_1_10ms; gScheduleScanListen = false; @@ -99,190 +110,76 @@ void ACTION_Monitor(void) void ACTION_Scan(bool bRestart) { (void)bRestart; + #ifdef ENABLE_FMRADIO - if (gFmRadioMode) - { - if (FUNCTION_IsRx()) - { - GUI_SelectNextDisplay(DISPLAY_FM); - - gMonitor = false; - - if (gFM_ScanState != FM_SCAN_OFF) - { - FM_PlayAndUpdate(); - -#ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_STOP; -#endif - } - else - { - uint16_t Frequency; - - if (bRestart) - { - gFM_AutoScan = true; - gFM_ChannelPosition = 0; - FM_EraseChannels(); - Frequency = gEeprom.FM_LowerLimit; - } - else - { - gFM_AutoScan = false; - gFM_ChannelPosition = 0; - Frequency = gEeprom.FM_FrequencyPlaying; - } - - BK1080_GetFrequencyDeviation(Frequency); - FM_Tune(Frequency, 1, bRestart); -#ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_BEGIN; -#endif - } - } + if (gFmRadioMode) { + ACTION_Scan_FM(bRestart); return; } #endif - if (!SCANNER_IsScanning()) - { // not scanning + if (SCANNER_IsScanning()) { + return; + } - gMonitor = false; + // not scanning + gMonitor = false; #ifdef ENABLE_DTMF_CALLING - DTMF_clear_RX(); + DTMF_clear_RX(); #endif - gDTMF_RX_live_timeout = 0; - memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); - RADIO_SelectVfos(); + gDTMF_RX_live_timeout = 0; + memset(gDTMF_RX_live, 0, sizeof(gDTMF_RX_live)); + + RADIO_SelectVfos(); #ifdef ENABLE_NOAA - if (!IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) -#endif - { - GUI_SelectNextDisplay(DISPLAY_MAIN); - - if (gScanStateDir != SCAN_OFF) - { // already scanning - - if (IS_MR_CHANNEL(gNextMrChannel)) - { // channel mode - - // keep scanning but toggle between scan lists - gEeprom.SCAN_LIST_DEFAULT = (gEeprom.SCAN_LIST_DEFAULT + 1) % 3; - - // jump to the next channel - CHFRSCANNER_Start(false, gScanStateDir); - gScanPauseDelayIn_10ms = 1; - gScheduleScanListen = false; - - gUpdateStatus = true; - } - else - { // stop scanning - - CHFRSCANNER_Stop(); - - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_STOP; - #endif - } - } - else - { // start scanning - - CHFRSCANNER_Start(true, SCAN_FWD); - - #ifdef ENABLE_VOICE - AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); - AUDIO_PlaySingleVoice(true); - #endif - - // clear the other vfo's rssi level (to hide the antenna symbol) - gVFO_RSSI_bar_level[(gEeprom.RX_VFO + 1) & 1u] = 0; - - // let the user see DW is not active - gDualWatchActive = false; - gUpdateStatus = true; - } - } + if (IS_NOAA_CHANNEL(gRxVfo->CHANNEL_SAVE)) { + return; } +#endif + + GUI_SelectNextDisplay(DISPLAY_MAIN); + + if (gScanStateDir != SCAN_OFF) { + // already scanning + + if (!IS_MR_CHANNEL(gNextMrChannel)) { + CHFRSCANNER_Stop(); +#ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_STOP; +#endif + return; + } + + // channel mode. Keep scanning but toggle between scan lists + gEeprom.SCAN_LIST_DEFAULT = (gEeprom.SCAN_LIST_DEFAULT + 1) % 3; + + // jump to the next channel + CHFRSCANNER_Start(false, gScanStateDir); + gScanPauseDelayIn_10ms = 1; + gScheduleScanListen = false; + + } else { + // start scanning + CHFRSCANNER_Start(true, SCAN_FWD); + +#ifdef ENABLE_VOICE + AUDIO_SetVoiceID(0, VOICE_ID_SCANNING_BEGIN); + AUDIO_PlaySingleVoice(true); +#endif + + // clear the other vfo's rssi level (to hide the antenna symbol) + gVFO_RSSI_bar_level[(gEeprom.RX_VFO + 1) & 1U] = 0; + + // let the user see DW is not active + gDualWatchActive = false; + } + + gUpdateStatus = true; } -#ifdef ENABLE_VOX - void ACTION_Vox(void) - { - gEeprom.VOX_SWITCH = !gEeprom.VOX_SWITCH; - gRequestSaveSettings = true; - gFlagReconfigureVfos = true; - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_VOX; - #endif - gUpdateStatus = true; - } -#endif - -#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) -static void ACTION_AlarmOr1750(const bool b1750) -{ - - #if defined(ENABLE_ALARM) - const AlarmState_t alarm_mode = (gEeprom.ALARM_MODE == ALARM_MODE_TONE) ? ALARM_STATE_TXALARM : ALARM_STATE_SITE_ALARM; - gAlarmRunningCounter = 0; - #endif - - #if defined(ENABLE_ALARM) && defined(ENABLE_TX1750) - gAlarmState = b1750 ? ALARM_STATE_TX1750 : alarm_mode; - #elif defined(ENABLE_ALARM) - gAlarmState = alarm_mode; - #else - gAlarmState = ALARM_STATE_TX1750; - #endif - - (void)b1750; - gInputBoxIndex = 0; - - gFlagPrepareTX = gAlarmState != ALARM_STATE_OFF; - - if (gScreenToDisplay != DISPLAY_MENU) // 1of11 .. don't close the menu - gRequestDisplayScreen = DISPLAY_MAIN; -} -#endif - -#ifdef ENABLE_FMRADIO - void ACTION_FM(void) - { - if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR) - { - if (gFmRadioMode) - { - FM_TurnOff(); - - gInputBoxIndex = 0; - #ifdef ENABLE_VOX - gVoxResumeCountdown = 80; - #endif - gFlagReconfigureVfos = true; - - gRequestDisplayScreen = DISPLAY_MAIN; - return; - } - - gMonitor = false; - - RADIO_SelectVfos(); - RADIO_SetupRegisters(true); - - FM_Start(); - - gInputBoxIndex = 0; - - gRequestDisplayScreen = DISPLAY_FM; - } - } -#endif void ACTION_SwitchDemodul(void) { @@ -292,48 +189,35 @@ void ACTION_SwitchDemodul(void) gRequestSaveChannel = 1; } -#ifdef ENABLE_BLMIN_TMP_OFF -void ACTION_BlminTmpOff(void) -{ - if(++gEeprom.BACKLIGHT_MIN_STAT == BLMIN_STAT_UNKNOWN) - { - gEeprom.BACKLIGHT_MIN_STAT = BLMIN_STAT_ON; - BACKLIGHT_SetBrightness(gEeprom.BACKLIGHT_MIN); - } else - { - BACKLIGHT_SetBrightness(0); - } -} -#endif void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { - if (gScreenToDisplay == DISPLAY_MAIN && gDTMF_InputMode) // entering DTMF code - { - if (Key == KEY_SIDE1 && !bKeyHeld && bKeyPressed) // side1 btn pressed - { - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - - if (gDTMF_InputBox_Index > 0) // DTMF codes are in the input box - { - gDTMF_InputBox[--gDTMF_InputBox_Index] = '-'; // delete one code - if (gDTMF_InputBox_Index > 0) - { - gPttWasReleased = true; - gRequestDisplayScreen = DISPLAY_MAIN; - return; - } - } - - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_CANCEL; - #endif - - gRequestDisplayScreen = DISPLAY_MAIN; - gDTMF_InputMode = false; // turn off DTMF input box if no codes left - } + if (gScreenToDisplay == DISPLAY_MAIN && gDTMF_InputMode){ + // entering DTMF code gPttWasReleased = true; + + if (Key != KEY_SIDE1 || bKeyHeld || !bKeyPressed){ + return; + } + + // side1 btn pressed + + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gRequestDisplayScreen = DISPLAY_MAIN; + + if (gDTMF_InputBox_Index <= 0) { + // turn off DTMF input box if no codes left + gDTMF_InputMode = false; + return; + } + + // DTMF codes are in the input box + gDTMF_InputBox[--gDTMF_InputBox_Index] = '-'; // delete one code + +#ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_CANCEL; +#endif return; } @@ -375,16 +259,10 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) // held or released after short press beyond this point - switch (funcShort) - { + switch (funcShort) { default: case ACTION_OPT_NONE: break; - case ACTION_OPT_FLASHLIGHT: -#ifdef ENABLE_FLASHLIGHT - ACTION_FlashLight(); -#endif - break; case ACTION_OPT_POWER: ACTION_Power(); break; @@ -394,26 +272,6 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) case ACTION_OPT_SCAN: ACTION_Scan(true); break; - case ACTION_OPT_VOX: -#ifdef ENABLE_VOX - ACTION_Vox(); -#endif - break; - case ACTION_OPT_ALARM: -#ifdef ENABLE_ALARM - ACTION_AlarmOr1750(false); -#endif - break; -#ifdef ENABLE_FMRADIO - case ACTION_OPT_FM: - ACTION_FM(); - break; -#endif - case ACTION_OPT_1750: - #ifdef ENABLE_TX1750 - ACTION_AlarmOr1750(true); - #endif - break; case ACTION_OPT_KEYLOCK: COMMON_KeypadLockToggle(); break; @@ -426,10 +284,164 @@ void ACTION_Handle(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) case ACTION_OPT_SWITCH_DEMODUL: ACTION_SwitchDemodul(); break; +#ifdef ENABLE_FLASHLIGHT + case ACTION_OPT_FLASHLIGHT: + ACTION_FlashLight(); +#endif + break; +#ifdef ENABLE_VOX + case ACTION_OPT_VOX: + ACTION_Vox(); +#endif + break; +#ifdef ENABLE_FMRADIO + case ACTION_OPT_FM: + ACTION_FM(); +#endif + break; +#ifdef ENABLE_ALARM + case ACTION_OPT_ALARM: + ACTION_AlarmOr1750(false); + break; +#endif + case ACTION_OPT_1750: +#if defined(ENABLE_TX1750) + ACTION_AlarmOr1750(true); + break; +#endif #ifdef ENABLE_BLMIN_TMP_OFF - case ACTION_OPT_BLMIN_TMP_OFF: + case ACTION_OPT_BLMIN_TMP_OFF: ACTION_BlminTmpOff(); break; #endif } } + + +#ifdef ENABLE_FMRADIO +void ACTION_FM(void) +{ + if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_MONITOR) { + gInputBoxIndex = 0; + + if (gFmRadioMode) { + FM_TurnOff(); + gFlagReconfigureVfos = true; + gRequestDisplayScreen = DISPLAY_MAIN; + +#ifdef ENABLE_VOX + gVoxResumeCountdown = 80; +#endif + return; + } + + gMonitor = false; + + RADIO_SelectVfos(); + RADIO_SetupRegisters(true); + + FM_Start(); + + gRequestDisplayScreen = DISPLAY_FM; + } +} + + +static void ACTION_Scan_FM(bool bRestart) +{ + if (FUNCTION_IsRx()) { + return; + } + + GUI_SelectNextDisplay(DISPLAY_FM); + gMonitor = false; + + if (gFM_ScanState != FM_SCAN_OFF) { + FM_PlayAndUpdate(); +#ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_STOP; +#endif + return; + } + + uint16_t Frequency; + + if (bRestart) { + gFM_AutoScan = true; + gFM_ChannelPosition = 0; + FM_EraseChannels(); + Frequency = gEeprom.FM_LowerLimit; + } else { + gFM_AutoScan = false; + gFM_ChannelPosition = 0; + Frequency = gEeprom.FM_FrequencyPlaying; + } + + BK1080_GetFrequencyDeviation(Frequency); + FM_Tune(Frequency, 1, bRestart); + +#ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_BEGIN; +#endif + +} + +#endif + + +#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) +static void ACTION_AlarmOr1750(const bool b1750) +{ + + #if defined(ENABLE_ALARM) + const AlarmState_t alarm_mode = (gEeprom.ALARM_MODE == ALARM_MODE_TONE) ? ALARM_STATE_TXALARM : ALARM_STATE_SITE_ALARM; + gAlarmRunningCounter = 0; + #endif + + #if defined(ENABLE_ALARM) && defined(ENABLE_TX1750) + gAlarmState = b1750 ? ALARM_STATE_TX1750 : alarm_mode; + #elif defined(ENABLE_ALARM) + gAlarmState = alarm_mode; + #else + gAlarmState = ALARM_STATE_TX1750; + #endif + + (void)b1750; + gInputBoxIndex = 0; + + gFlagPrepareTX = gAlarmState != ALARM_STATE_OFF; + + if (gScreenToDisplay != DISPLAY_MENU) { // 1of11 .. don't close the menu + gRequestDisplayScreen = DISPLAY_MAIN; + } +} +#endif + + +#ifdef ENABLE_VOX +void ACTION_Vox(void) +{ + gEeprom.VOX_SWITCH = !gEeprom.VOX_SWITCH; + gRequestSaveSettings = true; + gFlagReconfigureVfos = true; + gUpdateStatus = true; + +#ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_VOX; +#endif + +} +#endif + + +#ifdef ENABLE_BLMIN_TMP_OFF +void ACTION_BlminTmpOff(void) +{ + if(++gEeprom.BACKLIGHT_MIN_STAT == BLMIN_STAT_UNKNOWN) { + gEeprom.BACKLIGHT_MIN_STAT = BLMIN_STAT_ON; + BACKLIGHT_SetBrightness(gEeprom.BACKLIGHT_MIN); + } else { + BACKLIGHT_SetBrightness(0); + } +} +#endif