diff --git a/openrtx/src/state.c b/openrtx/src/state.c index c323bad7..fcd54b55 100644 --- a/openrtx/src/state.c +++ b/openrtx/src/state.c @@ -21,6 +21,7 @@ #include #include #include +#include #include state_t state; @@ -52,7 +53,11 @@ void state_init() state.channel.fm.txTone = 2; // 71.9Hz state.rtxStatus = RTX_OFF; +#ifdef HAS_ABSOLUTE_KNOB // If the radio has an absolute position knob + state.sqlLevel = platform_getChSelector() - 1; +#else state.sqlLevel = 3; +#endif state.voxLevel = 0; state.emergency = false; diff --git a/openrtx/src/threads.c b/openrtx/src/threads.c index 91f16e0d..61c292b8 100644 --- a/openrtx/src/threads.c +++ b/openrtx/src/threads.c @@ -118,7 +118,7 @@ static void ui_task(void *arg) rtx_cfg.rxFrequency = state.channel.rx_frequency; rtx_cfg.txFrequency = state.channel.tx_frequency; rtx_cfg.txPower = state.channel.power; - rtx_cfg.sqlLevel = state.channel.squelch; + rtx_cfg.sqlLevel = state.sqlLevel; rtx_cfg.rxToneEn = state.channel.fm.rxToneEn; rtx_cfg.rxTone = ctcss_tone[state.channel.fm.rxTone]; rtx_cfg.txToneEn = state.channel.fm.txToneEn; diff --git a/openrtx/src/ui/ui.c b/openrtx/src/ui/ui.c index d202a640..c8f4fa14 100644 --- a/openrtx/src/ui/ui.c +++ b/openrtx/src/ui/ui.c @@ -537,16 +537,18 @@ void _ui_fsm_menuMacro(kbd_msg_t msg, bool *sync_rtx) { } #ifdef HAS_ABSOLUTE_KNOB // If the radio has an absolute position knob - state.sqlLevel = platform_getChSelector(); - printf("New squelch value: %d\n\r", state.sqlLevel); -#else // Use left and right buttons or relative position knob - if(msg.keys && KEY_LEFT) { - state.sqlLevel++; - state.sqlLevel = (state.sqlLevel > 15) 15 : state.sqlLevel; + if(msg.keys & KEY_LEFT || msg.keys & KEY_RIGHT) { + state.sqlLevel = platform_getChSelector() - 1; + *sync_rtx = true; } - else if(msg.keys && KEY_RIGHT) { - state.sqlLevel--; - state.sqlLevel = (state.sqlLevel < 0) 0 : state.sqlLevel; +#else // Use left and right buttons or relative position knob + if(msg.keys & KEY_LEFT) { + state.sqlLevel = (state.sqlLevel == 15) 15 : state.sqlLevel++; + *sync_rtx = true; + } + else if(msg.keys & KEY_RIGHT) { + state.sqlLevel = (state.sqlLevel == 0) 0 : state.sqlLevel--; + *sync_rtx = true; } #endif } diff --git a/platform/drivers/baseband/rtx_MD3x0.c b/platform/drivers/baseband/rtx_MD3x0.c index 78c999e3..43c3f177 100644 --- a/platform/drivers/baseband/rtx_MD3x0.c +++ b/platform/drivers/baseband/rtx_MD3x0.c @@ -410,17 +410,18 @@ void rtx_taskFunc() if(rtxStatus.opStatus == RX) { - /* Convert back voltage to ADC counts */ - float sqlValue = (adc1_getMeasurement(1) * 4096.0f)/3300.0f; - uint16_t sqlLevel = ((uint16_t) sqlValue) >> 6; + // Unmute speaker if rssi is greater than squelch value + float rssi = rtx_getRssi(); + // sqlValue represents 15 steps from -140dBm to -70dBm + float rssi_squelch = -140.0f + rtxStatus.sqlLevel * 70.0f / 15.0f; - if((gpio_readPin(SPK_MUTE) == 1) && (sqlLevel > sqlOpenTsh)) + if((gpio_readPin(SPK_MUTE) == 1) && (rssi > rssi_squelch)) { gpio_clearPin(SPK_MUTE); platform_ledOn(GREEN); } - if((gpio_readPin(SPK_MUTE) == 0) && (sqlLevel < sqlCloseTsh)) + if((gpio_readPin(SPK_MUTE) == 0) && (rssi < rssi_squelch)) { gpio_setPin(SPK_MUTE); platform_ledOff(GREEN);