kopia lustrzana https://github.com/OpenRTX/OpenRTX
Implement RSSI based squelch control
rodzic
0b98f50a12
commit
226d2ccaf7
|
@ -21,6 +21,7 @@
|
|||
#include <stdio.h>
|
||||
#include <state.h>
|
||||
#include <battery.h>
|
||||
#include <hwconfig.h>
|
||||
#include <interfaces/platform.h>
|
||||
|
||||
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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Ładowanie…
Reference in New Issue