From eea17e5e09c70784ebb8ac251d3686b296590881 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Tue, 31 Jan 2023 21:52:24 -0800 Subject: [PATCH] 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,