From 5328838c7399c943d8ac4556c8071157c38d267c Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Tue, 21 Feb 2023 11:46:14 +0000 Subject: [PATCH] better control of rapid commands when mode changes --- wfmain.cpp | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/wfmain.cpp b/wfmain.cpp index 8ec53c6..21e07d9 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -4864,6 +4864,13 @@ void wfmain::initPeriodicCommands() rapidPollCmdQueueEnabled = false; rapidPollCmdQueue.clear(); rapidPollCmdQueueEnabled = true; + + if (rigCaps.hasSpectrum) { + insertPeriodicRapidCmdUnique(cmdGetTPBFInner); + insertPeriodicRapidCmdUnique(cmdGetTPBFOuter); + insertPeriodicRapidCmdUnique(cmdGetPassband); + } + } void wfmain::insertPeriodicRapidCmd(cmds cmd) @@ -5700,12 +5707,6 @@ void wfmain::receiveMode(unsigned char mode, unsigned char filter) { // Remove all "Slow" commands (they will be added later if needed) - removePeriodicRapidCmd(cmdGetCwPitch); - removePeriodicRapidCmd(cmdGetDashRatio); - removePeriodicRapidCmd(cmdGetKeySpeed); - removePeriodicRapidCmd(cmdGetPassband); - removePeriodicRapidCmd(cmdGetTPBFInner); - removePeriodicRapidCmd(cmdGetTPBFOuter); quint16 maxPassbandHz = 0; switch ((mode_kind)mode) { @@ -5718,12 +5719,15 @@ void wfmain::receiveMode(unsigned char mode, unsigned char filter) passbandWidth = 0.007; passbandCenterFrequency = 0.0; maxPassbandHz = 10E3; + removePeriodicRapidCmd(cmdGetPassband); + removePeriodicRapidCmd(cmdGetTPBFInner); + removePeriodicRapidCmd(cmdGetTPBFOuter); break; case modeCW: case modeCW_R: - insertPeriodicRapidCmd(cmdGetCwPitch); - insertPeriodicRapidCmd(cmdGetDashRatio); - insertPeriodicRapidCmd(cmdGetKeySpeed); + insertPeriodicRapidCmdUnique(cmdGetCwPitch); + insertPeriodicRapidCmdUnique(cmdGetDashRatio); + insertPeriodicRapidCmdUnique(cmdGetKeySpeed); maxPassbandHz = 3600; break; case modeAM: @@ -5741,6 +5745,23 @@ void wfmain::receiveMode(unsigned char mode, unsigned char filter) break; } + if ((mode_kind)mode != modeFM && currentModeInfo.mk == modeFM) + { + /* mode was FM but now isn't so insert commands */ + insertPeriodicRapidCmdUnique(cmdGetPassband); + insertPeriodicRapidCmdUnique(cmdGetTPBFInner); + insertPeriodicRapidCmdUnique(cmdGetTPBFOuter); + } + + + if (((mode_kind)mode != modeCW && (mode_kind)mode != modeCW_R) && (currentModeInfo.mk == modeCW || currentModeInfo.mk == modeCW_R)) + { + /* mode was CW/CWR but now isn't so remove CW commands */ + removePeriodicRapidCmd(cmdGetCwPitch); + removePeriodicRapidCmd(cmdGetDashRatio); + removePeriodicRapidCmd(cmdGetKeySpeed); + } + for (int i = 0; i < ui->modeSelectCombo->count(); i++) { if (ui->modeSelectCombo->itemData(i).toInt() == mode) @@ -5775,14 +5796,6 @@ void wfmain::receiveMode(unsigned char mode, unsigned char filter) { trxadj->setMaxPassband(maxPassbandHz); } - - if (currentModeInfo.mk != modeFM) - { - - insertPeriodicRapidCmd(cmdGetPassband); - insertPeriodicRapidCmd(cmdGetTPBFInner); - insertPeriodicRapidCmd(cmdGetTPBFOuter); - } // Note: we need to know if the DATA mode is active to reach mode-D // some kind of queued query: