diff --git a/controllersetup.h b/controllersetup.h
index 62c81cd..1be254b 100644
--- a/controllersetup.h
+++ b/controllersetup.h
@@ -44,8 +44,8 @@ public slots:
void offEventIndexChanged(int index);
private:
- enum { NONE=0, shuttleXpress, shuttlePro2, RC28, xBoxGamepad, unknownGamepad } usbDevice;
+ usbDeviceType usbDevice = usbNone;
Ui::controllerSetup* ui;
QGraphicsScene* scene;
QGraphicsTextItem* textItem;
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);
diff --git a/cwsender.ui b/cwsender.ui
index f328e0f..3a9e358 100644
--- a/cwsender.ui
+++ b/cwsender.ui
@@ -269,9 +269,6 @@
5
-
- QAbstractSpinBox::DefaultStepType
-
600
diff --git a/repeatersetup.cpp b/repeatersetup.cpp
index 33db475..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()
@@ -313,25 +314,43 @@ 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
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);
}
-
- (void)tmode;
}
void repeaterSetup::handleTone(quint16 tone)
@@ -396,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);
}
}
@@ -480,11 +503,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;
@@ -594,23 +612,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,
@@ -822,3 +823,17 @@ void repeaterSetup::on_rptrOffsetEdit_returnPressed()
{
this->on_rptrOffsetSetBtn_clicked();
}
+
+void repeaterSetup::on_setSplitRptrToneChk_clicked(bool checked)
+{
+ if(checked)
+ {
+ on_setRptrSubVFOBtn_clicked();
+ on_setToneSubVFOBtn_clicked();
+ }
+}
+
+void repeaterSetup::on_quickSplitChk_clicked(bool checked)
+{
+ emit setQuickSplit(checked);
+}
diff --git a/repeatersetup.h b/repeatersetup.h
index 6ad367e..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);
@@ -65,10 +66,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();
@@ -108,6 +107,10 @@ private slots:
void on_splitTransmitFreqEdit_returnPressed();
+ 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 d2aa849..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);
}
@@ -1206,10 +1216,56 @@ 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;
- payload.setRawData("\x16\x5D", 2);
- payload.append((unsigned char)rd.accessMode);
- if(rd.useSecondaryVFO)
+ if(rigCaps.hasAdvancedRptrToneCmds)
+ {
+ // IC-9700 basically
+ 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
+ if(rd.turnOffTone)
+ {
+ payload.append("\x16\x42\x00", 3); // TONE off
+ } else if (rd.turnOffTSQL)
+ {
+ 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, close enough here.
+ // 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");
}
@@ -1224,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);
}
@@ -1319,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);
@@ -1334,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)
{
@@ -2888,6 +2947,7 @@ void rigCommander::parseRegister16()
//"INDEX: 00 01 02 03 "
//"DATA: 16 5d 00 fd "
// ^-- mode info here
+ rptAccessTxRx ra;
switch(payloadIn.at(1))
{
@@ -2910,9 +2970,23 @@ void rigCommander::parseRegister16()
break;
case '\x42':
state.set(TONEFUNC, payloadIn.at(2) != 0, false);
+ if(payloadIn.at(2)==1)
+ {
+ ra = ratrTONEon;
+ } else {
+ ra = ratrTONEoff;
+ }
+ emit haveRptAccessMode(ra);
break;
case '\x43':
state.set(TSQLFUNC, payloadIn.at(2) != 0, false);
+ if(payloadIn.at(2)==1)
+ {
+ ra = ratrTSQLon;
+ } else {
+ ra = ratrTSQLoff;
+ }
+ emit haveRptAccessMode(ra);
break;
case '\x44':
state.set(COMPFUNC, payloadIn.at(2) != 0, false);
@@ -3275,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;
@@ -3348,8 +3422,8 @@ void rigCommander::determineRigCaps()
bandType bandDefGen(bandGen, 10000, 30000000, modeAM);
- standardHF = { bandDef6m, bandDef10m, bandDef12m, bandDef15m, bandDef17m,
- bandDef20m, bandDef30m, bandDef40m, bandDef60m, bandDef80m, bandDef160m};
+ standardHF = { bandDef160m, bandDef80m, bandDef60m, bandDef40m, bandDef30m,
+ bandDef20m, bandDef17m, bandDef15m, bandDef12m, bandDef10m, bandDef6m };
standardVU = { bandDef2m, bandDef70cm };
@@ -3459,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");
@@ -3531,6 +3607,9 @@ void rigCommander::determineRigCaps()
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x27");
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");
@@ -3585,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");
@@ -3619,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;
@@ -3654,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;
@@ -3693,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");
@@ -3719,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");
@@ -3744,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");
@@ -3775,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");
@@ -3799,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");
@@ -3827,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");
@@ -4067,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");
@@ -4090,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");
@@ -4121,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);
@@ -4244,6 +4347,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();
@@ -4774,7 +4888,7 @@ void rigCommander::setToneSql(bool enabled)
prepDataAndSend(payload);
}
-void rigCommander::getToneSql()
+void rigCommander::getToneSqlEnabled()
{
QByteArray payload;
payload.setRawData("\x16\x43", 2);
@@ -5152,7 +5266,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 bf07110..740fda3 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);
@@ -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);
@@ -291,6 +292,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 +459,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/rigidentities.h b/rigidentities.h
index dbd6e3f..8202506 100644
--- a/rigidentities.h
+++ b/rigidentities.h
@@ -152,6 +152,10 @@ struct rigCapabilities {
bool hasVFOMS = false;
bool hasVFOAB = true; // 0x07 [00||01]
+ bool hasAdvancedRptrToneCmds = false;
+ bool hasQuickSplitCommand = false;
+ QByteArray quickSplitCommand;
+
std::vector attenuators;
std::vector preamps;
std::vector antennas;
diff --git a/udpbase.cpp b/udpbase.cpp
index 73bf91b..719848a 100644
--- a/udpbase.cpp
+++ b/udpbase.cpp
@@ -429,11 +429,12 @@ void udpBase::sendTrackedPacket(QByteArray d)
udpMutex.lock();
udp->writeDatagram(d, radioIP, port);
- if (congestion > 10) { // Poor quality connection?
+
+ /*if (congestion > 10) { // Poor quality connection?
udp->writeDatagram(d, radioIP, port);
if (congestion > 20) // Even worse so send again.
udp->writeDatagram(d, radioIP, port);
- }
+ } */
if (idleTimer != Q_NULLPTR && idleTimer->isActive()) {
idleTimer->start(IDLE_PERIOD); // Reset idle counter if it's running
}
diff --git a/usbcontroller.cpp b/usbcontroller.cpp
index 8a9dcff..93adf56 100644
--- a/usbcontroller.cpp
+++ b/usbcontroller.cpp
@@ -18,6 +18,7 @@ usbController::usbController()
usbController::~usbController()
{
qInfo(logUsbControl) << "Ending usbController()";
+ ledControl(false, 3);
hid_close(handle);
hid_exit();
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
@@ -45,32 +46,6 @@ void usbController::receiveButtons(QVector
@@ -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 @@
-
+
diff --git a/wfserver.pro b/wfserver.pro
index 7f8cabb..22a518e 100644
--- a/wfserver.pro
+++ b/wfserver.pro
@@ -19,21 +19,43 @@ DEFINES += BUILD_WFSERVER
CONFIG(debug, release|debug) {
- # For Debug builds only:
- QMAKE_CXXFLAGS += -faligned-new
- win32:DESTDIR = wfview-release
- win32:LIBS += -L../portaudio/msvc/Win32/Debug/ -lportaudio_x86 -ole32
+ # For Debug builds only:
+ linux:QMAKE_CXXFLAGS += -faligned-new
+ win32 {
+ contains(QMAKE_TARGET.arch, x86_64) {
+ QMAKE_POST_LINK +=$$quote(cmd /c copy /y ..\portaudio\msvc\x64\Debug\portaudio_x64.dll wfview-debug $$escape_expand(\\n\\t))
+ LIBS += -L../portaudio/msvc/X64/Debug/ -lportaudio_x64
+ LIBS += -L../opus/win32/VS2015/x64/Debug/ -lopus -lole32
+ } else {
+ QMAKE_POST_LINK +=$$quote(cmd /c copy /y ..\portaudio\msvc\win32\Debug\portaudio_x86.dll wfview-debug\$$escape_expand(\\n\\t))
+ LIBS += -L../portaudio/msvc/Win32/Debug/ -lportaudio_x86
+ LIBS += -L../opus/win32/VS2015/Win32/Debug/ -lopus -lole32
+ }
+ DESTDIR = wfview-release
+ }
} else {
- # For Release builds only:
- linux:QMAKE_CXXFLAGS += -s
- QMAKE_CXXFLAGS += -fvisibility=hidden
- QMAKE_CXXFLAGS += -fvisibility-inlines-hidden
- QMAKE_CXXFLAGS += -faligned-new
- linux:QMAKE_LFLAGS += -O2 -s
- win32:DESTDIR = wfview-debug
- win32:LIBS += -L../portaudio/msvc/Win32/Release/ -lportaudio_x86 -lole32
+ # For Release builds only:
+ linux:QMAKE_CXXFLAGS += -s
+ linux:QMAKE_CXXFLAGS += -fvisibility=hidden
+ linux:QMAKE_CXXFLAGS += -fvisibility-inlines-hidden
+ linux:QMAKE_CXXFLAGS += -faligned-new
+ linux:QMAKE_LFLAGS += -O2 -s
+
+ win32 {
+ contains(QMAKE_TARGET.arch, x86_64) {
+ QMAKE_POST_LINK +=$$quote(cmd /c copy /y ..\portaudio\msvc\x64\Release\portaudio_x64.dll wfview-release $$escape_expand(\\n\\t))
+ LIBS += -L../portaudio/msvc/X64/Release/ -lportaudio_x64
+ LIBS += -L../opus/win32/VS2015/x64/Release/ -lopus -lole32
+ } else {
+ QMAKE_POST_LINK +=$$quote(cmd /c copy /y ..\portaudio\msvc\win32\Release\portaudio_x86.dll wfview-release $$escape_expand(\\n\\t))
+ LIBS += -L../portaudio/msvc/Win32/Release/ -lportaudio_x86
+ LIBS += -L../opus/win32/VS2015/Win32/Release/ -lopus -lole32
+ }
+ DESTDIR = wfview-debug
+ }
}
+
# RTAudio defines
win32:DEFINES += __WINDOWS_WASAPI__
#win32:DEFINES += __WINDOWS_DS__ # Requires DirectSound libraries
@@ -103,15 +125,6 @@ RESOURCES += qdarkstyle/style.qrc \
unix:target.path = $$PREFIX/bin
INSTALLS += target
-# Do not do this, it will hang on start:
-# CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
-
-CONFIG(debug, release|debug) {
- win32:LIBS += -L../opus/win32/VS2015/Win32/Debug/ -lopus
-} else {
- win32:LIBS += -L../opus/win32/VS2015/Win32/Release/ -lopus
-}
-
linux:LIBS += -L./ -lopus
macx:LIBS += -framework CoreAudio -framework CoreFoundation -lpthread -lopus
diff --git a/wfviewtypes.h b/wfviewtypes.h
index 9c5dd24..b86e131 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,12 +161,15 @@ enum cmds {
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed,
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter,
cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter,
- cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset,
- cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS,
+ cmdGetTone, cmdGetTSQL, cmdGetToneEnabled, cmdGetTSQLEnabled, cmdGetDTCS,
+ cmdSetToneEnabled, cmdSetTSQLEnabled, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL,
+ cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset,
+ cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS, cmdSetQuickSplit,
cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna,
cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW,
cmdSetTime, cmdSetDate, cmdSetUTCOffset,
- cmdSetBandUp, cmdSetBandDown, cmdSetModeUp, cmdSetModeDown, cmdSetStepUp, cmdSetStepDown, cmdSetSpanUp, cmdSetSpanDown // Only used for USB Controller at the moment.
+ // Below Only used for USB Controller at the moment.
+ cmdSetBandUp, cmdSetBandDown, cmdSetModeUp, cmdSetModeDown, cmdSetStepUp, cmdSetStepDown, cmdSetSpanUp, cmdSetSpanDown, cmdIFFilterUp, cmdIFFilterDown
};
struct commandtype {
@@ -183,4 +194,6 @@ enum codecType { LPCM, PCMU, OPUS };
enum passbandActions {passbandStatic, pbtInnerMove, pbtOuterMove, pbtMoving, passbandResizing};
+enum usbDeviceType { usbNone = 0, shuttleXpress, shuttlePro2, RC28, xBoxGamepad, unknownGamepad };
+
#endif // WFVIEWTYPES_H