diff --git a/app/app.c b/app/app.c index 604d73f..f1dcb8f 100644 --- a/app/app.c +++ b/app/app.c @@ -731,14 +731,14 @@ static void CheckRadioInterrupts(void) } void APP_EndTransmission(void) -{ // back to RX mode +{ + // back to RX mode RADIO_SendEndOfTransmission(); - // send the CTCSS/DCS tail tone - allows the receivers to mute the usual FM squelch tail/crash - RADIO_EnableCxCSS(); - RADIO_SetupRegisters(false); - if (gMonitor) - gFlagReconfigureVfos = true; //turn the monitor back on + if (gMonitor) { + //turn the monitor back on + gFlagReconfigureVfos = true; + } } #ifdef ENABLE_VOX @@ -884,37 +884,32 @@ void APP_Update(void) #endif // toggle between the VFO's if dual watch is enabled - if (!SCANNER_IsScanning() && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF) - { + if (!SCANNER_IsScanning() + && gEeprom.DUAL_WATCH != DUAL_WATCH_OFF + && gScheduleDualWatch + && gScanStateDir == SCAN_OFF + && !gPttIsPressed + && gCurrentFunction != FUNCTION_POWER_SAVE #ifdef ENABLE_VOICE - if (gScheduleDualWatch && gVoiceWriteIndex == 0) -#else - if (gScheduleDualWatch) + && gVoiceWriteIndex == 0 #endif - { - if (gScanStateDir == SCAN_OFF) - { - if (!gPttIsPressed && #ifdef ENABLE_FMRADIO - !gFmRadioMode && + && !gFmRadioMode #endif #ifdef ENABLE_DTMF_CALLING - gDTMF_CallState == DTMF_CALL_STATE_NONE && + && gDTMF_CallState == DTMF_CALL_STATE_NONE #endif - gCurrentFunction != FUNCTION_POWER_SAVE) - { - DualwatchAlternate(); // toggle between the two VFO's + ) { + DualwatchAlternate(); // toggle between the two VFO's - if (gRxVfoIsActive && gScreenToDisplay == DISPLAY_MAIN) - GUI_SelectNextDisplay(DISPLAY_MAIN); - - gRxVfoIsActive = false; - gScanPauseMode = false; - gRxReceptionMode = RX_MODE_NONE; - gScheduleDualWatch = false; - } - } + if (gRxVfoIsActive && gScreenToDisplay == DISPLAY_MAIN) { + GUI_SelectNextDisplay(DISPLAY_MAIN); } + + gRxVfoIsActive = false; + gScanPauseMode = false; + gRxReceptionMode = RX_MODE_NONE; + gScheduleDualWatch = false; } #ifdef ENABLE_FMRADIO @@ -1024,17 +1019,17 @@ void APP_Update(void) // called every 10ms static void CheckKeys(void) { - - if (0 #ifdef ENABLE_DTMF_CALLING - || gSetting_KILLED -#endif -#ifdef ENABLE_AIRCOPY - || (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState != AIRCOPY_READY) -#endif - ) + if(gSetting_KILLED){ return; + } +#endif +#ifdef ENABLE_AIRCOPY + if (gScreenToDisplay == DISPLAY_AIRCOPY && gAircopyState != AIRCOPY_READY){ + return; + } +#endif // -------------------- PTT ------------------------ if (gPttIsPressed) @@ -1577,7 +1572,6 @@ static void ALARM_Off(void) if (gAlarmState == ALARM_STATE_TXALARM) { RADIO_SendEndOfTransmission(); - RADIO_EnableCxCSS(); } gAlarmState = ALARM_STATE_OFF; diff --git a/app/dtmf.c b/app/dtmf.c index ea9e30f..3bf5163 100644 --- a/app/dtmf.c +++ b/app/dtmf.c @@ -78,6 +78,41 @@ void DTMF_clear_RX(void) } #endif +void DTMF_SendEndOfTransmission(void) +{ + if (gCurrentVfo->DTMF_PTT_ID_TX_MODE == PTT_ID_APOLLO) { + BK4819_PlaySingleTone(2475, 250, 28, gEeprom.DTMF_SIDE_TONE); + } + + if ((gCurrentVfo->DTMF_PTT_ID_TX_MODE == PTT_ID_TX_DOWN || gCurrentVfo->DTMF_PTT_ID_TX_MODE == PTT_ID_BOTH) +#ifdef ENABLE_DTMF_CALLING + && gDTMF_CallState == DTMF_CALL_STATE_NONE +#endif + ) { // end-of-tx + if (gEeprom.DTMF_SIDE_TONE) + { + AUDIO_AudioPathOn(); + gEnableSpeaker = true; + SYSTEM_DelayMs(60); + } + + BK4819_EnterDTMF_TX(gEeprom.DTMF_SIDE_TONE); + + BK4819_PlayDTMFString( + gEeprom.DTMF_DOWN_CODE, + 0, + gEeprom.DTMF_FIRST_CODE_PERSIST_TIME, + gEeprom.DTMF_HASH_CODE_PERSIST_TIME, + gEeprom.DTMF_CODE_PERSIST_TIME, + gEeprom.DTMF_CODE_INTERVAL_TIME); + + AUDIO_AudioPathOff(); + gEnableSpeaker = false; + } + + BK4819_ExitDTMF_TX(true); +} + bool DTMF_ValidateCodes(char *pCode, const unsigned int size) { unsigned int i; @@ -410,7 +445,7 @@ void DTMF_Reply(void) sprintf(String, "%s%c%s", gDTMF_String, gEeprom.DTMF_SEPARATE_CODE, gEeprom.ANI_DTMF_ID); pString = String; } - else + else #endif { pString = gDTMF_String; diff --git a/app/dtmf.h b/app/dtmf.h index 1534e99..2b23de4 100644 --- a/app/dtmf.h +++ b/app/dtmf.h @@ -114,4 +114,6 @@ bool DTMF_FindContact(const char *pContact, char *pResult); void DTMF_HandleRequest(void); #endif +void DTMF_SendEndOfTransmission(void); + #endif diff --git a/driver/bk4819.c b/driver/bk4819.c index 094a769..860911d 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -1688,7 +1688,7 @@ void BK4819_PrepareFSKReceive(void) BK4819_WriteRegister(BK4819_REG_59, 0x3068); } -void BK4819_PlayRogerNormal(void) +static void BK4819_PlayRogerNormal(void) { #if 0 const uint32_t tone1_Hz = 500; @@ -1699,6 +1699,7 @@ void BK4819_PlayRogerNormal(void) const uint32_t tone2_Hz = 1310; #endif + BK4819_EnterTxMute(); BK4819_SetAF(BK4819_AF_MUTE); @@ -1723,6 +1724,7 @@ void BK4819_PlayRogerNormal(void) BK4819_WriteRegister(BK4819_REG_30, 0xC1FE); // 1 1 0000 0 1 1111 1 1 1 0 } + void BK4819_PlayRogerMDC(void) { struct reg_value { @@ -1771,6 +1773,15 @@ void BK4819_PlayRogerMDC(void) BK4819_WriteRegister(BK4819_REG_58, 0x0000); } +void BK4819_PlayRoger(void) +{ + if (gEeprom.ROGER == ROGER_MODE_ROGER) { + BK4819_PlayRogerNormal(); + } else if (gEeprom.ROGER == ROGER_MODE_MDC) { + BK4819_PlayRogerMDC(); + } +} + void BK4819_Enable_AfDac_DiscMode_TxDsp(void) { BK4819_WriteRegister(BK4819_REG_30, 0x0000); diff --git a/driver/bk4819.h b/driver/bk4819.h index 5f37981..c5d3a47 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -38,7 +38,7 @@ enum BK4819_AF_Type_t BK4819_AF_UNKNOWN5 = 11u, // distorted BK4819_AF_UNKNOWN6 = 12u, // distorted BK4819_AF_UNKNOWN7 = 13u, // interesting - BK4819_AF_UNKNOWN8 = 14u, // interesting + BK4819_AF_UNKNOWN8 = 14u, // interesting BK4819_AF_UNKNOWN9 = 15u // not a lot }; @@ -161,15 +161,13 @@ uint8_t BK4819_GetCTCType(void); void BK4819_SendFSKData(uint16_t *pData); void BK4819_PrepareFSKReceive(void); - + void BK4819_PlayRoger(void); -void BK4819_PlayRogerMDC(void); - + void BK4819_Enable_AfDac_DiscMode_TxDsp(void); - + void BK4819_GetVoxAmp(uint16_t *pResult); void BK4819_SetScrambleFrequencyControlWord(uint32_t Frequency); void BK4819_PlayDTMFEx(bool bLocalLoopback, char Code); #endif - diff --git a/radio.c b/radio.c index f325ec1..4b7b1d9 100644 --- a/radio.c +++ b/radio.c @@ -14,6 +14,7 @@ * limitations under the License. */ +#include "driver/bk4819-regs.h" #include #include "am_fix.h" @@ -1085,6 +1086,16 @@ void RADIO_EnableCxCSS(void) SYSTEM_DelayMs(200); } +void RADIO_SendEndOfTransmission(void) +{ + BK4819_PlayRoger(); + DTMF_SendEndOfTransmission(); + + // send the CTCSS/DCS tail tone - allows the receivers to mute the usual FM squelch tail/crash + RADIO_EnableCxCSS(); + RADIO_SetupRegisters(false); +} + void RADIO_PrepareCssTX(void) { RADIO_PrepareTX(); @@ -1094,42 +1105,3 @@ void RADIO_PrepareCssTX(void) RADIO_EnableCxCSS(); RADIO_SetupRegisters(true); } - -void RADIO_SendEndOfTransmission(void) -{ - if (gEeprom.ROGER == ROGER_MODE_ROGER) - BK4819_PlayRoger(); - else if (gEeprom.ROGER == ROGER_MODE_MDC) - BK4819_PlayRogerMDC(); - - if (gCurrentVfo->DTMF_PTT_ID_TX_MODE == PTT_ID_APOLLO) - BK4819_PlaySingleTone(2475, 250, 28, gEeprom.DTMF_SIDE_TONE); - - if ((gCurrentVfo->DTMF_PTT_ID_TX_MODE == PTT_ID_TX_DOWN || gCurrentVfo->DTMF_PTT_ID_TX_MODE == PTT_ID_BOTH) -#ifdef ENABLE_DTMF_CALLING - && gDTMF_CallState == DTMF_CALL_STATE_NONE -#endif - ) { // end-of-tx - if (gEeprom.DTMF_SIDE_TONE) - { - AUDIO_AudioPathOn(); - gEnableSpeaker = true; - SYSTEM_DelayMs(60); - } - - BK4819_EnterDTMF_TX(gEeprom.DTMF_SIDE_TONE); - - BK4819_PlayDTMFString( - gEeprom.DTMF_DOWN_CODE, - 0, - gEeprom.DTMF_FIRST_CODE_PERSIST_TIME, - gEeprom.DTMF_HASH_CODE_PERSIST_TIME, - gEeprom.DTMF_CODE_PERSIST_TIME, - gEeprom.DTMF_CODE_INTERVAL_TIME); - - AUDIO_AudioPathOff(); - gEnableSpeaker = false; - } - - BK4819_ExitDTMF_TX(true); -} \ No newline at end of file diff --git a/radio.h b/radio.h index 3c62c94..8c05b0e 100644 --- a/radio.h +++ b/radio.h @@ -168,5 +168,4 @@ void RADIO_EnableCxCSS(void); void RADIO_PrepareCssTX(void); void RADIO_SendEndOfTransmission(void); - #endif