From fb60d6f7fd6e5e7ec788cbc0f4df6a29bbb436a0 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Thu, 9 Apr 2026 02:44:20 +0200 Subject: [PATCH] Add WIDE/NARROW filter selection for AM RX --- App/app/action.c | 2 +- App/radio.c | 10 ++++++++-- App/radio.h | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/App/app/action.c b/App/app/action.c index b621cf6f..560f278f 100644 --- a/App/app/action.c +++ b/App/app/action.c @@ -597,7 +597,7 @@ void ACTION_Wn(void) if (pVfo->Modulation == MODULATION_AM) { - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_AM, true); + BK4819_SetFilterBandwidth(RADIO_GetAMFilterBandwidth(pVfo), true); return; } diff --git a/App/radio.c b/App/radio.c index 31556821..a1cc845e 100644 --- a/App/radio.c +++ b/App/radio.c @@ -771,6 +771,12 @@ void RADIO_SelectVfos(void) RADIO_SelectCurrentVfo(); } +BK4819_FilterBandwidth_t RADIO_GetAMFilterBandwidth(const VFO_Info_t *pVfo) +{ + // On BK4829, AM "wide" intentionally reuses the wider RF filter preset. + return (pVfo->CHANNEL_BANDWIDTH == BANDWIDTH_WIDE) ? BK4819_FILTER_BW_WIDE : BK4819_FILTER_BW_AM; +} + void RADIO_SetupRegisters(bool switchToForeground) { BK4819_FilterBandwidth_t Bandwidth = gRxVfo->CHANNEL_BANDWIDTH; @@ -789,7 +795,7 @@ void RADIO_SetupRegisters(bool switchToForeground) BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2_GREEN, false); if (gRxVfo->Modulation == MODULATION_AM) - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_AM, true); + BK4819_SetFilterBandwidth(RADIO_GetAMFilterBandwidth(gRxVfo), true); else { switch (Bandwidth) @@ -1153,7 +1159,7 @@ void RADIO_SetModulation(ModulationMode_t modulation) BK4819_WriteRegister(0x55, 0x31a9); #endif - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_AM, true); + BK4819_SetFilterBandwidth(RADIO_GetAMFilterBandwidth(gCurrentVfo), true); break; } diff --git a/App/radio.h b/App/radio.h index ee2c0efd..8fa28fa3 100644 --- a/App/radio.h +++ b/App/radio.h @@ -21,6 +21,7 @@ #include #include "dcs.h" +#include "driver/bk4819.h" #include "frequencies.h" enum { @@ -161,6 +162,7 @@ void RADIO_SetupRegisters(bool switchToForeground); #ifdef ENABLE_NOAA void RADIO_ConfigureNOAA(void); #endif +BK4819_FilterBandwidth_t RADIO_GetAMFilterBandwidth(const VFO_Info_t *pVfo); void RADIO_SetTxParameters(void); void RADIO_SetupAGC(bool listeningAM, bool disable); void RADIO_SetModulation(ModulationMode_t modulation);