diff --git a/repeatersetup.cpp b/repeatersetup.cpp
index 43e052b..6af089f 100644
--- a/repeatersetup.cpp
+++ b/repeatersetup.cpp
@@ -8,7 +8,7 @@ repeaterSetup::repeaterSetup(QWidget *parent) :
ui->setupUi(this);
ui->autoTrackLiveBtn->setEnabled(false); // until we set split enabled.
-
+ ui->warningFMLabel->setVisible(false);
// populate the CTCSS combo box:
populateTones();
@@ -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()
@@ -414,6 +415,10 @@ void repeaterSetup::handleUpdateCurrentMainMode(mode_info m)
this->currentModeMain = m;
this->modeTransmitVFO = m;
this->modeTransmitVFO.VFO = inactiveVFO;
+ if(m.mk == modeFM)
+ ui->warningFMLabel->setVisible(false);
+ else
+ ui->warningFMLabel->setVisible(true);
}
}
@@ -827,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 da02a26..fd73983 100644
--- a/repeatersetup.ui
+++ b/repeatersetup.ui
@@ -151,6 +151,13 @@
+ -
+
+
+ QuickSplit
+
+
+
-
@@ -163,6 +170,9 @@
Set Rpt Tone
+
+ true
+
-
@@ -392,6 +402,13 @@
Repeater Tone Type
+
-
+
+
+ Only available in FM
+
+
+
-
diff --git a/rigcommander.cpp b/rigcommander.cpp
index d4571eb..c1ca364 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;
@@ -1062,7 +1072,7 @@ void rigCommander::setTone(rptrTone_t t)
{
qDebug(logRig()) << "Sending TONE to secondary VFO";
payload.prepend("\x29\x01");
- printHex(payload);
+ //printHex(payload);
}
prepDataAndSend(payload);
@@ -1089,7 +1099,7 @@ void rigCommander::setTSQL(rptrTone_t t)
{
qDebug(logRig()) << "Sending TSQL to secondary VFO";
payload.prepend("\x29\x01");
- printHex(payload);
+ //printHex(payload);
}
prepDataAndSend(payload);
@@ -1105,7 +1115,7 @@ void rigCommander::setDTCS(quint16 dcscode, bool tinv, bool rinv)
payload.append(denc);
//qInfo() << __func__ << "DTCS encoded payload: ";
- printHex(payload);
+ //printHex(payload);
prepDataAndSend(payload);
}
@@ -1270,8 +1280,8 @@ void rigCommander::setRptDuplexOffset(freqt f)
QByteArray freqPayload = makeFreqPayload(f);
payload.append(freqPayload.mid(1, 3));
//qInfo(logRig()) << "Here is potential repeater offset setting, not sending to radio:";
- printHexNow(payload, logRig());
- QString g = getHex(payload);
+ //printHexNow(payload, logRig());
+ //QString g = getHex(payload);
//qInfo(logRig()).noquote().nospace() << g;
prepDataAndSend(payload);
}
@@ -1365,6 +1375,7 @@ void rigCommander::sendCW(QString textToSend)
QByteArray textData = textToSend.toLocal8Bit();
unsigned char p=0;
+ bool printout=false;
for(int c=0; c < textData.length(); c++)
{
p = textData.at(c);
@@ -1380,10 +1391,12 @@ void rigCommander::sendCW(QString textToSend)
// Allowed character, continue
} else {
qWarning(logRig()) << "Invalid character detected in CW message at position " << c << ", the character is " << textToSend.at(c);
- printHex(textData);
+ printout = true;
textData[c] = 0x3F; // "?"
}
}
+ if(printout)
+ printHex(textData);
if(pttAllowed)
{
@@ -3336,7 +3349,7 @@ void rigCommander::parseWFData()
// read edge mode center in edge mode
emit haveScopeEdge((char)payloadIn[2]);
//qInfo(logRig()) << "Received 0x16 edge in center mode:";
- printHex(payloadIn, false, true);
+ //printHex(payloadIn, false, true);
// [1] 0x16
// [2] 0x01, 0x02, 0x03: Edge 1,2,3
break;
@@ -3520,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");
@@ -3593,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");
@@ -3647,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");
@@ -3681,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;
@@ -3716,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;
@@ -3755,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");
@@ -3781,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");
@@ -3806,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");
@@ -3837,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");
@@ -3861,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");
@@ -3889,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");
@@ -4129,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");
@@ -4152,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");
@@ -4183,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 adef2d4..b8e657f 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,
@@ -3823,6 +3817,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 a646680..300a7ab 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 bd8c3e1..b86e131 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,