From cb7cf6c2185b39ea933ecf6ac3778776342eded8 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 09:35:55 -0800 Subject: [PATCH 1/8] Added "scope out of range" notification. --- rigcommander.cpp | 11 +++++++++++ rigcommander.h | 2 ++ wfmain.cpp | 14 +++++++++++++- wfmain.h | 1 + wfmain.ui | 29 ++++++++++++++++++++++------- 5 files changed, 49 insertions(+), 8 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index d2aa849..132403a 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -4244,6 +4244,17 @@ void rigCommander::parseSpectrum() return; } + if(payloadIn.length() >= 15) + { + bool outOfRange = (bool)payloadIn[16]; + if(outOfRange != wasOutOfRange) + { + emit haveScopeOutOfRange(outOfRange); + wasOutOfRange = outOfRange; + return; + } + } + // unsigned char waveInfo = payloadIn[06]; // really just one byte? //qInfo(logRig()) << "Spectrum Data received: " << sequence << "/" << sequenceMax << " mode: " << scopeMode << " waveInfo: " << waveInfo << " length: " << payloadIn.length(); diff --git a/rigcommander.h b/rigcommander.h index bf07110..9cec30e 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -291,6 +291,7 @@ signals: void haveSpectrumMode(spectrumMode spectmode); void haveScopeEdge(char edge); void haveSpectrumRefLevel(int level); + void haveScopeOutOfRange(bool outOfRange); // Rig ID: void haveRigID(rigCapabilities rigCaps); @@ -457,6 +458,7 @@ private: quint16 spectAmpMax; quint16 spectLenMax; spectrumMode oldScopeMode; + bool wasOutOfRange = false; bool usingNativeLAN; // indicates using OEM LAN connection (705,7610,9700,7850) bool lookingForRig; diff --git a/wfmain.cpp b/wfmain.cpp index 477fa6b..b28faad 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -457,6 +457,7 @@ void wfmain::rigConnections() connect(rig, SIGNAL(haveSpectrumData(QByteArray, double, double)), this, SLOT(receiveSpectrumData(QByteArray, double, double))); connect(rig, SIGNAL(haveSpectrumMode(spectrumMode)), this, SLOT(receiveSpectrumMode(spectrumMode))); + connect(rig, SIGNAL(haveScopeOutOfRange(bool)), this, SLOT(handleScopeOutOfRange(bool))); connect(this, SIGNAL(setScopeMode(spectrumMode)), rig, SLOT(setSpectrumMode(spectrumMode))); connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode())); @@ -5083,6 +5084,17 @@ void wfmain::receiveSpectrumMode(spectrumMode spectMode) setUISpectrumControlsToMode(spectMode); } +void wfmain::handleScopeOutOfRange(bool outOfRange) +{ + if(outOfRange) + { + ui->scopeOutOfRangeLabel->setText("OUT OF RANGE"); + ui->scopeOutOfRangeLabel->setStyleSheet("QLabel { background-color : red; color : blue; }"); + } else { + ui->scopeOutOfRangeLabel->setText(""); + ui->scopeOutOfRangeLabel->setStyleSheet(""); + } +} void wfmain::handlePlotDoubleClick(QMouseEvent *me) { @@ -9166,4 +9178,4 @@ void wfmain::resetUsbCommands() usbCommands.append(COMMAND(51, "Split On", cmdNone, 0x01)); usbCommands.append(COMMAND(52, "Split Off", cmdNone, 0x0)); emit sendUsbControllerCommands(&usbCommands); -} \ No newline at end of file +} diff --git a/wfmain.h b/wfmain.h index 21e151b..b3a1396 100644 --- a/wfmain.h +++ b/wfmain.h @@ -281,6 +281,7 @@ private slots: void receiveSpectrumData(QByteArray spectrum, double startFreq, double endFreq); void receiveSpectrumMode(spectrumMode spectMode); void receiveSpectrumSpan(freqt freqspan, bool isSub); + void handleScopeOutOfRange(bool outOfRange); void receivePTTstatus(bool pttOn); void receiveDataModeStatus(bool dataOn); void receiveBandStackReg(freqt f, char mode, char filter, bool dataOn); // freq, mode, (filter,) datamode diff --git a/wfmain.ui b/wfmain.ui index 3958d51..8ebb962 100644 --- a/wfmain.ui +++ b/wfmain.ui @@ -6,7 +6,7 @@ 0 0 - 1012 + 1042 660 @@ -18,7 +18,7 @@ - 3 + 0 @@ -117,6 +117,19 @@ + + + + + 5 + 0 + + + + + + + @@ -1808,6 +1821,7 @@ DejaVu Sans Mono 14 + 75 true @@ -3430,8 +3444,8 @@ 0 0 - 790 - 302 + 570 + 224 @@ -5441,6 +5455,7 @@ + 50 false @@ -5459,8 +5474,8 @@ 0 0 - 1012 - 22 + 1042 + 21 @@ -5488,7 +5503,7 @@ - + From 17d6493338a57c77348041844953038e6987dd63 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 14:03:51 -0800 Subject: [PATCH 2/8] Potentially fixed TONE and TSQL for rigs other than the mighty IC-9700. --- rigcommander.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index 132403a..18959c7 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -1207,9 +1207,45 @@ void rigCommander::setRptAccessMode(rptAccessTxRx ratr) void rigCommander::setRptAccessMode(rptrAccessData_t rd) { QByteArray payload; - payload.setRawData("\x16\x5D", 2); - payload.append((unsigned char)rd.accessMode); - if(rd.useSecondaryVFO) + if(rigCaps.model==model9700) + { + payload.setRawData("\x16\x5D", 2); + payload.append((unsigned char)rd.accessMode); + } else { + // These radios either don't support DCS or + // we just haven't added DCS yet. + + // 16 42 00 = TONE off + // 16 42 01 = TONE on + // 16 43 00 = TSQL off + // 16 43 01 = TSQL on + + switch(rd.accessMode) + { + case ratrNN: + // No tone at all + payload.append("\x16\x42\x00", 3); // TONE off + //payload.append("\x16\x43\x00", 3); // TSQL off + break; + case ratrTN: + // TONE on transmit only + payload.append("\x16\x42\x01", 3); // TONE on + break; + case ratrTT: + // Tone on transmit and TSQL + payload.append("\x16\x43\x01", 3); // TSQL on + break; + case ratrNT: + // Tone squelch and no tone transmit: + payload.append("\x16\x43\x01", 3); // TSQL on + // payload.append("\x16\x42\x00", 3); // TONE off + break; + default: + qWarning(logRig()) << "Cannot set tone mode" << (unsigned char)rd.accessMode << "on rig model" << rigCaps.modelName; + return; + } + } + if(rd.useSecondaryVFO && rigCaps.hasSpecifyMainSubCmd) { payload.prepend("\x29\x01"); } From d503df03bd675b8c2cc665a62dd548e3fecafc9d Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 18:00:12 -0800 Subject: [PATCH 3/8] 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, From eea17e5e09c70784ebb8ac251d3686b296590881 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 21:52:24 -0800 Subject: [PATCH 4/8] Possibly the tone issue is solved. --- repeatersetup.cpp | 52 ++++++++++++++++++++++++++++++++--------------- rigcommander.cpp | 39 ++++++++++++++++++++++++++++++++++- rigcommander.h | 5 +++++ wfmain.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++--- wfmain.h | 2 ++ wfviewtypes.h | 14 +++++++++++-- 6 files changed, 140 insertions(+), 22 deletions(-) diff --git a/repeatersetup.cpp b/repeatersetup.cpp index 33db475..572b19e 100644 --- a/repeatersetup.cpp +++ b/repeatersetup.cpp @@ -313,25 +313,45 @@ void repeaterSetup::receiveDuplexMode(duplexMode dm) void repeaterSetup::handleRptAccessMode(rptAccessTxRx tmode) { + // ratrXY + // X = Transmit (T)one or (N)one or (D)CS + // Y = Receive (T)sql or (N)one or (D)CS + qDebug() << "In repeater setup, have received mode: " << tmode; switch(tmode) { - case ratrNN: - ui->toneNone->setChecked(true); - break; - case ratrTT: - ui->toneTSQL->setChecked(true); - break; - case ratrTN: - ui->toneTone->setChecked(true); - break; - case ratrDD: - ui->toneDTCS->setChecked(true); - break; - default: - break; + case ratrNN: + ui->toneNone->setChecked(true); + break; + case ratrTT: + case ratrNT: + ui->toneTSQL->setChecked(true); + break; + case ratrTN: + ui->toneTone->setChecked(true); + break; + case ratrDD: + ui->toneDTCS->setChecked(true); + break; + case ratrTONEoff: + ui->toneTone->setChecked(false); + break; + case ratrTONEon: + ui->toneTone->setChecked(true); + break; + case ratrTSQLoff: + ui->toneTSQL->setChecked(false); + break; + case ratrTSQLon: + ui->toneTSQL->setChecked(true); + break; + default: + break; + } + if( !ui->toneTSQL->isChecked() && !ui->toneTone->isChecked() && !ui->toneDTCS->isChecked()) + { + ui->toneNone->setChecked(true); + qDebug() << "Assuming tone None is correct"; } - - (void)tmode; } void repeaterSetup::handleTone(quint16 tone) diff --git a/rigcommander.cpp b/rigcommander.cpp index c0eb9ac..031b05e 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -1206,6 +1206,9 @@ void rigCommander::setRptAccessMode(rptAccessTxRx ratr) void rigCommander::setRptAccessMode(rptrAccessData_t rd) { + // NB: This function is the only recommended + // function to be used for toggling tone and tone squelch. + QByteArray payload; if(rigCaps.hasAdvancedRptrToneCmds) { @@ -1225,6 +1228,20 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) { case ratrNN: // No tone at all + qDebug(logRig()) << "Tone off requested. state_TONE_enabled: " << state_TONE_Main_Enabled << ", state_TSQL_enabled: " << state_TSQL_Main_Enabled; + qDebug(logRig()) << "state.getBool(TONEFUNC): " << state.getBool(TONEFUNC); + qDebug(logRig()) << "state.getBool(TSQLFUNC): " << state.getBool(TSQLFUNC); + qDebug(logRig()) << "turn off tone: " << rd.turnOffTone << ", turn off tsql: " << rd.turnOffTSQL; + qDebug(logRig()) << "Using sequence? " << rd.usingSequence << ", sequence number: " << rd.sequence; + if(rd.turnOffTone) + { + payload.append("\x16\x42\x00", 3); // TONE off + } else if (rd.turnOffTSQL) + { + payload.append("\x16\x43\x00", 3); // TSQL off + } + + /* if(state.getBool(TONEFUNC)) { payload.append("\x16\x42\x00", 3); // TONE off @@ -1234,6 +1251,8 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) // ?? turn off TSQL ?? payload.append("\x16\x43\x00", 3); // TSQL off } + */ + break; case ratrTN: // TONE on transmit only @@ -1245,7 +1264,7 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) break; case ratrNT: // Tone squelch and no tone transmit: - payload.append("\x16\x43\x01", 3); // TSQL on + payload.append("\x16\x43\x01", 3); // TSQL on, close enough here. // payload.append("\x16\x42\x00", 3); // TONE off break; default: @@ -1253,6 +1272,7 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) return; } } + if(rd.useSecondaryVFO && rigCaps.hasSpecifyMainSubCmd) { payload.prepend("\x29\x01"); @@ -2932,6 +2952,7 @@ void rigCommander::parseRegister16() //"INDEX: 00 01 02 03 " //"DATA: 16 5d 00 fd " // ^-- mode info here + rptAccessTxRx ra; switch(payloadIn.at(1)) { @@ -2954,9 +2975,25 @@ void rigCommander::parseRegister16() break; case '\x42': state.set(TONEFUNC, payloadIn.at(2) != 0, false); + state_TONE_Main_Enabled = (bool)payloadIn.at(2); + if(payloadIn.at(2)==1) + { + ra = ratrTONEon; + } else { + ra = ratrTONEoff; + } + emit haveRptAccessMode(ra); break; case '\x43': state.set(TSQLFUNC, payloadIn.at(2) != 0, false); + state_TSQL_Main_Enabled = (bool)payloadIn.at(2); + if(payloadIn.at(2)==1) + { + ra = ratrTSQLon; + } else { + ra = ratrTSQLoff; + } + emit haveRptAccessMode(ra); break; case '\x44': state.set(COMPFUNC, payloadIn.at(2) != 0, false); diff --git a/rigcommander.h b/rigcommander.h index b55c7ae..9ff88c1 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -451,6 +451,11 @@ private: struct rigCapabilities rigCaps; rigstate state; + // These are temporary measurements for debugging: + bool state_TONE_Main_Enabled = false; + bool state_TSQL_Main_Enabled = false; + bool state_TONE_Sub_Enabled = false; + bool state_TSQL_Sub_Enabled = false; bool haveRigCaps; model_kind model; diff --git a/wfmain.cpp b/wfmain.cpp index 9eefd28..a7c9a09 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -389,6 +389,8 @@ void wfmain::rigConnections() connect(rig, SIGNAL(haveDuplexMode(duplexMode)), rpt, SLOT(receiveDuplexMode(duplexMode))); connect(this, SIGNAL(getRptDuplexOffset()), rig, SLOT(getRptDuplexOffset())); connect(rig, SIGNAL(haveRptOffsetFrequency(freqt)), rpt, SLOT(handleRptOffsetFrequency(freqt))); + + // These are the current tone frequency or DCS code selected: connect(rpt, SIGNAL(getTone()), rig, SLOT(getTone())); connect(rpt, SIGNAL(getTSQL()), rig, SLOT(getTSQL())); connect(rpt, SIGNAL(getDTCS()), rig, SLOT(getDTCS())); @@ -427,7 +429,10 @@ void wfmain::rigConnections() //connect(rpt, SIGNAL(setRptAccessMode(rptAccessTxRx)), rig, SLOT(setRptAccessMode(rptAccessTxRx))); connect(this->rpt, &repeaterSetup::setRptAccessMode, - [=](const rptrAccessData_t &rd) { issueCmd(cmdSetRptAccessMode, rd);}); + [=](const rptrAccessData_t &rd) { + issueCmd(cmdSetRptAccessMode, rd); + }); + connect(this, SIGNAL(setRepeaterAccessMode(rptrAccessData_t)), rig, SLOT(setRptAccessMode(rptrAccessData_t))); connect(this, SIGNAL(setTone(rptrTone_t)), rig, SLOT(setTone(rptrTone_t))); @@ -3471,7 +3476,10 @@ void wfmain:: getInitialRigState() { issueDelayedCommand(cmdGetDTCS); } + // TODO: decide which one! issueDelayedCommand(cmdGetRptAccessMode); + issueDelayedCommand(cmdGetToneEnabled); + issueDelayedCommand(cmdGetTSQLEnabled); if(rigCaps.hasAntennaSel) { @@ -3771,7 +3779,43 @@ void wfmain::doCmd(commandtype cmddata) case cmdSetRptAccessMode: { rptrAccessData_t rd = (*std::static_pointer_cast(data)); + if(rd.accessMode==ratrNN && !rigCaps.hasAdvancedRptrToneCmds) + { + rd.usingSequence = true; + switch(rd.sequence) + { + case 0: + rd.turnOffTone = true; + rd.turnOffTSQL = false; + break; + case 1: + rd.turnOffTSQL = true; + rd.turnOffTone = false; + break; + default: + break; + } + } emit setRepeaterAccessMode(rd); + rd.sequence++; + + if(rd.sequence == 1) + issueCmd(cmdSetRptAccessMode, rd); + + break; + } + case cmdSetToneEnabled: + { + // This command is not aware of which VFO to use + bool toneEnabled = (*std::static_pointer_cast(data)); + emit setToneEnabled(toneEnabled); + break; + } + case cmdSetTSQLEnabled: + { + // This command is not aware of which VFO to use + bool toneEnabled = (*std::static_pointer_cast(data)); + emit setTSQLEnabled(toneEnabled); break; } case cmdSetRptDuplexOffset: @@ -7867,8 +7911,8 @@ void wfmain::on_underlayAverageBuffer_toggled(bool checked) void wfmain::on_debugBtn_clicked() { qInfo(logSystem()) << "Debug button pressed."; - qDebug(logSystem()) << "Query for repeater duplex offset 0x0C headed out"; - issueDelayedCommand(cmdGetRptDuplexOffset); + qDebug(logSystem()) << "Query for repeater access mode (tone, tsql, etc) sent."; + issueDelayedCommand(cmdGetRptAccessMode); } // ---------- color helper functions: ---------- // diff --git a/wfmain.h b/wfmain.h index 1968f79..c1a4445 100644 --- a/wfmain.h +++ b/wfmain.h @@ -120,6 +120,8 @@ signals: void setTSQL(rptrTone_t t); void getToneEnabled(); void getTSQLEnabled(); + void setToneEnabled(bool enabled); + void setTSQLEnabled(bool enabled); void setRptDuplexOffset(freqt f); void getRptDuplexOffset(); diff --git a/wfviewtypes.h b/wfviewtypes.h index af71e6a..6fb4a72 100644 --- a/wfviewtypes.h +++ b/wfviewtypes.h @@ -98,12 +98,20 @@ enum rptAccessTxRx { ratrDN=0x06, // "DTCS(T)" ratrTD=0x07, // "TONE(T) / TSQL(R)" ratrDT=0x08, // "DTCS(T) / TSQL(R)" - ratrTT=0x09 // "TONE(T) / TSQL(R)" + ratrTT=0x09, // "TONE(T) / TSQL(R)" + ratrTONEoff, + ratrTONEon, + ratrTSQLoff, + ratrTSQLon }; struct rptrAccessData_t { rptAccessTxRx accessMode = ratrNN; bool useSecondaryVFO = false; + bool turnOffTone = false; + bool turnOffTSQL = false; + bool usingSequence = false; + int sequence = 0; }; struct mode_info { @@ -153,7 +161,9 @@ enum cmds { cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed, cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter, cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter, - cmdGetTone, cmdGetTSQL, cmdGetToneEnabled, cmdGetTSQLEnabled, cmdGetDTCS, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset, + cmdGetTone, cmdGetTSQL, cmdGetToneEnabled, cmdGetTSQLEnabled, cmdGetDTCS, + cmdSetToneEnabled, cmdSetTSQLEnabled, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, + cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset, cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna, cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW, From a5f3750988323e5762139dc683857bf5754b180f Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 22:08:27 -0800 Subject: [PATCH 5/8] Cleaned up repeater-related debug code. --- repeatersetup.cpp | 2 -- rigcommander.cpp | 20 -------------------- rigcommander.h | 5 ----- wfmain.cpp | 9 +++++---- 4 files changed, 5 insertions(+), 31 deletions(-) diff --git a/repeatersetup.cpp b/repeatersetup.cpp index 572b19e..354f8b4 100644 --- a/repeatersetup.cpp +++ b/repeatersetup.cpp @@ -316,7 +316,6 @@ void repeaterSetup::handleRptAccessMode(rptAccessTxRx tmode) // ratrXY // X = Transmit (T)one or (N)one or (D)CS // Y = Receive (T)sql or (N)one or (D)CS - qDebug() << "In repeater setup, have received mode: " << tmode; switch(tmode) { case ratrNN: @@ -350,7 +349,6 @@ void repeaterSetup::handleRptAccessMode(rptAccessTxRx tmode) if( !ui->toneTSQL->isChecked() && !ui->toneTone->isChecked() && !ui->toneDTCS->isChecked()) { ui->toneNone->setChecked(true); - qDebug() << "Assuming tone None is correct"; } } diff --git a/rigcommander.cpp b/rigcommander.cpp index 031b05e..d095d0a 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -1228,11 +1228,6 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) { case ratrNN: // No tone at all - qDebug(logRig()) << "Tone off requested. state_TONE_enabled: " << state_TONE_Main_Enabled << ", state_TSQL_enabled: " << state_TSQL_Main_Enabled; - qDebug(logRig()) << "state.getBool(TONEFUNC): " << state.getBool(TONEFUNC); - qDebug(logRig()) << "state.getBool(TSQLFUNC): " << state.getBool(TSQLFUNC); - qDebug(logRig()) << "turn off tone: " << rd.turnOffTone << ", turn off tsql: " << rd.turnOffTSQL; - qDebug(logRig()) << "Using sequence? " << rd.usingSequence << ", sequence number: " << rd.sequence; if(rd.turnOffTone) { payload.append("\x16\x42\x00", 3); // TONE off @@ -1240,19 +1235,6 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd) { 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 @@ -2975,7 +2957,6 @@ void rigCommander::parseRegister16() break; case '\x42': state.set(TONEFUNC, payloadIn.at(2) != 0, false); - state_TONE_Main_Enabled = (bool)payloadIn.at(2); if(payloadIn.at(2)==1) { ra = ratrTONEon; @@ -2986,7 +2967,6 @@ void rigCommander::parseRegister16() break; case '\x43': state.set(TSQLFUNC, payloadIn.at(2) != 0, false); - state_TSQL_Main_Enabled = (bool)payloadIn.at(2); if(payloadIn.at(2)==1) { ra = ratrTSQLon; diff --git a/rigcommander.h b/rigcommander.h index 9ff88c1..b55c7ae 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -451,11 +451,6 @@ private: struct rigCapabilities rigCaps; rigstate state; - // These are temporary measurements for debugging: - bool state_TONE_Main_Enabled = false; - bool state_TSQL_Main_Enabled = false; - bool state_TONE_Sub_Enabled = false; - bool state_TSQL_Sub_Enabled = false; bool haveRigCaps; model_kind model; diff --git a/wfmain.cpp b/wfmain.cpp index a7c9a09..154fc02 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -3476,10 +3476,11 @@ void wfmain:: getInitialRigState() { issueDelayedCommand(cmdGetDTCS); } - // TODO: decide which one! - issueDelayedCommand(cmdGetRptAccessMode); - issueDelayedCommand(cmdGetToneEnabled); - issueDelayedCommand(cmdGetTSQLEnabled); + + if(rigCaps.hasCTCSS || rigCaps.hasDTCS) + { + issueDelayedCommand(cmdGetRptAccessMode); + } if(rigCaps.hasAntennaSel) { From 3c31687b158c5884f106e570aec620e8c9c73396 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 22:11:45 -0800 Subject: [PATCH 6/8] Added additional tone and tone mode sync up for split mode --- repeatersetup.cpp | 9 +++++++++ repeatersetup.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/repeatersetup.cpp b/repeatersetup.cpp index 354f8b4..59bc441 100644 --- a/repeatersetup.cpp +++ b/repeatersetup.cpp @@ -840,3 +840,12 @@ void repeaterSetup::on_rptrOffsetEdit_returnPressed() { this->on_rptrOffsetSetBtn_clicked(); } + +void repeaterSetup::on_setSplitRptrToneChk_clicked(bool checked) +{ + if(checked) + { + on_setRptrSubVFOBtn_clicked(); + on_setToneSubVFOBtn_clicked(); + } +} diff --git a/repeatersetup.h b/repeatersetup.h index 6ad367e..0a23784 100644 --- a/repeatersetup.h +++ b/repeatersetup.h @@ -108,6 +108,8 @@ private slots: void on_splitTransmitFreqEdit_returnPressed(); + void on_setSplitRptrToneChk_clicked(bool checked); + private: Ui::repeaterSetup *ui; freqt currentMainFrequency; From 38e6cb2ef4da044fa5c91bdf1cadba8a7dee0249 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 22:36:37 -0800 Subject: [PATCH 7/8] removed unused functions --- repeatersetup.cpp | 22 ---------------------- repeatersetup.h | 2 -- 2 files changed, 24 deletions(-) diff --git a/repeatersetup.cpp b/repeatersetup.cpp index 59bc441..43e052b 100644 --- a/repeatersetup.cpp +++ b/repeatersetup.cpp @@ -498,11 +498,6 @@ void repeaterSetup::on_rptAutoBtn_clicked() emit setDuplexMode(dmDupAutoOn); } -void repeaterSetup::on_rptReadRigBtn_clicked() -{ - emit getDuplexMode(); -} - void repeaterSetup::on_rptToneCombo_activated(int tindex) { quint16 tone=0; @@ -612,23 +607,6 @@ void repeaterSetup::on_toneDTCS_clicked() // TODO: DTCS with subband } -void repeaterSetup::on_debugBtn_clicked() -{ - // TODO: Move these four commands to wfview's startup command list (place at the end) - //emit getTone(); - //emit getTSQL(); - //emit getDTCS(); - emit getRptAccessMode(); -} - -//void repeaterSetup::on_splitOffsetSetBtn_clicked() -//{ -// freqt txFreq; -// bool ok = true; -// txFreq.Hz = ui->splitTransmitFreqEdit->text().toDouble(&ok) * 1E6; -// emit setTransmitFrequency(txFreq); -//} - quint64 repeaterSetup::getFreqHzFromKHzString(QString khz) { // This function takes a string containing a number in KHz, diff --git a/repeatersetup.h b/repeatersetup.h index 0a23784..c9e2f47 100644 --- a/repeatersetup.h +++ b/repeatersetup.h @@ -65,10 +65,8 @@ private slots: void on_rptDupPlusBtn_clicked(); void on_rptDupMinusBtn_clicked(); void on_rptAutoBtn_clicked(); - void on_rptReadRigBtn_clicked(); void on_rptToneCombo_activated(int index); void on_rptDTCSCombo_activated(int index); - void on_debugBtn_clicked(); void on_toneNone_clicked(); void on_toneTone_clicked(); void on_toneTSQL_clicked(); From eaf7eb126eea20e61919b3f0a9027975874e5f96 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 22:38:22 -0800 Subject: [PATCH 8/8] Disabled function that does not work with the cw combo box. --- cwsender.cpp | 8 ++++---- cwsender.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cwsender.cpp b/cwsender.cpp index 60fd89b..3c66e83 100644 --- a/cwsender.cpp +++ b/cwsender.cpp @@ -97,10 +97,10 @@ void cwSender::on_stopBtn_clicked() ui->statusbar->showMessage("Stopping CW transmission.", 3000); } -void cwSender::on_textToSendEdit_returnPressed() -{ - on_sendBtn_clicked(); -} +//void cwSender::on_textToSendEdit_returnPressed() +//{ +// on_sendBtn_clicked(); +//} void cwSender::on_breakinCombo_activated(int brkmode) { diff --git a/cwsender.h b/cwsender.h index e35875f..e07ccf7 100644 --- a/cwsender.h +++ b/cwsender.h @@ -45,7 +45,7 @@ private slots: void on_stopBtn_clicked(); - void on_textToSendEdit_returnPressed(); + //void on_textToSendEdit_returnPressed(); void on_breakinCombo_activated(int index);