Working manual repeater offset, split, tones, tones on sub vfo, etc!

merge-requests/16/head
Elliott Liggett 2023-01-27 21:42:57 -08:00
rodzic 8903c7cb07
commit 6976120d48
9 zmienionych plików z 227 dodań i 52 usunięć

Wyświetl plik

@ -16,11 +16,9 @@ repeaterSetup::repeaterSetup(QWidget *parent) :
#ifdef QT_DEBUG #ifdef QT_DEBUG
ui->debugBtn->setVisible(true); ui->debugBtn->setVisible(true);
ui->rptReadRigBtn->setVisible(true); ui->rptReadRigBtn->setVisible(true);
ui->rptOffsetBtn->setVisible(true);
#else #else
ui->debugBtn->setVisible(false); ui->debugBtn->setVisible(false);
ui->rptReadRigBtn->setVisible(false); ui->rptReadRigBtn->setVisible(false);
ui->rptOffsetBtn->setVisible(false);
#endif #endif
} }
@ -102,6 +100,14 @@ void repeaterSetup::setRig(rigCapabilities inRig)
ui->setToneSubVFOBtn->setDisabled(true); ui->setToneSubVFOBtn->setDisabled(true);
ui->setSplitRptrToneChk->setDisabled(true); ui->setSplitRptrToneChk->setDisabled(true);
} }
ui->rptAutoBtn->setEnabled(rig.hasRepeaterModes);
ui->rptDupMinusBtn->setEnabled(rig.hasRepeaterModes);
ui->rptDupPlusBtn->setEnabled(rig.hasRepeaterModes);
ui->rptSimplexBtn->setEnabled(rig.hasRepeaterModes);
ui->rptrOffsetEdit->setEnabled(rig.hasRepeaterModes);
ui->rptrOffsetSetBtn->setEnabled(rig.hasRepeaterModes);
ui->setToneSubVFOBtn->setEnabled(rig.hasSpecifyMainSubCmd);
ui->setRptrSubVFOBtn->setEnabled(rig.hasSpecifyMainSubCmd);
} }
void repeaterSetup::populateTones() void repeaterSetup::populateTones()
@ -280,7 +286,7 @@ void repeaterSetup::receiveDuplexMode(duplexMode dm)
switch(dm) switch(dm)
{ {
case dmSplitOff: case dmSplitOff:
ui->splitEnableChk->setChecked(false); //ui->splitEnableChk->setChecked(false);
ui->autoTrackLiveBtn->setChecked(false); ui->autoTrackLiveBtn->setChecked(false);
break; break;
case dmSplitOn: case dmSplitOn:
@ -291,17 +297,17 @@ void repeaterSetup::receiveDuplexMode(duplexMode dm)
break; break;
case dmSimplex: case dmSimplex:
ui->rptSimplexBtn->setChecked(true); ui->rptSimplexBtn->setChecked(true);
ui->splitEnableChk->setChecked(false); //ui->splitEnableChk->setChecked(false);
ui->autoTrackLiveBtn->setChecked(false); ui->autoTrackLiveBtn->setChecked(false);
break; break;
case dmDupPlus: case dmDupPlus:
ui->rptDupPlusBtn->setChecked(true); ui->rptDupPlusBtn->setChecked(true);
ui->splitEnableChk->setChecked(false); //ui->splitEnableChk->setChecked(false);
ui->autoTrackLiveBtn->setChecked(false); ui->autoTrackLiveBtn->setChecked(false);
break; break;
case dmDupMinus: case dmDupMinus:
ui->rptDupMinusBtn->setChecked(true); ui->rptDupMinusBtn->setChecked(true);
ui->splitEnableChk->setChecked(false); //ui->splitEnableChk->setChecked(false);
ui->autoTrackLiveBtn->setChecked(false); ui->autoTrackLiveBtn->setChecked(false);
break; break;
default: default:
@ -395,6 +401,12 @@ void repeaterSetup::handleUpdateCurrentMainMode(mode_info m)
} }
} }
void repeaterSetup::handleRptOffsetFrequency(freqt f)
{
QString offsetstr = QString::number(f.Hz / double(1E6), 'f', 4);
ui->rptrOffsetEdit->setText(offsetstr);
}
void repeaterSetup::handleTransmitStatus(bool amTransmitting) void repeaterSetup::handleTransmitStatus(bool amTransmitting)
{ {
this->amTransmitting = amTransmitting; this->amTransmitting = amTransmitting;
@ -402,15 +414,38 @@ void repeaterSetup::handleTransmitStatus(bool amTransmitting)
void repeaterSetup::showEvent(QShowEvent *event) void repeaterSetup::showEvent(QShowEvent *event)
{ {
emit getDuplexMode();
emit getSplitModeEnabled(); emit getSplitModeEnabled();
if(rig.hasRepeaterModes)
emit getRptDuplexOffset();
(void)event; (void)event;
} }
void repeaterSetup::on_splitEnableChk_clicked()
{
emit setDuplexMode(dmSplitOn);
if(ui->autoTrackLiveBtn->isChecked())
{
ui->autoTrackLiveBtn->setChecked(false);
}
}
void repeaterSetup::on_splitOffBtn_clicked()
{
emit setDuplexMode(dmSplitOff);
}
void repeaterSetup::on_rptSimplexBtn_clicked() void repeaterSetup::on_rptSimplexBtn_clicked()
{ {
// Simplex // Simplex
emit setDuplexMode(dmDupAutoOff); emit setDuplexMode(dmSplitOff);
emit setDuplexMode(dmSimplex); if(rig.hasRepeaterModes)
{
emit setDuplexMode(dmDupAutoOff);
emit setDuplexMode(dmSimplex);
}
} }
void repeaterSetup::on_rptDupPlusBtn_clicked() void repeaterSetup::on_rptDupPlusBtn_clicked()
@ -557,27 +592,13 @@ void repeaterSetup::on_debugBtn_clicked()
emit getRptAccessMode(); emit getRptAccessMode();
} }
void repeaterSetup::on_splitOffsetSetBtn_clicked() //void repeaterSetup::on_splitOffsetSetBtn_clicked()
{ //{
freqt txFreq; // freqt txFreq;
bool ok = true; // bool ok = true;
txFreq.Hz = ui->splitTransmitFreqEdit->text().toDouble(&ok) * 1E6; // txFreq.Hz = ui->splitTransmitFreqEdit->text().toDouble(&ok) * 1E6;
emit setTransmitFrequency(txFreq); // emit setTransmitFrequency(txFreq);
} //}
void repeaterSetup::on_splitEnableChk_clicked(bool enabled)
{
if(enabled)
{
emit setDuplexMode(dmSplitOn);
} else {
emit setDuplexMode(dmSplitOff);
}
if(ui->autoTrackLiveBtn->isChecked())
{
ui->autoTrackLiveBtn->setChecked(false);
}
}
quint64 repeaterSetup::getFreqHzFromKHzString(QString khz) quint64 repeaterSetup::getFreqHzFromKHzString(QString khz)
{ {
@ -623,10 +644,16 @@ quint64 repeaterSetup::getFreqHzFromMHzString(QString MHz)
// We want the right 4xx 3 characters. // We want the right 4xx 3 characters.
QString KHz = MHz.right(MHz.length() - decimalPtIndex - 1); QString KHz = MHz.right(MHz.length() - decimalPtIndex - 1);
MHz.chop(MHz.length() - decimalPtIndex); MHz.chop(MHz.length() - decimalPtIndex);
if(KHz.length() != 6)
{
QString zeros = QString("000000");
zeros.chop(KHz.length());
KHz.append(zeros);
}
//qInfo() << "KHz string: " << KHz;
fhz = MHz.toUInt(&ok) * 1E6; if(!ok) goto handleError; fhz = MHz.toUInt(&ok) * 1E6; if(!ok) goto handleError;
fhz += KHz.toUInt(&ok) * 1E3; if(!ok) goto handleError; fhz += KHz.toUInt(&ok) * 1; if(!ok) goto handleError;
//qInfo() << "Fhz: " << fhz;
} else { } else {
// Frequency was already MHz (unlikely but what can we do?) // Frequency was already MHz (unlikely but what can we do?)
fhz = MHz.toUInt(&ok) * 1E6; if(!ok) goto handleError; fhz = MHz.toUInt(&ok) * 1E6; if(!ok) goto handleError;
@ -736,10 +763,40 @@ void repeaterSetup::on_swapMSBtn_clicked()
void repeaterSetup::on_setToneSubVFOBtn_clicked() void repeaterSetup::on_setToneSubVFOBtn_clicked()
{ {
// Perhaps not needed
// Set the secondary VFO to the selected tone
// TODO: DTCS
rptrTone_t rt;
rt.tone = (quint16)ui->rptToneCombo->currentData().toUInt();
rt.useSecondaryVFO = true;
emit setTone(rt);
} }
void repeaterSetup::on_setRptrSubVFOBtn_clicked() void repeaterSetup::on_setRptrSubVFOBtn_clicked()
{ {
// Perhaps not needed
// Set the secondary VFO to the selected repeater mode
rptrAccessData_t rd;
rd.useSecondaryVFO = true;
if(ui->toneTone->isChecked())
rd.accessMode=ratrTN;
if(ui->toneNone->isChecked())
rd.accessMode=ratrNN;
if(ui->toneTSQL->isChecked())
rd.accessMode=ratrTT;
if(ui->toneDTCS->isChecked())
rd.accessMode=ratrDD;
emit setRptAccessMode(rd);
}
void repeaterSetup::on_rptrOffsetSetBtn_clicked()
{
freqt f;
f.Hz = getFreqHzFromMHzString(ui->rptrOffsetEdit->text());
if(f.Hz != 0)
{
emit setRptDuplexOffset(f);
}
} }

Wyświetl plik

@ -30,8 +30,9 @@ signals:
void getTSQL(); void getTSQL();
void getDTCS(); void getDTCS();
void setRptAccessMode(rptrAccessData_t rd); void setRptAccessMode(rptrAccessData_t rd);
void getRptAccessMode(); void getRptAccessMode();
void setRptDuplexOffset(freqt f);
void getRptDuplexOffset();
// Split: // Split:
void getSplitModeEnabled(); void getSplitModeEnabled();
void getTransmitFrequency(); void getTransmitFrequency();
@ -56,6 +57,7 @@ public slots:
void handleUpdateCurrentMainFrequency(freqt mainfreq); void handleUpdateCurrentMainFrequency(freqt mainfreq);
void handleUpdateCurrentMainMode(mode_info m); void handleUpdateCurrentMainMode(mode_info m);
void handleTransmitStatus(bool amTransmitting); void handleTransmitStatus(bool amTransmitting);
void handleRptOffsetFrequency(freqt f);
private slots: private slots:
void showEvent(QShowEvent *event); void showEvent(QShowEvent *event);
@ -71,8 +73,6 @@ private slots:
void on_toneTone_clicked(); void on_toneTone_clicked();
void on_toneTSQL_clicked(); void on_toneTSQL_clicked();
void on_toneDTCS_clicked(); void on_toneDTCS_clicked();
void on_splitOffsetSetBtn_clicked();
void on_splitEnableChk_clicked(bool enabled);
void on_splitPlusButton_clicked(); void on_splitPlusButton_clicked();
void on_splitMinusBtn_clicked(); void on_splitMinusBtn_clicked();
@ -98,6 +98,12 @@ private slots:
void on_setRptrSubVFOBtn_clicked(); void on_setRptrSubVFOBtn_clicked();
void on_rptrOffsetSetBtn_clicked();
void on_splitOffBtn_clicked();
void on_splitEnableChk_clicked();
private: private:
Ui::repeaterSetup *ui; Ui::repeaterSetup *ui;
freqt currentMainFrequency; freqt currentMainFrequency;

Wyświetl plik

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1198</width> <width>1230</width>
<height>238</height> <height>267</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -116,6 +116,27 @@
</attribute> </attribute>
</widget> </widget>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Offset (MHz):</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="rptrOffsetEdit"/>
</item>
<item>
<widget class="QPushButton" name="rptrOffsetSetBtn">
<property name="text">
<string>Set</string>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -128,23 +149,36 @@
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_8"> <layout class="QHBoxLayout" name="horizontalLayout_8">
<item> <item>
<widget class="QCheckBox" name="splitEnableChk"> <widget class="QRadioButton" name="splitEnableChk">
<property name="text"> <property name="text">
<string>Split Enable</string> <string>Split On</string>
</property> </property>
<attribute name="buttonGroup">
<string notr="true">rptDuplexBtns</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="splitOffBtn">
<property name="text">
<string>Split Off</string>
</property>
<attribute name="buttonGroup">
<string notr="true">rptDuplexBtns</string>
</attribute>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="autoTrackLiveBtn"> <widget class="QCheckBox" name="autoTrackLiveBtn">
<property name="text"> <property name="text">
<string>Auto Track Live</string> <string>AutoTrack</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="setSplitRptrToneChk"> <widget class="QCheckBox" name="setSplitRptrToneChk">
<property name="text"> <property name="text">
<string>Set Repeater Tone</string> <string>Set Rpt Tone</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -189,13 +223,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="rptOffsetBtn">
<property name="text">
<string>RPT</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item> <item>

Wyświetl plik

@ -1192,6 +1192,27 @@ void rigCommander::setRptAccessMode(rptrAccessData_t rd)
prepDataAndSend(payload); prepDataAndSend(payload);
} }
void rigCommander::setRptDuplexOffset(freqt f)
{
QByteArray payload;
payload.setRawData("\x0D", 1);
// get f, chop to 10 MHz
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);
//qInfo(logRig()).noquote().nospace() << g;
prepDataAndSend(payload);
}
void rigCommander::getRptDuplexOffset()
{
QByteArray payload;
payload.setRawData("\x0C", 1);
prepDataAndSend(payload);
}
void rigCommander::setIPP(bool enabled) void rigCommander::setIPP(bool enabled)
{ {
QByteArray payload; QByteArray payload;
@ -1526,6 +1547,10 @@ void rigCommander::parseCommand()
//qInfo(logRig()) << "Have mode data"; //qInfo(logRig()) << "Have mode data";
this->parseMode(); this->parseMode();
break; break;
case '\x0C':
qDebug(logRig) << "Have 0x0C reply";
emit haveRptOffsetFrequency(parseFrequencyRptOffset(payloadIn));
break;
case '\x0F': case '\x0F':
emit haveDuplexMode((duplexMode)(unsigned char)payloadIn[1]); emit haveDuplexMode((duplexMode)(unsigned char)payloadIn[1]);
state.set(DUPLEX, (duplexMode)(unsigned char)payloadIn[1], false); state.set(DUPLEX, (duplexMode)(unsigned char)payloadIn[1], false);
@ -3467,6 +3492,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasDV = true; rigCaps.hasDV = true;
rigCaps.hasCTCSS = true; rigCaps.hasCTCSS = true;
rigCaps.hasDTCS = true; rigCaps.hasDTCS = true;
rigCaps.hasRepeaterModes = true;
rigCaps.hasTBPF = true; rigCaps.hasTBPF = true;
rigCaps.attenuators.push_back('\x10'); rigCaps.attenuators.push_back('\x10');
rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x01');
@ -3494,6 +3520,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasDV = false; rigCaps.hasDV = false;
rigCaps.hasCTCSS = true; rigCaps.hasCTCSS = true;
rigCaps.hasDTCS = true; rigCaps.hasDTCS = true;
rigCaps.hasRepeaterModes = true;
rigCaps.hasATU = false; rigCaps.hasATU = false;
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20', '\x30'}); rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20', '\x30'});
rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x01');
@ -3623,6 +3650,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasATU = true; rigCaps.hasATU = true;
rigCaps.hasCTCSS = true; rigCaps.hasCTCSS = true;
rigCaps.hasDTCS = true; rigCaps.hasDTCS = true;
rigCaps.hasRepeaterModes = true;
rigCaps.hasTBPF = true; rigCaps.hasTBPF = true;
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20'}); rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20'});
rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x01');
@ -3706,6 +3734,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasATU = true; rigCaps.hasATU = true;
rigCaps.hasCTCSS = true; rigCaps.hasCTCSS = true;
rigCaps.hasDTCS = true; rigCaps.hasDTCS = true;
rigCaps.hasRepeaterModes = true;
rigCaps.hasTBPF = true; rigCaps.hasTBPF = true;
rigCaps.attenuators.push_back('\x12'); rigCaps.attenuators.push_back('\x12');
rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x01');
@ -3930,6 +3959,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasIFShift = true; rigCaps.hasIFShift = true;
rigCaps.hasCTCSS = true; rigCaps.hasCTCSS = true;
rigCaps.hasDTCS = true; rigCaps.hasDTCS = true;
rigCaps.hasRepeaterModes = true;
rigCaps.hasAntennaSel = true; rigCaps.hasAntennaSel = true;
rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02'); rigCaps.preamps.push_back('\x02');
@ -4050,6 +4080,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasATU = true; rigCaps.hasATU = true;
rigCaps.hasDV = true; rigCaps.hasDV = true;
rigCaps.hasTBPF = true; rigCaps.hasTBPF = true;
rigCaps.hasRepeaterModes = true;
rigCaps.preamps.push_back('\x01'); rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02'); rigCaps.preamps.push_back('\x02');
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x20' }); rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x20' });
@ -4405,6 +4436,26 @@ void rigCommander::parseFrequency()
emit haveFrequency(freq); emit haveFrequency(freq);
} }
freqt rigCommander::parseFrequencyRptOffset(QByteArray data)
{
// DATA: 0c 00 60 00 fd
// INDEX: 00 01 02 03 04
// 00.600.0 MHz (600.0 KHz)
freqt f;
f.Hz = 0;
f.Hz += (data[1] & 0x0f) * 1E6; // 1 MHz
f.Hz += ((data[1] & 0xf0) >> 4) * 1E6 * 10; // 10 MHz
f.Hz += (data[2] & 0x0f) * 10E3; // 10 KHz
f.Hz += ((data[2] & 0xf0) >> 4) * 100E3; // 100 KHz
f.Hz += (data[3] & 0x0f) * 100; // 100 Hz
f.Hz += ((data[3] & 0xf0) >> 4) * 1000; // 1 KHz
return f;
}
freqt rigCommander::parseFrequency(QByteArray data, unsigned char lastPosition) freqt rigCommander::parseFrequency(QByteArray data, unsigned char lastPosition)
{ {
// process payloadIn, which is stripped. // process payloadIn, which is stripped.

Wyświetl plik

@ -146,6 +146,8 @@ public slots:
void setRptAccessMode(rptAccessTxRx ratr); void setRptAccessMode(rptAccessTxRx ratr);
void setRptAccessMode(rptrAccessData_t ratr); void setRptAccessMode(rptrAccessData_t ratr);
void getRptAccessMode(); void getRptAccessMode();
void setRptDuplexOffset(freqt f);
void getRptDuplexOffset();
// Get Levels: // Get Levels:
void getLevels(); // all supported levels void getLevels(); // all supported levels
@ -309,6 +311,7 @@ signals:
void haveTone(quint16 tone); void haveTone(quint16 tone);
void haveTSQL(quint16 tsql); void haveTSQL(quint16 tsql);
void haveDTCS(quint16 dcscode, bool tinv, bool rinv); void haveDTCS(quint16 dcscode, bool tinv, bool rinv);
void haveRptOffsetFrequency(freqt f);
// Levels: // Levels:
void haveRfGain(unsigned char level); void haveRfGain(unsigned char level);
@ -378,6 +381,8 @@ private:
QByteArray bcdEncodeInt(unsigned int); QByteArray bcdEncodeInt(unsigned int);
void parseFrequency(); void parseFrequency();
freqt parseFrequency(QByteArray data, unsigned char lastPosition); // supply index where Mhz is found freqt parseFrequency(QByteArray data, unsigned char lastPosition); // supply index where Mhz is found
freqt parseFrequencyRptOffset(QByteArray data);
QByteArray makeFreqPayloadRptOffset(freqt freq);
QByteArray makeFreqPayload(double frequency); QByteArray makeFreqPayload(double frequency);
QByteArray makeFreqPayload(freqt freq); QByteArray makeFreqPayload(freqt freq);
QByteArray encodeTone(quint16 tone, bool tinv, bool rinv); QByteArray encodeTone(quint16 tone, bool tinv, bool rinv);

Wyświetl plik

@ -134,6 +134,7 @@ struct rigCapabilities {
bool hasCTCSS; bool hasCTCSS;
bool hasDTCS; bool hasDTCS;
bool hasRepeaterModes = false;
bool hasTransmit; bool hasTransmit;
bool hasPTTCommand; bool hasPTTCommand;

Wyświetl plik

@ -381,9 +381,12 @@ void wfmain::rigConnections()
connect(rig, SIGNAL(havePassband(quint16)), this, SLOT(receivePassband(quint16))); connect(rig, SIGNAL(havePassband(quint16)), this, SLOT(receivePassband(quint16)));
connect(rig, SIGNAL(haveCwPitch(unsigned char)), this, SLOT(receiveCwPitch(unsigned char))); connect(rig, SIGNAL(haveCwPitch(unsigned char)), this, SLOT(receiveCwPitch(unsigned char)));
// Repeater, duplex, and split:
connect(rpt, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode())); connect(rpt, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode()));
connect(rpt, SIGNAL(setDuplexMode(duplexMode)), rig, SLOT(setDuplexMode(duplexMode))); connect(rpt, SIGNAL(setDuplexMode(duplexMode)), rig, SLOT(setDuplexMode(duplexMode)));
connect(rig, SIGNAL(haveDuplexMode(duplexMode)), rpt, SLOT(receiveDuplexMode(duplexMode))); 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)));
connect(rpt, SIGNAL(getTone()), rig, SLOT(getTone())); connect(rpt, SIGNAL(getTone()), rig, SLOT(getTone()));
connect(rpt, SIGNAL(getTSQL()), rig, SLOT(getTSQL())); connect(rpt, SIGNAL(getTSQL()), rig, SLOT(getTSQL()));
connect(rpt, SIGNAL(getDTCS()), rig, SLOT(getDTCS())); connect(rpt, SIGNAL(getDTCS()), rig, SLOT(getDTCS()));
@ -420,8 +423,14 @@ void wfmain::rigConnections()
[=]() { issueDelayedCommand(cmdVFOEqualMS);}); [=]() { issueDelayedCommand(cmdVFOEqualMS);});
connect(this->rpt, &repeaterSetup::swapVFOs, connect(this->rpt, &repeaterSetup::swapVFOs,
[=]() { issueDelayedCommand(cmdVFOSwap);}); [=]() { issueDelayedCommand(cmdVFOSwap);});
connect(this->rpt, &repeaterSetup::setRptDuplexOffset,
[=](const freqt &fOffset) { issueCmd(cmdSetRptDuplexOffset, fOffset);});
connect(this->rpt, &repeaterSetup::getRptDuplexOffset,
[=]() { issueDelayedCommand(cmdGetRptDuplexOffset);});
connect(this, SIGNAL(setRptDuplexOffset(freqt)), rig, SLOT(setRptDuplexOffset(freqt)));
connect(this, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode())); connect(this, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode()));
connect(this, SIGNAL(getPassband()), rig, SLOT(getPassband())); connect(this, SIGNAL(getPassband()), rig, SLOT(getPassband()));
connect(this, SIGNAL(setPassband(quint16)), rig, SLOT(setPassband(quint16))); connect(this, SIGNAL(setPassband(quint16)), rig, SLOT(setPassband(quint16)));
connect(this, SIGNAL(getCwPitch()), rig, SLOT(getCwPitch())); connect(this, SIGNAL(getCwPitch()), rig, SLOT(getCwPitch()));
@ -3713,6 +3722,12 @@ void wfmain::doCmd(commandtype cmddata)
emit setRepeaterAccessMode(rd); emit setRepeaterAccessMode(rd);
break; break;
} }
case cmdSetRptDuplexOffset:
{
freqt f = (*std::static_pointer_cast<freqt>(data));
emit setRptDuplexOffset(f);
break;
}
case cmdSetPTT: case cmdSetPTT:
{ {
bool pttrequest = (*std::static_pointer_cast<bool>(data)); bool pttrequest = (*std::static_pointer_cast<bool>(data));
@ -3877,6 +3892,9 @@ void wfmain::doCmd(cmds cmd)
case cmdGetDuplexMode: case cmdGetDuplexMode:
emit getDuplexMode(); emit getDuplexMode();
break; break;
case cmdGetRptDuplexOffset:
emit getRptDuplexOffset();
break;
case cmdGetPassband: case cmdGetPassband:
emit getPassband(); emit getPassband();
break; break;
@ -4062,7 +4080,6 @@ void wfmain::sendRadioCommandLoop()
} }
} else if ((!rapidPollCmdQueue.empty()) && rapidPollCmdQueueEnabled) } else if ((!rapidPollCmdQueue.empty()) && rapidPollCmdQueueEnabled)
{ {
qDebug(logSystem()) << "Running rapid poll command.";
int nrCmds = (int)rapidPollCmdQueue.size(); int nrCmds = (int)rapidPollCmdQueue.size();
cmds rCmd = rapidPollCmdQueue[(rapidCmdNum++)%nrCmds]; cmds rCmd = rapidPollCmdQueue[(rapidCmdNum++)%nrCmds];
doCmd(rCmd); doCmd(rCmd);
@ -6894,7 +6911,15 @@ void wfmain::on_serialDeviceListCombo_textActivated(const QString &arg1)
void wfmain::on_rptSetupBtn_clicked() void wfmain::on_rptSetupBtn_clicked()
{ {
if(rpt->isMinimized())
{
rpt->raise();
rpt->activateWindow();
return;
}
rpt->show(); rpt->show();
rpt->raise();
rpt->activateWindow();
} }
void wfmain::on_attSelCombo_activated(int index) void wfmain::on_attSelCombo_activated(int index)
@ -7666,7 +7691,8 @@ void wfmain::on_underlayAverageBuffer_toggled(bool checked)
void wfmain::on_debugBtn_clicked() void wfmain::on_debugBtn_clicked()
{ {
qInfo(logSystem()) << "Debug button pressed."; qInfo(logSystem()) << "Debug button pressed.";
cw->show(); qDebug(logSystem()) << "Query for repeater duplex offset 0x0C headed out";
issueDelayedCommand(cmdGetRptDuplexOffset);
} }
// ---------- color helper functions: ---------- // // ---------- color helper functions: ---------- //

Wyświetl plik

@ -118,6 +118,8 @@ signals:
void setRepeaterAccessMode(rptrAccessData_t rd); void setRepeaterAccessMode(rptrAccessData_t rd);
void setTone(rptrTone_t t); void setTone(rptrTone_t t);
void setTSQL(rptrTone_t t); void setTSQL(rptrTone_t t);
void setRptDuplexOffset(freqt f);
void getRptDuplexOffset();
// Level get: // Level get:
void getLevels(); // get all levels void getLevels(); // get all levels

Wyświetl plik

@ -153,7 +153,7 @@ enum cmds {
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed, cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed,
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter, cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter,
cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter, cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter,
cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdSetTone, cmdSetTSQL, cmdSetRptAccessMode, cmdSetRptDuplexOffset, cmdGetRptDuplexOffset,
cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS, cmdSelVFO, cmdVFOSwap, cmdVFOEqualAB, cmdVFOEqualMS,
cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna,
cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW, cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW,