diff --git a/App/driver/bk4819.c b/App/driver/bk4819.c index 9cf50f90..3483e1f9 100644 --- a/App/driver/bk4819.c +++ b/App/driver/bk4819.c @@ -1719,7 +1719,7 @@ void BK4819_PrepareFSKReceive(void) BK4819_WriteRegister(BK4819_REG_59, 0x3068); } -static void BK4819_PlayRogerNormal(void) +static void BK4819_PlayRogerNormal(BK4819_FilterBandwidth_t Bandwidth) { #if 0 const uint32_t tone1_Hz = 500; @@ -1734,12 +1734,19 @@ static void BK4819_PlayRogerNormal(void) BK4819_EnterTxMute(); BK4819_SetAF(BK4819_AF_MUTE); - BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | (66u << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); + const uint8_t rogerToneGain = (Bandwidth == BK4819_FILTER_BW_WIDE) ? 32u : 66u; + + if (Bandwidth == BK4819_FILTER_BW_WIDE) + BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROW, true); + + BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone1_Hz)); BK4819_EnableTXLink(); SYSTEM_DelayMs(50); - BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone1_Hz)); + BK4819_WriteRegister(BK4819_REG_70, + BK4819_REG_70_ENABLE_TONE1 | + (rogerToneGain << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); BK4819_ExitTxMute(); SYSTEM_DelayMs(80); @@ -1752,6 +1759,10 @@ static void BK4819_PlayRogerNormal(void) BK4819_EnterTxMute(); BK4819_WriteRegister(BK4819_REG_70, 0x0000); + + if (Bandwidth == BK4819_FILTER_BW_WIDE) + BK4819_SetFilterBandwidth(Bandwidth, true); + BK4819_WriteRegister(BK4819_REG_30, 0xC1FE); // 1 1 0000 0 1 1111 1 1 1 0 } @@ -1804,10 +1815,10 @@ void BK4819_PlayRogerMDC(void) BK4819_WriteRegister(BK4819_REG_58, 0x0000); } -void BK4819_PlayRoger(void) +void BK4819_PlayRoger(BK4819_FilterBandwidth_t Bandwidth) { if (gEeprom.ROGER == ROGER_MODE_ROGER) { - BK4819_PlayRogerNormal(); + BK4819_PlayRogerNormal(Bandwidth); } else if (gEeprom.ROGER == ROGER_MODE_MDC) { BK4819_PlayRogerMDC(); } diff --git a/App/driver/bk4819.h b/App/driver/bk4819.h index 0800f2c5..f98e2e91 100644 --- a/App/driver/bk4819.h +++ b/App/driver/bk4819.h @@ -169,7 +169,7 @@ uint8_t BK4819_GetCTCType(void); void BK4819_SendFSKData(uint16_t *pData); void BK4819_PrepareFSKReceive(void); -void BK4819_PlayRoger(void); +void BK4819_PlayRoger(BK4819_FilterBandwidth_t Bandwidth); void BK4819_Enable_AfDac_DiscMode_TxDsp(void); diff --git a/App/driver/bk4829.c b/App/driver/bk4829.c index d79d6576..d628ef22 100644 --- a/App/driver/bk4829.c +++ b/App/driver/bk4829.c @@ -1754,7 +1754,7 @@ void BK4819_PrepareFSKReceive(void) BK4819_WriteRegister(BK4819_REG_59, 0x3068); } -static void BK4819_PlayRogerNormal(void) +static void BK4819_PlayRogerNormal(BK4819_FilterBandwidth_t Bandwidth) { #if 0 const uint32_t tone1_Hz = 500; @@ -1769,17 +1769,31 @@ static void BK4819_PlayRogerNormal(void) BK4819_EnterTxMute(); BK4819_SetAF(BK4819_AF_MUTE); - BK4819_WriteRegister(BK4819_REG_70, // BK4819_REG_70_ENABLE_TONE1 | (66u << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); - 0xC300 - ); + const uint8_t rogerToneGain = (Bandwidth == BK4819_FILTER_BW_WIDE) ? 32u : 67u; + + if (Bandwidth == BK4819_FILTER_BW_WIDE) + BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROW, true); + + BK4819_WriteRegister(BK4819_REG_71, scale_freq(tone1_Hz)); BK4819_EnableTXLink(); SYSTEM_DelayMs(50); - BK4819_PlayToneRaw(tone1_Hz, 80); + BK4819_WriteRegister(BK4819_REG_70, + BK4819_REG_70_ENABLE_TONE1 | + (rogerToneGain << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); + + BK4819_ExitTxMute(); + SYSTEM_DelayMs(80); + BK4819_EnterTxMute(); + BK4819_PlayToneRaw(tone2_Hz, 80); BK4819_WriteRegister(BK4819_REG_70, 0x0000); + + if (Bandwidth == BK4819_FILTER_BW_WIDE) + BK4819_SetFilterBandwidth(Bandwidth, true); + BK4819_WriteRegister(BK4819_REG_30, 0xC1FE); // 1 1 0000 0 1 1111 1 1 1 0 } @@ -1832,10 +1846,10 @@ void BK4819_PlayRogerMDC(void) BK4819_WriteRegister(BK4819_REG_58, 0x0000); } -void BK4819_PlayRoger(void) +void BK4819_PlayRoger(BK4819_FilterBandwidth_t Bandwidth) { if (gEeprom.ROGER == ROGER_MODE_ROGER) { - BK4819_PlayRogerNormal(); + BK4819_PlayRogerNormal(Bandwidth); } else if (gEeprom.ROGER == ROGER_MODE_MDC) { BK4819_PlayRogerMDC(); } diff --git a/App/radio.c b/App/radio.c index 8d6c707e..ddec33a0 100644 --- a/App/radio.c +++ b/App/radio.c @@ -1328,7 +1328,16 @@ void RADIO_SendCssTail(void) void RADIO_SendEndOfTransmission(void) { - BK4819_PlayRoger(); + BK4819_FilterBandwidth_t Bandwidth = gCurrentVfo->CHANNEL_BANDWIDTH; + + #ifdef ENABLE_FEAT_F4HWN_NARROWER + if(Bandwidth == BK4819_FILTER_BW_NARROW && gSetting_set_nfm == 1) + { + Bandwidth = BK4819_FILTER_BW_NARROWER; + } + #endif + + BK4819_PlayRoger(Bandwidth); DTMF_SendEndOfTransmission(); // send the CTCSS/DCS tail tone - allows the receivers to mute the usual FM squelch tail/crash