From d503df03bd675b8c2cc665a62dd548e3fecafc9d Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 18:00:12 -0800 Subject: [PATCH] Continued repeater status work... --- rigcommander.cpp | 19 ++++++++++++++----- rigcommander.h | 2 +- rigidentities.h | 2 ++ wfmain.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- wfmain.h | 2 ++ wfviewtypes.h | 2 +- 6 files changed, 59 insertions(+), 9 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index 18959c7..c0eb9ac 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -1207,8 +1207,9 @@ void rigCommander::setRptAccessMode(rptAccessTxRx ratr) void rigCommander::setRptAccessMode(rptrAccessData_t rd) { QByteArray payload; - if(rigCaps.model==model9700) + if(rigCaps.hasAdvancedRptrToneCmds) { + // IC-9700 basically payload.setRawData("\x16\x5D", 2); payload.append((unsigned char)rd.accessMode); } else { @@ -1224,8 +1225,15 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) { case ratrNN: // No tone at all - payload.append("\x16\x42\x00", 3); // TONE off - //payload.append("\x16\x43\x00", 3); // TSQL off + if(state.getBool(TONEFUNC)) + { + payload.append("\x16\x42\x00", 3); // TONE off + } else if (state.getBool(TSQLFUNC)) { + payload.append("\x16\x43\x00", 3); // TSQL off + } else { + // ?? turn off TSQL ?? + payload.append("\x16\x43\x00", 3); // TSQL off + } break; case ratrTN: // TONE on transmit only @@ -3567,6 +3575,7 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x27"); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = true; + rigCaps.hasAdvancedRptrToneCmds = true; break; case model910h: rigCaps.modelName = QString("IC-910H"); @@ -4821,7 +4830,7 @@ void rigCommander::setToneSql(bool enabled) prepDataAndSend(payload); } -void rigCommander::getToneSql() +void rigCommander::getToneSqlEnabled() { QByteArray payload; payload.setRawData("\x16\x43", 2); @@ -5199,7 +5208,7 @@ void rigCommander::stateUpdated() if (i.value()._valid) { setToneSql(state.getBool(TSQLFUNC)); } - getToneSql(); + getToneSqlEnabled(); break; case COMPFUNC: if (i.value()._valid) { diff --git a/rigcommander.h b/rigcommander.h index 9cec30e..b55c7ae 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -112,7 +112,7 @@ public slots: void setToneEnabled(bool enabled); void getToneEnabled(); void setToneSql(bool enabled); - void getToneSql(); + void getToneSqlEnabled(); void setCompressor(bool enabled); void getCompressor(); void setMonitor(bool enabled); diff --git a/rigidentities.h b/rigidentities.h index dbd6e3f..3a985fe 100644 --- a/rigidentities.h +++ b/rigidentities.h @@ -152,6 +152,8 @@ struct rigCapabilities { bool hasVFOMS = false; bool hasVFOAB = true; // 0x07 [00||01] + bool hasAdvancedRptrToneCmds = false; + std::vector attenuators; std::vector preamps; std::vector antennas; diff --git a/wfmain.cpp b/wfmain.cpp index b28faad..9eefd28 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -399,8 +399,30 @@ void wfmain::rigConnections() connect(this->rpt, &repeaterSetup::setTSQL, [=](const rptrTone_t &t) { issueCmd(cmdSetTSQL, t);}); + // TODO: struct with the DCS components and command queue entry connect(rpt, SIGNAL(setDTCS(quint16,bool,bool)), rig, SLOT(setDTCS(quint16,bool,bool))); - connect(rpt, SIGNAL(getRptAccessMode()), rig, SLOT(getRptAccessMode())); + + //connect(rpt, SIGNAL(getRptAccessMode()), rig, SLOT(getRptAccessMode())); + connect(this->rpt, &repeaterSetup::getRptAccessMode, + [=]() { + if(rigCaps.hasAdvancedRptrToneCmds) { + issueDelayedCommand(cmdGetRptAccessMode); + } else { + issueDelayedCommand(cmdGetToneEnabled); + issueDelayedCommand(cmdGetTSQLEnabled); + } + }); + + // How to understand the reply of getToneEnabled, getTSQLEnabled + // ...... + // it's currently only read into rigState. + // We could emit a signal from rigCommander, turn it into + // a rptrAccess data type and feed that to rptr. + // But there will be two replies, and we need to somehow + // understand both before forming a sensible reply to + // the rptr setup. + // If we don't care, then it just works but we don't know the current state. + //connect(rpt, SIGNAL(setRptAccessMode(rptAccessTxRx)), rig, SLOT(setRptAccessMode(rptAccessTxRx))); @@ -422,6 +444,9 @@ void wfmain::rigConnections() this->splitModeEnabled = false; }); + connect(this, SIGNAL(getToneEnabled()), rig, SLOT(getToneEnabled())); + connect(this, SIGNAL(getTSQLEnabled()), rig, SLOT(getToneSqlEnabled())); + connect(this->rpt, &repeaterSetup::setTransmitFrequency, [=](const freqt &transmitFreq) { issueCmd(cmdSetFreq, transmitFreq);}); connect(this->rpt, &repeaterSetup::setTransmitMode, @@ -3951,7 +3976,19 @@ void wfmain::doCmd(cmds cmd) emit getDTCS(); break; case cmdGetRptAccessMode: - emit getRptAccessMode(); + if(rigCaps.hasAdvancedRptrToneCmds) { + emit getRptAccessMode(); + } else { + // Get both TONE and TSQL enabled status + emit getToneEnabled(); + issueDelayedCommand(cmdGetTSQLEnabled); + } + break; + case cmdGetToneEnabled: + emit getToneEnabled(); + break; + case cmdGetTSQLEnabled: + emit getTSQLEnabled(); break; case cmdDispEnable: emit scopeDisplayEnable(); diff --git a/wfmain.h b/wfmain.h index b3a1396..1968f79 100644 --- a/wfmain.h +++ b/wfmain.h @@ -118,6 +118,8 @@ signals: void setRepeaterAccessMode(rptrAccessData_t rd); void setTone(rptrTone_t t); void setTSQL(rptrTone_t t); + void getToneEnabled(); + void getTSQLEnabled(); void setRptDuplexOffset(freqt f); void getRptDuplexOffset(); diff --git a/wfviewtypes.h b/wfviewtypes.h index 9c5dd24..af71e6a 100644 --- a/wfviewtypes.h +++ b/wfviewtypes.h @@ -153,7 +153,7 @@ enum cmds { cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed, cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter, cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter, - cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset, + cmdGetTone, cmdGetTSQL, cmdGetToneEnabled, cmdGetTSQLEnabled, cmdGetDTCS, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset, cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna, cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW,