diff --git a/repeatersetup.cpp b/repeatersetup.cpp index a384dac..6af089f 100644 --- a/repeatersetup.cpp +++ b/repeatersetup.cpp @@ -101,6 +101,7 @@ void repeaterSetup::setRig(rigCapabilities inRig) ui->rptrOffsetSetBtn->setEnabled(rig.hasRepeaterModes); ui->setToneSubVFOBtn->setEnabled(rig.hasSpecifyMainSubCmd); ui->setRptrSubVFOBtn->setEnabled(rig.hasSpecifyMainSubCmd); + ui->quickSplitChk->setVisible(rig.hasQuickSplitCommand); } void repeaterSetup::populateTones() @@ -831,3 +832,8 @@ void repeaterSetup::on_setSplitRptrToneChk_clicked(bool checked) on_setToneSubVFOBtn_clicked(); } } + +void repeaterSetup::on_quickSplitChk_clicked(bool checked) +{ + emit setQuickSplit(checked); +} diff --git a/repeatersetup.h b/repeatersetup.h index c9e2f47..52650e3 100644 --- a/repeatersetup.h +++ b/repeatersetup.h @@ -35,6 +35,7 @@ signals: void getRptDuplexOffset(); // Split: void getSplitModeEnabled(); + void setQuickSplit(bool qsOn); void getTransmitFrequency(); // Use the duplexMode to communicate split. // void setSplitModeEnabled(bool splitEnabled); @@ -108,6 +109,8 @@ private slots: void on_setSplitRptrToneChk_clicked(bool checked); + void on_quickSplitChk_clicked(bool checked); + private: Ui::repeaterSetup *ui; freqt currentMainFrequency; diff --git a/repeatersetup.ui b/repeatersetup.ui index d418873..fd73983 100644 --- a/repeatersetup.ui +++ b/repeatersetup.ui @@ -151,6 +151,13 @@ + + + + QuickSplit + + + diff --git a/rigcommander.cpp b/rigcommander.cpp index bb4b362..2972733 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -935,6 +935,16 @@ void rigCommander::getDuplexMode() prepDataAndSend(payload); } +void rigCommander::setQuickSplit(bool qsOn) +{ + if(rigCaps.hasQuickSplitCommand) + { + QByteArray payload = rigCaps.quickSplitCommand; + payload.append((unsigned char)qsOn); + prepDataAndSend(payload); + } +} + void rigCommander::setPassband(quint16 pass) { QByteArray payload; @@ -3523,6 +3533,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x71"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x30"); break; case modelR8600: rigCaps.modelName = QString("IC-R8600"); @@ -3596,6 +3608,8 @@ void rigCommander::determineRigCaps() rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = true; rigCaps.hasAdvancedRptrToneCmds = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x43"); break; case model910h: rigCaps.modelName = QString("IC-910H"); @@ -3650,6 +3664,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x97"); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = false; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x64"); break; case model7610: rigCaps.modelName = QString("IC-7610"); @@ -3684,6 +3700,8 @@ void rigCommander::determineRigCaps() rigCaps.hasRXAntenna = true; rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x12"); rigCaps.hasSpecifyMainSubCmd = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x33"); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = false; break; @@ -3719,6 +3737,8 @@ void rigCommander::determineRigCaps() rigCaps.hasRXAntenna = true; rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x55"); rigCaps.hasSpecifyMainSubCmd = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x01\x13"); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = false; break; @@ -3758,6 +3778,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x31"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x45"); break; case model7000: rigCaps.modelName = QString("IC-7000"); @@ -3784,6 +3806,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x92"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x52"); break; case model7410: rigCaps.modelName = QString("IC-7410"); @@ -3809,6 +3833,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x40"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x11"); break; case model7100: rigCaps.modelName = QString("IC-7100"); @@ -3840,6 +3866,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x95"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x15"); break; case model7200: rigCaps.modelName = QString("IC-7200"); @@ -3864,6 +3892,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x03\x48"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x03\x18"); break; case model7700: rigCaps.modelName = QString("IC-7700"); @@ -3892,6 +3922,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x95"); rigCaps.hasVFOMS = false; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x67"); break; case model703: rigCaps.modelName = QString("IC-703"); @@ -4132,6 +4164,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00"); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = false; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x24"); break; case model756proiii: rigCaps.modelName = QString("IC-756 Pro III"); @@ -4155,6 +4189,8 @@ void rigCommander::determineRigCaps() rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00"); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = false; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x24"); break; case model9100: rigCaps.modelName = QString("IC-9100"); @@ -4186,6 +4222,8 @@ void rigCommander::determineRigCaps() rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeDV, 0x17, "DV")}); rigCaps.hasVFOMS = true; rigCaps.hasVFOAB = true; + rigCaps.hasQuickSplitCommand = true; + rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x14"); break; default: rigCaps.modelName = QString("IC-0x%1").arg(rigCaps.modelID, 2, 16); diff --git a/rigcommander.h b/rigcommander.h index b55c7ae..740fda3 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -137,6 +137,7 @@ public slots: // Repeater: void setDuplexMode(duplexMode dm); void getDuplexMode(); + void setQuickSplit(bool qsOn); void getTransmitFrequency(); void setTone(rptrTone_t t); void setTSQL(rptrTone_t t); diff --git a/rigidentities.h b/rigidentities.h index 3a985fe..8202506 100644 --- a/rigidentities.h +++ b/rigidentities.h @@ -153,6 +153,8 @@ struct rigCapabilities { bool hasVFOAB = true; // 0x07 [00||01] bool hasAdvancedRptrToneCmds = false; + bool hasQuickSplitCommand = false; + QByteArray quickSplitCommand; std::vector attenuators; std::vector preamps; diff --git a/wfmain.cpp b/wfmain.cpp index 154fc02..75d1c77 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -415,18 +415,12 @@ void wfmain::rigConnections() } }); - // 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(this->rpt, &repeaterSetup::setQuickSplit, + [=](const bool &qsEnabled) { + issueCmd(cmdSetQuickSplit, qsEnabled); + }); - - //connect(rpt, SIGNAL(setRptAccessMode(rptAccessTxRx)), rig, SLOT(setRptAccessMode(rptAccessTxRx))); + connect(this, SIGNAL(setQuickSplit(bool)), rig, SLOT(setQuickSplit(bool))); connect(this->rpt, &repeaterSetup::setRptAccessMode, [=](const rptrAccessData_t &rd) { @@ -453,7 +447,7 @@ void wfmain::rigConnections() connect(this, SIGNAL(getTSQLEnabled()), rig, SLOT(getToneSqlEnabled())); connect(this->rpt, &repeaterSetup::setTransmitFrequency, - [=](const freqt &transmitFreq) { issueCmd(cmdSetFreq, transmitFreq);}); + [=](const freqt &transmitFreq) { issueCmdUniquePriority(cmdSetFreq, transmitFreq);}); connect(this->rpt, &repeaterSetup::setTransmitMode, [=](const mode_info &transmitMode) { issueCmd(cmdSetMode, transmitMode);}); connect(this->rpt, &repeaterSetup::selectVFO, @@ -3825,6 +3819,12 @@ void wfmain::doCmd(commandtype cmddata) emit setRptDuplexOffset(f); break; } + case cmdSetQuickSplit: + { + bool qsEnabled = (*std::static_pointer_cast(data)); + emit setQuickSplit(qsEnabled); + break; + } case cmdSetPTT: { bool pttrequest = (*std::static_pointer_cast(data)); diff --git a/wfmain.h b/wfmain.h index c1a4445..de8ccf4 100644 --- a/wfmain.h +++ b/wfmain.h @@ -111,6 +111,7 @@ signals: // Repeater: void getDuplexMode(); + void setQuickSplit(bool qsOn); void getTone(); void getTSQL(); void getDTCS(); diff --git a/wfviewtypes.h b/wfviewtypes.h index 6fb4a72..0251363 100644 --- a/wfviewtypes.h +++ b/wfviewtypes.h @@ -164,7 +164,7 @@ enum cmds { cmdGetTone, cmdGetTSQL, cmdGetToneEnabled, cmdGetTSQLEnabled, cmdGetDTCS, cmdSetToneEnabled, cmdSetTSQLEnabled, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset, - cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS, + cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS, cmdSetQuickSplit, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna, cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW, cmdSetTime, cmdSetDate, cmdSetUTCOffset,