From 47f1e802524da82ea35113d94f9e5e60bdcdc726 Mon Sep 17 00:00:00 2001 From: Krzysiek Egzmont Date: Tue, 10 Oct 2023 17:32:58 +0200 Subject: [PATCH] Fix #25: When you stop the scan with the PTT the Walkie stays in permanent TX --- app/app.c | 45 ++++++++++++++++++++++----------------------- app/generic.c | 50 ++++++++++++++++++++++++-------------------------- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/app/app.c b/app/app.c index 48d8777..f9a41d6 100644 --- a/app/app.c +++ b/app/app.c @@ -1290,14 +1290,15 @@ void APP_CheckKeys(void) { KEY_Code_t Key; - #ifdef ENABLE_AIRCOPY - if (gSetting_KILLED || (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState != AIRCOPY_READY)) - return; - #else - if (gSetting_KILLED) - return; - #endif +#ifdef ENABLE_AIRCOPY + if (gSetting_KILLED || (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState != AIRCOPY_READY)) + return; +#else + if (gSetting_KILLED) + return; +#endif +// -------------------- PTT ------------------------ if (gPttIsPressed) { if (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || gSerialConfigCountDown_500ms > 0) @@ -1313,8 +1314,7 @@ void APP_CheckKeys(void) else gPttDebounceCounter = 0; } - else - if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && gSerialConfigCountDown_500ms == 0) + else if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && gSerialConfigCountDown_500ms == 0) { // PTT pressed if (++gPttDebounceCounter >= 3) // 30ms { // start transmitting @@ -2226,8 +2226,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } } - else - if (gPttWasReleased) + else if (gPttWasReleased) { if (bKeyHeld) bFlag = true; @@ -2249,9 +2248,9 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (gCurrentFunction == FUNCTION_TRANSMIT) { // transmitting - #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) - if (gAlarmState == ALARM_STATE_OFF) - #endif +#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) + if (gAlarmState == ALARM_STATE_OFF) +#endif { char Code; @@ -2306,7 +2305,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) BK4819_PlayDTMFEx(gEeprom.DTMF_SIDE_TONE, Code); } } - #if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) +#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750) else if ((!bKeyHeld && bKeyPressed) || (gAlarmState == ALARM_STATE_TX1750 && bKeyHeld && !bKeyPressed)) { @@ -2323,7 +2322,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) if (!bKeyHeld) gPttWasReleased = true; } - #endif +#endif } else if (Key != KEY_SIDE1 && Key != KEY_SIDE2) @@ -2331,6 +2330,7 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) switch (gScreenToDisplay) { case DISPLAY_MAIN: + MAIN_ProcessKeys(Key, bKeyPressed, bKeyHeld); // bKeyHeld = false; // allow the channel setting to be saved break; @@ -2361,16 +2361,15 @@ static void APP_ProcessKey(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) } } else - #ifdef ENABLE_AIRCOPY - if (gScreenToDisplay != DISPLAY_SCANNER && gScreenToDisplay != DISPLAY_AIRCOPY) - #else - if (gScreenToDisplay != DISPLAY_SCANNER) - #endif +#ifdef ENABLE_AIRCOPY + if (gScreenToDisplay != DISPLAY_SCANNER && gScreenToDisplay != DISPLAY_AIRCOPY) +#else + if (gScreenToDisplay != DISPLAY_SCANNER) +#endif { ACTION_Handle(Key, bKeyPressed, bKeyHeld); } - else - if (!bKeyHeld && bKeyPressed) + else if (!bKeyHeld && bKeyPressed) gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; } diff --git a/app/generic.c b/app/generic.c index f6e3cb0..1e09dae 100644 --- a/app/generic.c +++ b/app/generic.c @@ -37,19 +37,19 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) { if (gInputBoxIndex > 0) { - if (!bKeyHeld && bKeyPressed) + if (!bKeyHeld && bKeyPressed) // short pressed gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; } - if (bKeyHeld || !bKeyPressed) + if (bKeyHeld || !bKeyPressed) // held or released { - if (bKeyHeld || bKeyPressed) + if (bKeyHeld || bKeyPressed) // held or pressed (cannot be held and not pressed I guess, so it checks only if HELD?) { - if (!bKeyHeld) + if (!bKeyHeld) // won't ever pass return; - if (!bKeyPressed) + if (!bKeyPressed) // won't ever pass return; if (gScreenToDisplay != DISPLAY_MENU && @@ -65,7 +65,7 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) gRequestSaveSettings = true; } } - else + else // released { #ifdef ENABLE_FMRADIO if ((gFmRadioMode || gScreenToDisplay != DISPLAY_MAIN) && gScreenToDisplay != DISPLAY_FM) @@ -75,7 +75,7 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) return; #endif - gWasFKeyPressed = !gWasFKeyPressed; + gWasFKeyPressed = !gWasFKeyPressed; // toggle F function if (gWasFKeyPressed) gKeyInputCountdown = key_input_timeout_500ms; @@ -88,7 +88,7 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) gUpdateStatus = true; } } - else + else // short pressed { if (gScreenToDisplay != DISPLAY_FM) { @@ -97,7 +97,7 @@ void GENERIC_Key_F(bool bKeyPressed, bool bKeyHeld) } #ifdef ENABLE_FMRADIO - if (gFM_ScanState == FM_SCAN_OFF) + if (gFM_ScanState == FM_SCAN_OFF) // not scanning { gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; return; @@ -116,7 +116,6 @@ void GENERIC_Key_PTT(bool bKeyPressed) if (!bKeyPressed || gSerialConfigCountDown_500ms > 0) { // PTT released - if (gCurrentFunction == FUNCTION_TRANSMIT) { // we are transmitting .. stop @@ -181,22 +180,22 @@ void GENERIC_Key_PTT(bool bKeyPressed) goto cancel_tx; } - #ifdef ENABLE_FMRADIO - if (gFM_ScanState != FM_SCAN_OFF) - { // FM radio is scanning .. stop - FM_PlayAndUpdate(); - #ifdef ENABLE_VOICE - gAnotherVoiceID = VOICE_ID_SCANNING_STOP; - #endif - gRequestDisplayScreen = DISPLAY_FM; - goto cancel_tx; - } - #endif +#ifdef ENABLE_FMRADIO + if (gFM_ScanState != FM_SCAN_OFF) + { // FM radio is scanning .. stop + FM_PlayAndUpdate(); + #ifdef ENABLE_VOICE + gAnotherVoiceID = VOICE_ID_SCANNING_STOP; + #endif + gRequestDisplayScreen = DISPLAY_FM; + goto cancel_tx; + } +#endif - #ifdef ENABLE_FMRADIO - if (gScreenToDisplay == DISPLAY_FM) - goto start_tx; // listening to the FM radio .. start TX'ing - #endif +#ifdef ENABLE_FMRADIO + if (gScreenToDisplay == DISPLAY_FM) + goto start_tx; // listening to the FM radio .. start TX'ing +#endif if (gCurrentFunction == FUNCTION_TRANSMIT && gRTTECountdown == 0) { // already transmitting @@ -255,7 +254,6 @@ start_tx: cancel_tx: if (gPttIsPressed) { - gPttIsPressed = false; gPttWasPressed = true; }