kopia lustrzana https://gitlab.com/eliggett/wfview
Merge branch 'band-switching'
commit
072ab1967f
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -45,7 +45,7 @@ private slots:
|
|||
|
||||
void on_stopBtn_clicked();
|
||||
|
||||
void on_textToSendEdit_returnPressed();
|
||||
//void on_textToSendEdit_returnPressed();
|
||||
|
||||
void on_breakinCombo_activated(int index);
|
||||
|
||||
|
|
|
@ -269,9 +269,6 @@
|
|||
<property name="singleStep">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="stepType">
|
||||
<enum>QAbstractSpinBox::DefaultStepType</enum>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>600</number>
|
||||
</property>
|
||||
|
|
|
@ -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,12 +314,16 @@ 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:
|
||||
case ratrNT:
|
||||
ui->toneTSQL->setChecked(true);
|
||||
break;
|
||||
case ratrTN:
|
||||
|
@ -327,11 +332,25 @@ void repeaterSetup::handleRptAccessMode(rptAccessTxRx tmode)
|
|||
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;
|
||||
}
|
||||
|
||||
(void)tmode;
|
||||
if( !ui->toneTSQL->isChecked() && !ui->toneTone->isChecked() && !ui->toneDTCS->isChecked())
|
||||
{
|
||||
ui->toneNone->setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -151,6 +151,13 @@
|
|||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="quickSplitChk">
|
||||
<property name="text">
|
||||
<string>QuickSplit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -163,6 +170,9 @@
|
|||
<property name="text">
|
||||
<string>Set Rpt Tone</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -392,6 +402,13 @@
|
|||
<string>Repeater Tone Type</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="warningFMLabel">
|
||||
<property name="text">
|
||||
<string>Only available in FM</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="toneNone">
|
||||
<property name="text">
|
||||
|
|
138
rigcommander.cpp
138
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;
|
||||
if(rigCaps.hasAdvancedRptrToneCmds)
|
||||
{
|
||||
// IC-9700 basically
|
||||
payload.setRawData("\x16\x5D", 2);
|
||||
payload.append((unsigned char)rd.accessMode);
|
||||
if(rd.useSecondaryVFO)
|
||||
} 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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 <unsigned char> attenuators;
|
||||
std::vector <unsigned char> preamps;
|
||||
std::vector <unsigned char> antennas;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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<BUTTON>* buts)
|
|||
buttonList = buts;
|
||||
}
|
||||
|
||||
int usbController::hidApiWrite(unsigned char* data, unsigned char length)
|
||||
{
|
||||
Q_UNUSED(data);
|
||||
Q_UNUSED(length);
|
||||
/* int res;
|
||||
unsigned char realData[length + 1];
|
||||
|
||||
realData[0] = length;
|
||||
int i;
|
||||
for (i = 0; i < length; i++)
|
||||
{
|
||||
realData[i + 1] = data[i];
|
||||
}
|
||||
|
||||
res = hid_write(handle, realData, length + 1);
|
||||
if (res < 0) {
|
||||
printf("Unable to write()\n");
|
||||
printf("Error: %ls\n", hid_error(handle));
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("write success\n");
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void usbController::run()
|
||||
{
|
||||
|
@ -192,10 +167,15 @@ void usbController::run()
|
|||
if (!handle) {
|
||||
handle = hid_open(0x0c26, 0x001e, NULL);
|
||||
if (!handle) {
|
||||
usbDevice = NONE;
|
||||
usbDevice = usbNone;
|
||||
}
|
||||
else {
|
||||
usbDevice = RC28;
|
||||
getVersion();
|
||||
ledControl(false, 0);
|
||||
ledControl(false, 1);
|
||||
ledControl(false, 2);
|
||||
ledControl(true, 3);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -336,15 +316,22 @@ void usbController::runTimer()
|
|||
else if ((res > 31) && usbDevice == RC28)
|
||||
{
|
||||
// This is a response from the Icom RC28
|
||||
data.resize(8); // Might as well get rid of the unused data.
|
||||
|
||||
if ((unsigned char)data[0] == 0x02) {
|
||||
qInfo(logUsbControl()) << QString("Received RC-28 Firmware Version: %0").arg(QString(data.mid(1,data.indexOf(" ")-1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
data.resize(8);
|
||||
// Buttons
|
||||
|
||||
BUTTON* butptt = Q_NULLPTR;
|
||||
BUTTON* butf1 = Q_NULLPTR;
|
||||
BUTTON* butf2 = Q_NULLPTR;;
|
||||
|
||||
|
||||
//delayedCmdQue.erase(std::remove_if(delayedCmdQue.begin() + 1, delayedCmdQue.end(), [cmd](const commandtype& c) { return (c.cmd == cmd); }),
|
||||
|
||||
for (BUTTON* but = buttonList->begin(); but != buttonList->end(); but++) {
|
||||
if (but->dev == usbDevice) {
|
||||
|
||||
|
@ -363,60 +350,63 @@ void usbController::runTimer()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if (lastData.size() != 8) {
|
||||
lastData = data;
|
||||
}
|
||||
|
||||
if (butptt != Q_NULLPTR && ((unsigned char)data[5] == 0x06) && ((unsigned char)lastData[5] != 0x06))
|
||||
if (butptt != Q_NULLPTR && !((unsigned char)data[5] ^ 0x06) && ((unsigned char)lastData[5] ^ 0x06))
|
||||
{
|
||||
// TRANSMIT key down only (no other keys down)
|
||||
qDebug(logUsbControl()) << "PTT key down";
|
||||
qInfo(logUsbControl()) << "On Button event:" << butptt->onCommand->text;
|
||||
ledControl(true, 0);
|
||||
emit button(butptt->onCommand);
|
||||
|
||||
}
|
||||
else if (butptt != Q_NULLPTR && ((unsigned char)data[5] != 0x06) && ((unsigned char)lastData[5] == 0x06))
|
||||
else if (butptt != Q_NULLPTR && ((unsigned char)data[5] ^ 0x06) && !((unsigned char)lastData[5] ^ 0x06))
|
||||
{
|
||||
// TRANSMIT key up only (no other keys down)
|
||||
//emit button(false, 6);
|
||||
qDebug(logUsbControl()) << "PTT key up";
|
||||
qInfo(logUsbControl()) << "Off Button event:" << butptt->offCommand->text;
|
||||
ledControl(false, 0);
|
||||
emit button(butptt->offCommand);
|
||||
}
|
||||
else if (butf2 != Q_NULLPTR && ((unsigned char)data[5] == 0x03) && ((unsigned char)lastData[5] != 0x03))
|
||||
{
|
||||
// F-2 key up only (no other keys down)
|
||||
//emit button(true, 7);
|
||||
qDebug(logUsbControl()) << "F-2 key up";
|
||||
qInfo(logUsbControl()) << "On Button event:" << butf2->onCommand->text;
|
||||
emit button(butf2->onCommand);
|
||||
}
|
||||
else if (butf2 != Q_NULLPTR && ((unsigned char)data[5] != 0x03) && ((unsigned char)lastData[5] == 0x03))
|
||||
{
|
||||
// F-2 key down only (no other keys down)
|
||||
//emit button(false, 7);
|
||||
qDebug(logUsbControl()) << "F-2 key down";
|
||||
qInfo(logUsbControl()) << "Off Button event:" << butf2->offCommand->text;
|
||||
emit button(butf2->offCommand);
|
||||
}
|
||||
else if (butf1 != Q_NULLPTR && ((unsigned char)data[5] == 0x05) && ((unsigned char)lastData[5] != 0x05))
|
||||
|
||||
if (butf1 != Q_NULLPTR && !((unsigned char)data[5] ^ 0x05) && ((unsigned char)lastData[5] ^ 0x05))
|
||||
{
|
||||
// F-1 key up only (no other keys down)
|
||||
//emit button(true, 5);
|
||||
qDebug(logUsbControl()) << "F-1 key up";
|
||||
qDebug(logUsbControl()) << "F-1 key down";
|
||||
qInfo(logUsbControl()) << "On Button event:" << butf1->onCommand->text;
|
||||
ledControl(true, 1);
|
||||
emit button(butf1->onCommand);
|
||||
}
|
||||
else if (butf1 != Q_NULLPTR && ((unsigned char)data[5] != 0x05) && ((unsigned char)lastData[5] == 0x05))
|
||||
else if (butf1 != Q_NULLPTR && ((unsigned char)data[5] ^ 0x05) && !((unsigned char)lastData[5] ^ 0x05))
|
||||
{
|
||||
// F-1 key down only (no other keys down)
|
||||
//emit button(false, 5);
|
||||
qDebug(logUsbControl()) << "F-1 key down";
|
||||
qDebug(logUsbControl()) << "F-1 key up";
|
||||
qInfo(logUsbControl()) << "Off Button event:" << butf1->offCommand->text;
|
||||
ledControl(false, 1);
|
||||
emit button(butf1->offCommand);
|
||||
}
|
||||
|
||||
if (butf2 != Q_NULLPTR && !((unsigned char)data[5] ^ 0x03) && ((unsigned char)lastData[5] ^ 0x03))
|
||||
{
|
||||
// F-2 key up only (no other keys down)
|
||||
//emit button(true, 7);
|
||||
qDebug(logUsbControl()) << "F-2 key down";
|
||||
qInfo(logUsbControl()) << "On Button event:" << butf2->onCommand->text;
|
||||
ledControl(true, 2);
|
||||
emit button(butf2->onCommand);
|
||||
}
|
||||
else if (butf2 != Q_NULLPTR && ((unsigned char)data[5] ^ 0x03) && !((unsigned char)lastData[5] ^ 0x03))
|
||||
{
|
||||
// F-2 key down only (no other keys down)
|
||||
//emit button(false, 7);
|
||||
qDebug(logUsbControl()) << "F-2 key up";
|
||||
qInfo(logUsbControl()) << "Off Button event:" << butf2->offCommand->text;
|
||||
ledControl(false, 2);
|
||||
emit button(butf2->offCommand);
|
||||
}
|
||||
|
||||
if ((unsigned char)data[5] == 0x07)
|
||||
{
|
||||
if ((unsigned char)data[3] == 0x01)
|
||||
|
@ -431,6 +421,7 @@ void usbController::runTimer()
|
|||
|
||||
lastData = data;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastusbController.msecsTo(QTime::currentTime()) >= 100 || lastusbController > QTime::currentTime())
|
||||
{
|
||||
|
@ -466,16 +457,17 @@ void usbController::runTimer()
|
|||
void usbController::ledControl(bool on, unsigned char num)
|
||||
{
|
||||
if (usbDevice == RC28) {
|
||||
QByteArray data(9, 0x0);
|
||||
data[0] = 8;
|
||||
QByteArray data(3, 0x0);
|
||||
data[1] = 0x01;
|
||||
unsigned char ledNum = 0x07;
|
||||
static unsigned char ledNum = 0x07;
|
||||
if (on)
|
||||
ledNum &= ~(1ULL << (num - 1));
|
||||
ledNum &= ~(1UL << num);
|
||||
else
|
||||
ledNum |= 1UL << num;
|
||||
|
||||
data[2] = ledNum;
|
||||
|
||||
int res = hid_write(handle, (const unsigned char*)data.constData(), 8);
|
||||
int res = hid_write(handle, (const unsigned char*)data.constData(), data.size());
|
||||
|
||||
if (res < 0) {
|
||||
qDebug(logUsbControl()) << "Unable to write(), Error:" << hid_error(handle);
|
||||
|
@ -486,6 +478,17 @@ void usbController::ledControl(bool on, unsigned char num)
|
|||
}
|
||||
}
|
||||
|
||||
void usbController::getVersion()
|
||||
{
|
||||
QByteArray data(64, 0x0);
|
||||
data[0] = 63;
|
||||
data[1] = 0x02;
|
||||
int res = hid_write(handle, (const unsigned char*)data.constData(), data.size());
|
||||
|
||||
if (res < 0) {
|
||||
qDebug(logUsbControl()) << "Unable to write(), Error:" << hid_error(handle);
|
||||
}
|
||||
}
|
||||
void usbController::buttonState(QString name, bool val)
|
||||
{
|
||||
for (BUTTON* but = buttonList->begin(); but != buttonList->end(); but++) {
|
||||
|
|
|
@ -85,7 +85,6 @@ class usbController : public QObject
|
|||
public:
|
||||
usbController();
|
||||
~usbController();
|
||||
int hidApiWrite(unsigned char* data, unsigned char length);
|
||||
|
||||
public slots:
|
||||
void init();
|
||||
|
@ -94,6 +93,7 @@ public slots:
|
|||
void ledControl(bool on, unsigned char num);
|
||||
void receiveCommands(QVector<COMMAND>*);
|
||||
void receiveButtons(QVector<BUTTON>*);
|
||||
void getVersion();
|
||||
|
||||
signals:
|
||||
void jogPlus();
|
||||
|
@ -106,7 +106,6 @@ signals:
|
|||
|
||||
private:
|
||||
hid_device* handle;
|
||||
enum { NONE=0, shuttleXpress, shuttlePro2, RC28, xBoxGamepad, unknownGamepad }usbDevice;
|
||||
bool isOpen=false;
|
||||
unsigned int buttons=0;
|
||||
unsigned char jogpos=0;
|
||||
|
@ -114,7 +113,7 @@ private:
|
|||
unsigned char shutMult = 0;
|
||||
int jogCounter = 0;
|
||||
QTime lastusbController = QTime::currentTime();
|
||||
QByteArray lastData="";
|
||||
QByteArray lastData = QByteArray(8,0x0);
|
||||
unsigned char lastDialPos=0;
|
||||
QVector<BUTTON>* buttonList;
|
||||
QVector<COMMAND>* commands = Q_NULLPTR;
|
||||
|
@ -126,7 +125,7 @@ private:
|
|||
#endif
|
||||
void buttonState(QString but, bool val);
|
||||
void buttonState(QString but, double val);
|
||||
|
||||
usbDeviceType usbDevice = usbNone;
|
||||
protected:
|
||||
};
|
||||
|
||||
|
|
235
wfmain.cpp
235
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()));
|
||||
|
@ -399,13 +401,32 @@ 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(setRptAccessMode(rptAccessTxRx)), rig, SLOT(setRptAccessMode(rptAccessTxRx)));
|
||||
//connect(rpt, SIGNAL(getRptAccessMode()), rig, SLOT(getRptAccessMode()));
|
||||
connect(this->rpt, &repeaterSetup::getRptAccessMode,
|
||||
[=]() {
|
||||
if(rigCaps.hasAdvancedRptrToneCmds) {
|
||||
issueDelayedCommand(cmdGetRptAccessMode);
|
||||
} else {
|
||||
issueDelayedCommand(cmdGetToneEnabled);
|
||||
issueDelayedCommand(cmdGetTSQLEnabled);
|
||||
}
|
||||
});
|
||||
|
||||
connect(this->rpt, &repeaterSetup::setQuickSplit,
|
||||
[=](const bool &qsEnabled) {
|
||||
issueCmd(cmdSetQuickSplit, qsEnabled);
|
||||
});
|
||||
|
||||
connect(this, SIGNAL(setQuickSplit(bool)), rig, SLOT(setQuickSplit(bool)));
|
||||
|
||||
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)));
|
||||
|
||||
|
@ -422,8 +443,11 @@ 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);});
|
||||
[=](const freqt &transmitFreq) { issueCmdUniquePriority(cmdSetFreq, transmitFreq);});
|
||||
connect(this->rpt, &repeaterSetup::setTransmitMode,
|
||||
[=](const mode_info &transmitMode) { issueCmd(cmdSetMode, transmitMode);});
|
||||
connect(this->rpt, &repeaterSetup::selectVFO,
|
||||
|
@ -457,6 +481,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()));
|
||||
|
||||
|
@ -1645,7 +1670,6 @@ void wfmain::setupUsbControllerDevice()
|
|||
connect(usbControllerDev, SIGNAL(doShuttle(bool, unsigned char)), this, SLOT(doShuttle(bool, unsigned char)));
|
||||
connect(usbControllerDev, SIGNAL(button(const COMMAND*)), this, SLOT(buttonControl(const COMMAND*)));
|
||||
connect(usbControllerDev, SIGNAL(setBand(int)), this, SLOT(setBand(int)));
|
||||
connect(this, SIGNAL(controllerLed(bool, unsigned char)), usbControllerDev, SLOT(ledControl(bool, unsigned char)));
|
||||
connect(usbControllerDev, SIGNAL(newDevice(unsigned char, QVector<BUTTON>*, QVector<COMMAND>*)), shut, SLOT(newDevice(unsigned char, QVector<BUTTON>*, QVector<COMMAND>*)));
|
||||
usbControllerThread->start(QThread::LowestPriority);
|
||||
|
||||
|
@ -1665,7 +1689,6 @@ void wfmain::pttToggle(bool status)
|
|||
}
|
||||
|
||||
emit setPTT(status);
|
||||
emit controllerLed(status, 1);
|
||||
// Start 3 minute timer
|
||||
if (status)
|
||||
pttTimer->start();
|
||||
|
@ -1699,11 +1722,11 @@ void wfmain::buttonControl(const COMMAND* cmd)
|
|||
case cmdGetBandStackReg:
|
||||
issueCmd((cmds)cmd->command, cmd->band);
|
||||
break;
|
||||
case cmdSetBandUp:
|
||||
case cmdSetBandDown:
|
||||
for (size_t i = 0; i < rigCaps.bands.size(); i++) {
|
||||
if (rigCaps.bands[i].band == lastRequestedBand)
|
||||
{
|
||||
if (i>0) {
|
||||
if (i > 0) {
|
||||
issueCmd(cmdGetBandStackReg, rigCaps.bands[i - 1].band);
|
||||
}
|
||||
else {
|
||||
|
@ -1712,7 +1735,7 @@ void wfmain::buttonControl(const COMMAND* cmd)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case cmdSetBandDown:
|
||||
case cmdSetBandUp:
|
||||
for (size_t i = 0; i < rigCaps.bands.size(); i++) {
|
||||
if (rigCaps.bands[i].band == lastRequestedBand)
|
||||
{
|
||||
|
@ -3445,7 +3468,11 @@ void wfmain:: getInitialRigState()
|
|||
{
|
||||
issueDelayedCommand(cmdGetDTCS);
|
||||
}
|
||||
|
||||
if(rigCaps.hasCTCSS || rigCaps.hasDTCS)
|
||||
{
|
||||
issueDelayedCommand(cmdGetRptAccessMode);
|
||||
}
|
||||
|
||||
if(rigCaps.hasAntennaSel)
|
||||
{
|
||||
|
@ -3745,7 +3772,43 @@ void wfmain::doCmd(commandtype cmddata)
|
|||
case cmdSetRptAccessMode:
|
||||
{
|
||||
rptrAccessData_t rd = (*std::static_pointer_cast<rptrAccessData_t>(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<bool>(data));
|
||||
emit setToneEnabled(toneEnabled);
|
||||
break;
|
||||
}
|
||||
case cmdSetTSQLEnabled:
|
||||
{
|
||||
// This command is not aware of which VFO to use
|
||||
bool toneEnabled = (*std::static_pointer_cast<bool>(data));
|
||||
emit setTSQLEnabled(toneEnabled);
|
||||
break;
|
||||
}
|
||||
case cmdSetRptDuplexOffset:
|
||||
|
@ -3754,11 +3817,16 @@ void wfmain::doCmd(commandtype cmddata)
|
|||
emit setRptDuplexOffset(f);
|
||||
break;
|
||||
}
|
||||
case cmdSetQuickSplit:
|
||||
{
|
||||
bool qsEnabled = (*std::static_pointer_cast<bool>(data));
|
||||
emit setQuickSplit(qsEnabled);
|
||||
break;
|
||||
}
|
||||
case cmdSetPTT:
|
||||
{
|
||||
bool pttrequest = (*std::static_pointer_cast<bool>(data));
|
||||
emit setPTT(pttrequest);
|
||||
emit controllerLed(pttrequest, 1);
|
||||
|
||||
ui->meter2Widget->clearMeterOnPTTtoggle();
|
||||
if (pttrequest)
|
||||
|
@ -3774,7 +3842,6 @@ void wfmain::doCmd(commandtype cmddata)
|
|||
{
|
||||
bool pttrequest = !amTransmitting;
|
||||
emit setPTT(pttrequest);
|
||||
emit controllerLed(pttrequest, 1);
|
||||
ui->meter2Widget->clearMeterOnPTTtoggle();
|
||||
if (pttrequest)
|
||||
{
|
||||
|
@ -3950,7 +4017,19 @@ void wfmain::doCmd(cmds cmd)
|
|||
emit getDTCS();
|
||||
break;
|
||||
case cmdGetRptAccessMode:
|
||||
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();
|
||||
|
@ -4450,6 +4529,10 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
|
|||
}
|
||||
haveRigCaps = true;
|
||||
|
||||
if (rigCaps.bands.size() > 0) {
|
||||
lastRequestedBand = rigCaps.bands[0].band;
|
||||
}
|
||||
|
||||
// Added so that server receives rig capabilities.
|
||||
emit sendRigCaps(rigCaps);
|
||||
rpt->setRig(rigCaps);
|
||||
|
@ -5083,6 +5166,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)
|
||||
{
|
||||
|
@ -5191,6 +5285,10 @@ void wfmain::handlePlotClick(QMouseEvent* me)
|
|||
this->mousePressFreq = plot->xAxis->pixelToCoord(cursor);
|
||||
showStatusBarText(QString("Selected %1 MHz").arg(this->mousePressFreq));
|
||||
}
|
||||
else {
|
||||
double x = plot->xAxis->pixelToCoord(cursor);
|
||||
showStatusBarText(QString("Selected %1 MHz").arg(x));
|
||||
}
|
||||
}
|
||||
else if (me->button() == Qt::RightButton)
|
||||
{
|
||||
|
@ -7818,8 +7916,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: ---------- //
|
||||
|
@ -9083,7 +9181,7 @@ void wfmain::resetUsbButtons()
|
|||
usbButtons.append(BUTTON(2, 14, QRect(280, 195, 25, 80), Qt::red, &usbCommands[0], &usbCommands[0]));
|
||||
|
||||
// RC28
|
||||
usbButtons.append(BUTTON(3, 0, QRect(52, 445, 238, 64), Qt::red, &usbCommands[0], &usbCommands[0]));
|
||||
usbButtons.append(BUTTON(3, 0, QRect(52, 445, 238, 64), Qt::red, &usbCommands[1], &usbCommands[2])); // PTT On/OFF
|
||||
usbButtons.append(BUTTON(3, 1, QRect(52, 373, 98, 46), Qt::red, &usbCommands[0], &usbCommands[0]));
|
||||
usbButtons.append(BUTTON(3, 2, QRect(193, 373, 98, 46), Qt::red, &usbCommands[0], &usbCommands[0]));
|
||||
|
||||
|
@ -9112,58 +9210,61 @@ void wfmain::resetUsbButtons()
|
|||
void wfmain::resetUsbCommands()
|
||||
{
|
||||
usbCommands.clear();
|
||||
usbCommands.append(COMMAND(0, "None", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(1, "PTT On", cmdSetPTT, 0x1));
|
||||
usbCommands.append(COMMAND(2, "PTT Off", cmdSetPTT, 0x0));
|
||||
usbCommands.append(COMMAND(3, "PTT Toggle", cmdPTTToggle, 0x0));
|
||||
usbCommands.append(COMMAND(4, "Tune", cmdStartATU, 0x0));
|
||||
usbCommands.append(COMMAND(5, "Step+", cmdSetStepUp, 0x0));
|
||||
usbCommands.append(COMMAND(6, "Step-", cmdSetStepDown, 0x0));
|
||||
usbCommands.append(COMMAND(7, "Span+", cmdSetSpanUp, 0x0));
|
||||
usbCommands.append(COMMAND(8, "Span-", cmdSetSpanDown, 0x0));
|
||||
usbCommands.append(COMMAND(9, "Mode+", cmdSetModeUp, 0x0));
|
||||
usbCommands.append(COMMAND(10, "Mode-", cmdSetModeDown, 0x0));
|
||||
usbCommands.append(COMMAND(11, "Mode LSB", cmdSetMode, modeLSB));
|
||||
usbCommands.append(COMMAND(12, "Mode USB", cmdSetMode, modeUSB));
|
||||
usbCommands.append(COMMAND(13, "Mode LSBD", cmdSetMode, modeLSB_D));
|
||||
usbCommands.append(COMMAND(14, "Mode USBD", cmdSetMode, modeUSB_D));
|
||||
usbCommands.append(COMMAND(15, "Mode CW", cmdSetMode, modeCW));
|
||||
usbCommands.append(COMMAND(16, "Mode CWR", cmdSetMode, modeCW_R));
|
||||
usbCommands.append(COMMAND(17, "Mode FM", cmdSetMode, modeFM));
|
||||
usbCommands.append(COMMAND(18, "Mode AM", cmdSetMode, modeAM));
|
||||
usbCommands.append(COMMAND(19, "Mode RTTY", cmdSetMode, modeRTTY));
|
||||
usbCommands.append(COMMAND(20, "Mode RTTYR", cmdSetMode, modeRTTY_R));
|
||||
usbCommands.append(COMMAND(21, "Mode PSK", cmdSetMode, modePSK));
|
||||
usbCommands.append(COMMAND(22, "Mode PSKR", cmdSetMode, modePSK_R));
|
||||
usbCommands.append(COMMAND(23, "Mode DV", cmdSetMode, modeDV));
|
||||
usbCommands.append(COMMAND(24, "Mode DD", cmdSetMode, modeDD));
|
||||
usbCommands.append(COMMAND(25, "Band+", cmdSetBandUp, 0x0));
|
||||
usbCommands.append(COMMAND(26, "Band-", cmdSetBandDown, 0x0));
|
||||
usbCommands.append(COMMAND(27, "23cm", cmdGetBandStackReg, band23cm));
|
||||
usbCommands.append(COMMAND(28, "70cm", cmdGetBandStackReg, band70cm));
|
||||
usbCommands.append(COMMAND(29, "2m", cmdGetBandStackReg, band2m));
|
||||
usbCommands.append(COMMAND(30, "AIR", cmdGetBandStackReg, bandAir));
|
||||
usbCommands.append(COMMAND(31, "WFM", cmdGetBandStackReg, bandWFM));
|
||||
usbCommands.append(COMMAND(32, "4m", cmdGetBandStackReg, band4m));
|
||||
usbCommands.append(COMMAND(33, "6m", cmdGetBandStackReg, band6m));
|
||||
usbCommands.append(COMMAND(34, "10m", cmdGetBandStackReg, band10m));
|
||||
usbCommands.append(COMMAND(35, "12m", cmdGetBandStackReg, band12m));
|
||||
usbCommands.append(COMMAND(36, "15m", cmdGetBandStackReg, band15m));
|
||||
usbCommands.append(COMMAND(37, "17m", cmdGetBandStackReg, band17m));
|
||||
usbCommands.append(COMMAND(38, "20m", cmdGetBandStackReg, band20m));
|
||||
usbCommands.append(COMMAND(39, "30m", cmdGetBandStackReg, band30m));
|
||||
usbCommands.append(COMMAND(40, "40m", cmdGetBandStackReg, band40m));
|
||||
usbCommands.append(COMMAND(41, "60m", cmdGetBandStackReg, band60m));
|
||||
usbCommands.append(COMMAND(42, "80m", cmdGetBandStackReg, band80m));
|
||||
usbCommands.append(COMMAND(43, "160m", cmdGetBandStackReg, band160m));
|
||||
usbCommands.append(COMMAND(44, "630m", cmdGetBandStackReg, band630m));
|
||||
usbCommands.append(COMMAND(45, "2200m", cmdGetBandStackReg, band2200m));
|
||||
usbCommands.append(COMMAND(46, "GEN", cmdGetBandStackReg, bandGen));
|
||||
usbCommands.append(COMMAND(47, "NR On", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(48, "NR Off", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(49, "NB On", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(50, "NB Off", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(51, "Split On", cmdNone, 0x01));
|
||||
usbCommands.append(COMMAND(52, "Split Off", cmdNone, 0x0));
|
||||
int num = 0;
|
||||
usbCommands.append(COMMAND(num++, "None", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "PTT On", cmdSetPTT, 0x1));
|
||||
usbCommands.append(COMMAND(num++, "PTT Off", cmdSetPTT, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "PTT Toggle", cmdPTTToggle, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Tune", cmdStartATU, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Step+", cmdSetStepUp, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Step-", cmdSetStepDown, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Span+", cmdSetSpanUp, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Span-", cmdSetSpanDown, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Mode+", cmdSetModeUp, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Mode-", cmdSetModeDown, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Mode LSB", cmdSetMode, modeLSB));
|
||||
usbCommands.append(COMMAND(num++, "Mode USB", cmdSetMode, modeUSB));
|
||||
usbCommands.append(COMMAND(num++, "Mode LSBD", cmdSetMode, modeLSB_D));
|
||||
usbCommands.append(COMMAND(num++, "Mode USBD", cmdSetMode, modeUSB_D));
|
||||
usbCommands.append(COMMAND(num++, "Mode CW", cmdSetMode, modeCW));
|
||||
usbCommands.append(COMMAND(num++, "Mode CWR", cmdSetMode, modeCW_R));
|
||||
usbCommands.append(COMMAND(num++, "Mode FM", cmdSetMode, modeFM));
|
||||
usbCommands.append(COMMAND(num++, "Mode AM", cmdSetMode, modeAM));
|
||||
usbCommands.append(COMMAND(num++, "Mode RTTY", cmdSetMode, modeRTTY));
|
||||
usbCommands.append(COMMAND(num++, "Mode RTTYR", cmdSetMode, modeRTTY_R));
|
||||
usbCommands.append(COMMAND(num++, "Mode PSK", cmdSetMode, modePSK));
|
||||
usbCommands.append(COMMAND(num++, "Mode PSKR", cmdSetMode, modePSK_R));
|
||||
usbCommands.append(COMMAND(num++, "Mode DV", cmdSetMode, modeDV));
|
||||
usbCommands.append(COMMAND(num++, "Mode DD", cmdSetMode, modeDD));
|
||||
usbCommands.append(COMMAND(num++, "Band+", cmdSetBandUp, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Band-", cmdSetBandDown, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "23cm", cmdGetBandStackReg, band23cm));
|
||||
usbCommands.append(COMMAND(num++, "70cm", cmdGetBandStackReg, band70cm));
|
||||
usbCommands.append(COMMAND(num++, "2m", cmdGetBandStackReg, band2m));
|
||||
usbCommands.append(COMMAND(num++, "AIR", cmdGetBandStackReg, bandAir));
|
||||
usbCommands.append(COMMAND(num++, "WFM", cmdGetBandStackReg, bandWFM));
|
||||
usbCommands.append(COMMAND(num++, "4m", cmdGetBandStackReg, band4m));
|
||||
usbCommands.append(COMMAND(num++, "6m", cmdGetBandStackReg, band6m));
|
||||
usbCommands.append(COMMAND(num++, "10m", cmdGetBandStackReg, band10m));
|
||||
usbCommands.append(COMMAND(num++, "12m", cmdGetBandStackReg, band12m));
|
||||
usbCommands.append(COMMAND(num++, "15m", cmdGetBandStackReg, band15m));
|
||||
usbCommands.append(COMMAND(num++, "17m", cmdGetBandStackReg, band17m));
|
||||
usbCommands.append(COMMAND(num++, "20m", cmdGetBandStackReg, band20m));
|
||||
usbCommands.append(COMMAND(num++, "30m", cmdGetBandStackReg, band30m));
|
||||
usbCommands.append(COMMAND(num++, "40m", cmdGetBandStackReg, band40m));
|
||||
usbCommands.append(COMMAND(num++, "60m", cmdGetBandStackReg, band60m));
|
||||
usbCommands.append(COMMAND(num++, "80m", cmdGetBandStackReg, band80m));
|
||||
usbCommands.append(COMMAND(num++, "160m", cmdGetBandStackReg, band160m));
|
||||
usbCommands.append(COMMAND(num++, "630m", cmdGetBandStackReg, band630m));
|
||||
usbCommands.append(COMMAND(num++, "2200m", cmdGetBandStackReg, band2200m));
|
||||
usbCommands.append(COMMAND(num++, "GEN", cmdGetBandStackReg, bandGen));
|
||||
usbCommands.append(COMMAND(num++, "NR On", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "NR Off", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "NB On", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "NB Off", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Split On", cmdNone, 0x01));
|
||||
usbCommands.append(COMMAND(num++, "Split Off", cmdNone, 0x0));
|
||||
usbCommands.append(COMMAND(num++, "Swap VFOs", cmdVFOSwap, 0x0));
|
||||
emit sendUsbControllerCommands(&usbCommands);
|
||||
}
|
||||
|
||||
|
|
7
wfmain.h
7
wfmain.h
|
@ -111,6 +111,7 @@ signals:
|
|||
|
||||
// Repeater:
|
||||
void getDuplexMode();
|
||||
void setQuickSplit(bool qsOn);
|
||||
void getTone();
|
||||
void getTSQL();
|
||||
void getDTCS();
|
||||
|
@ -118,6 +119,10 @@ signals:
|
|||
void setRepeaterAccessMode(rptrAccessData_t rd);
|
||||
void setTone(rptrTone_t t);
|
||||
void setTSQL(rptrTone_t t);
|
||||
void getToneEnabled();
|
||||
void getTSQLEnabled();
|
||||
void setToneEnabled(bool enabled);
|
||||
void setTSQLEnabled(bool enabled);
|
||||
void setRptDuplexOffset(freqt f);
|
||||
void getRptDuplexOffset();
|
||||
|
||||
|
@ -218,7 +223,6 @@ signals:
|
|||
void openShuttle();
|
||||
void requestRigState();
|
||||
void stateUpdated();
|
||||
void controllerLed(bool, unsigned char);
|
||||
void sendUsbControllerCommands(QVector<COMMAND>* cmds);
|
||||
void sendUsbControllerButtons(QVector<BUTTON>* buts);
|
||||
void setClusterUdpPort(int port);
|
||||
|
@ -281,6 +285,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
|
||||
|
|
29
wfmain.ui
29
wfmain.ui
|
@ -6,7 +6,7 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1012</width>
|
||||
<width>1042</width>
|
||||
<height>660</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -18,7 +18,7 @@
|
|||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>3</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mainTab">
|
||||
<attribute name="title">
|
||||
|
@ -117,6 +117,19 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="scopeOutOfRangeLabel">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>5</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="customEdgeBtn">
|
||||
<property name="toolTip">
|
||||
|
@ -1808,6 +1821,7 @@
|
|||
<font>
|
||||
<family>DejaVu Sans Mono</family>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -3430,8 +3444,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>790</width>
|
||||
<height>302</height>
|
||||
<width>570</width>
|
||||
<height>224</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
|
@ -5441,6 +5455,7 @@
|
|||
<widget class="QPushButton" name="exitBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -5459,8 +5474,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1012</width>
|
||||
<height>22</height>
|
||||
<width>1042</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
|
@ -5488,7 +5503,7 @@
|
|||
<connections/>
|
||||
<buttongroups>
|
||||
<buttongroup name="buttonGroup"/>
|
||||
<buttongroup name="pollingButtonGroup"/>
|
||||
<buttongroup name="underlayButtonGroup"/>
|
||||
<buttongroup name="pollingButtonGroup"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
|
47
wfserver.pro
47
wfserver.pro
|
@ -20,20 +20,42 @@ 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
|
||||
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_CXXFLAGS += -fvisibility=hidden
|
||||
linux:QMAKE_CXXFLAGS += -fvisibility-inlines-hidden
|
||||
linux:QMAKE_CXXFLAGS += -faligned-new
|
||||
linux:QMAKE_LFLAGS += -O2 -s
|
||||
win32:DESTDIR = wfview-debug
|
||||
win32:LIBS += -L../portaudio/msvc/Win32/Release/ -lportaudio_x86 -lole32
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue