From 5c210f0699baf6c861dc87491747089b9f69f69f Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Fri, 13 Jan 2023 12:26:11 +0000 Subject: [PATCH] Fix invalid filter width being sent to rig by rigctld. --- rigcommander.cpp | 4 +-- rigctld.cpp | 66 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 56 insertions(+), 14 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index 9fbb26b..d6c4d59 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -897,8 +897,6 @@ void rigCommander::setPassband(quint16 pass) calc = quint16((pass / 50) - 1); } - qDebug() << "Setting rig passband" << pass << "Sending" << calc; - char tens = (calc / 10); char units = (calc - (10 * tens)); @@ -4695,7 +4693,7 @@ void rigCommander::stateUpdated() if (i.value()._valid) { setDataMode(state.getBool(DATAMODE), state.getChar(FILTER)); } - getDuplexMode(); + getDataMode(); break; case ANTENNA: case RXANTENNA: diff --git a/rigctld.cpp b/rigctld.cpp index 1cb02f3..3bd445c 100644 --- a/rigctld.cpp +++ b/rigctld.cpp @@ -663,20 +663,64 @@ void rigCtlClient::socketReadyRead() if (passband > 0) { - if (passband > 1800 && passband < 2700) { - width = 1; - } - else if (passband <= 1800) - { - width = 2; - } - else if (passband >= 2700) - { - width = 0; + switch ((mode_kind)getMode(mode)) { + + case modeAM: + if (passband > 6000) { + width = 1; + } + else if (passband > 3000 && passband <= 6000) { + width = 2; + } + else if (passband <= 3000) { + width = 3; + } + break; + + case modeFM: + if (passband > 10000) { + width = 1; + } + else if (passband > 7000 && passband <= 10000) { + width = 2; + } + else if (passband <= 7000) { + width = 3; + } + break; + + case modeCW: + case modeRTTY: + case modeCW_R: + case modeRTTY_R: + case modePSK: + if (passband > 500) { + width = 1; + } + else if (passband > 250 && passband <= 500) { + width = 2; + } + else if (passband <= 250) { + width = 3; + } + break; + + default: + if (passband > 2400) { + width = 1; + } + else if (passband > 1800 && passband <= 2400) { + width = 2; + } + else if (passband <= 1800) { + width = 3; + } + break; + } rigState->set(FILTER, width, true); rigState->set(PASSBAND, passband, true); - } + } } else if (command[0] == "j" || command[0] == "get_rit") {