kopia lustrzana https://gitlab.com/eliggett/wfview
Merge branch 'master' into pbt-fixes
commit
5dc9107f00
110
CHANGELOG
110
CHANGELOG
|
@ -1,3 +1,107 @@
|
||||||
|
commit fe36ff1ac73dee5b14df534b50454587c95fe4bd
|
||||||
|
Merge: 13f06e1 4950127
|
||||||
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
|
Date: Thu Jan 26 07:33:00 2023 +0100
|
||||||
|
|
||||||
|
Merge branch 'pbt-fixes'
|
||||||
|
|
||||||
|
commit 49501273d02e02df7b2b1ca58be7a576daa1a19f
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Wed Jan 25 21:37:12 2023 +0000
|
||||||
|
|
||||||
|
Fix for shuttle resource files
|
||||||
|
|
||||||
|
commit ea46d6c625e02c4869bd5fcd42c191f111a590f7
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Wed Jan 25 21:22:06 2023 +0000
|
||||||
|
|
||||||
|
Add math.h for cwsender
|
||||||
|
|
||||||
|
commit 13f06e1dd7596a83f1686be7e632f62121574036
|
||||||
|
Merge: 6df7099 ded6bd1
|
||||||
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
|
Date: Wed Jan 25 22:17:23 2023 +0100
|
||||||
|
|
||||||
|
Merge branch 'pbt-fixes'
|
||||||
|
|
||||||
|
commit ded6bd1adeba5790b1457fa1afcae651f322f045
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Wed Jan 25 18:01:24 2023 +0000
|
||||||
|
|
||||||
|
Add CW Speed spinbox to CW sender
|
||||||
|
|
||||||
|
commit 4b40e20d9825e66c7b7cd77371d3f1e8801f06ae
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Wed Jan 25 15:39:01 2023 +0000
|
||||||
|
|
||||||
|
Remove some debugging
|
||||||
|
|
||||||
|
commit 6df7099cb3ac8d48fdbff501cc0c1a7e2b236341
|
||||||
|
Merge: bc0f9f0 5483732
|
||||||
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
|
Date: Wed Jan 25 13:17:03 2023 +0100
|
||||||
|
|
||||||
|
Merge branch 'pbt-fixes'
|
||||||
|
|
||||||
|
commit 54837327663bbb1b0aff5bb8cde45e1ebc4d63ee
|
||||||
|
Merge: 8b8668a 7f97625
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Wed Jan 25 11:42:13 2023 +0000
|
||||||
|
|
||||||
|
Merge branch 'master' into pbt-fixes
|
||||||
|
|
||||||
|
commit 8b8668a6deacb528cf9e0bf7311465966abc1614
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Wed Jan 25 11:41:50 2023 +0000
|
||||||
|
|
||||||
|
Finally PBT works in all modes/filter widths/cw pitch settings.
|
||||||
|
|
||||||
|
commit bc0f9f01c7333285214d3b847517625de2a63899
|
||||||
|
Merge: 85e38d9 be0aee6
|
||||||
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
|
Date: Wed Jan 25 09:16:36 2023 +0100
|
||||||
|
|
||||||
|
Merge branch 'morecontrols'
|
||||||
|
|
||||||
|
commit be0aee6183286a73604f5eba7c4b2d57b530d383
|
||||||
|
Author: Elliott Liggett <kilocharlie8@gmail.com>
|
||||||
|
Date: Wed Jan 25 00:15:20 2023 -0800
|
||||||
|
|
||||||
|
Split mode is working, can also live-sync frequency and mode.
|
||||||
|
|
||||||
|
commit 85e38d940f2874bbcbdcbbb619203732b0f1c146
|
||||||
|
Merge: 7f97625 a1d3f93
|
||||||
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
|
Date: Wed Jan 25 07:47:41 2023 +0100
|
||||||
|
|
||||||
|
Merge branch 'pbt-fixes'
|
||||||
|
|
||||||
|
commit 4fea16c356189b06caad2adb2e5399dbbcc01945
|
||||||
|
Author: Elliott Liggett <kilocharlie8@gmail.com>
|
||||||
|
Date: Tue Jan 24 16:35:46 2023 -0800
|
||||||
|
|
||||||
|
Refined split interface controls. Offset is KHz, automatic tracking mode
|
||||||
|
added.
|
||||||
|
|
||||||
|
commit ae64677c4213c0e0f2789a4388f5f2120c1574ff
|
||||||
|
Merge: 0a7f6b0 7f97625
|
||||||
|
Author: Elliott Liggett <kilocharlie8@gmail.com>
|
||||||
|
Date: Tue Jan 24 15:17:17 2023 -0800
|
||||||
|
|
||||||
|
Merge branch 'master' into morecontrols
|
||||||
|
|
||||||
|
commit a1d3f93dad7141a54a4ffd5585eaad0ee7774591
|
||||||
|
Author: Phil Taylor <phil@m0vse.uk>
|
||||||
|
Date: Tue Jan 24 20:12:23 2023 +0000
|
||||||
|
|
||||||
|
PBT should now display correctly in ALL modes!
|
||||||
|
|
||||||
|
commit 7f97625e38eec48affcb4abe174802636a7b07ad
|
||||||
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
|
Date: Tue Jan 24 19:49:43 2023 +0100
|
||||||
|
|
||||||
|
modified CHANGELOG
|
||||||
|
|
||||||
commit d53c9b028e1e962b80334bbeaac794d4572d9939
|
commit d53c9b028e1e962b80334bbeaac794d4572d9939
|
||||||
Author: Elliott Liggett <kilocharlie8@gmail.com>
|
Author: Elliott Liggett <kilocharlie8@gmail.com>
|
||||||
Date: Tue Jan 24 10:37:26 2023 -0800
|
Date: Tue Jan 24 10:37:26 2023 -0800
|
||||||
|
@ -5,6 +109,12 @@ Date: Tue Jan 24 10:37:26 2023 -0800
|
||||||
Added a rapidPollCmdQueue for things we need to poll rapidly on not-s-
|
Added a rapidPollCmdQueue for things we need to poll rapidly on not-s-
|
||||||
meter-intervals. Moved command types to wfviewtypes.h.
|
meter-intervals. Moved command types to wfviewtypes.h.
|
||||||
|
|
||||||
|
commit 0a7f6b0b6547087841bd0f5da1f962250cdda49c
|
||||||
|
Author: Elliott Liggett <kilocharlie8@gmail.com>
|
||||||
|
Date: Tue Jan 24 09:21:09 2023 -0800
|
||||||
|
|
||||||
|
Started work on the UI for a split control interface.
|
||||||
|
|
||||||
commit 2df82d4f922fcebd256816d41839977840d08e5b
|
commit 2df82d4f922fcebd256816d41839977840d08e5b
|
||||||
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||||
Date: Tue Jan 24 17:22:34 2023 +0100
|
Date: Tue Jan 24 17:22:34 2023 +0100
|
||||||
|
|
|
@ -4,13 +4,6 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "wfviewtypes.h"
|
#include "wfviewtypes.h"
|
||||||
|
|
||||||
struct mode_info {
|
|
||||||
mode_kind mk;
|
|
||||||
unsigned char reg;
|
|
||||||
unsigned char filter;
|
|
||||||
QString name;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct preset_kind {
|
struct preset_kind {
|
||||||
// QString name;
|
// QString name;
|
||||||
// QString comment;
|
// QString comment;
|
||||||
|
|
|
@ -16,9 +16,11 @@ 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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -235,21 +237,39 @@ void repeaterSetup::populateDTCS()
|
||||||
void repeaterSetup::receiveDuplexMode(duplexMode dm)
|
void repeaterSetup::receiveDuplexMode(duplexMode dm)
|
||||||
{
|
{
|
||||||
currentdm = dm;
|
currentdm = dm;
|
||||||
|
ui->splitEnableChk->blockSignals(true);
|
||||||
switch(dm)
|
switch(dm)
|
||||||
{
|
{
|
||||||
case dmSimplex:
|
|
||||||
case dmSplitOff:
|
case dmSplitOff:
|
||||||
|
ui->splitEnableChk->setChecked(false);
|
||||||
|
ui->autoTrackLiveBtn->setChecked(false);
|
||||||
|
break;
|
||||||
|
case dmSplitOn:
|
||||||
|
ui->splitEnableChk->setChecked(true);
|
||||||
|
ui->rptSimplexBtn->setChecked(false);
|
||||||
|
ui->rptDupPlusBtn->setChecked(false);
|
||||||
|
ui->rptDupMinusBtn->setChecked(false);
|
||||||
|
break;
|
||||||
|
case dmSimplex:
|
||||||
ui->rptSimplexBtn->setChecked(true);
|
ui->rptSimplexBtn->setChecked(true);
|
||||||
|
ui->splitEnableChk->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->autoTrackLiveBtn->setChecked(false);
|
||||||
break;
|
break;
|
||||||
case dmDupMinus:
|
case dmDupMinus:
|
||||||
ui->rptDupMinusBtn->setChecked(true);
|
ui->rptDupMinusBtn->setChecked(true);
|
||||||
|
ui->splitEnableChk->setChecked(false);
|
||||||
|
ui->autoTrackLiveBtn->setChecked(false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
qDebug() << "Did not understand duplex/split/repeater value of " << (unsigned char)dm;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
ui->splitEnableChk->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void repeaterSetup::handleRptAccessMode(rptAccessTxRx tmode)
|
void repeaterSetup::handleRptAccessMode(rptAccessTxRx tmode)
|
||||||
|
@ -296,6 +316,52 @@ void repeaterSetup::handleDTCS(quint16 dcode, bool tinv, bool rinv)
|
||||||
ui->rptDTCSInvertRx->setChecked(rinv);
|
ui->rptDTCSInvertRx->setChecked(rinv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::handleUpdateCurrentMainFrequency(freqt mainfreq)
|
||||||
|
{
|
||||||
|
if(amTransmitting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(ui->autoTrackLiveBtn->isChecked() && !ui->splitOffsetEdit->text().isEmpty())
|
||||||
|
{
|
||||||
|
if(currentMainFrequency.Hz != mainfreq.Hz)
|
||||||
|
{
|
||||||
|
this->currentMainFrequency = mainfreq;
|
||||||
|
if(usedPlusSplit)
|
||||||
|
{
|
||||||
|
on_splitPlusButton_clicked();
|
||||||
|
} else {
|
||||||
|
on_splitMinusBtn_clicked();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this->currentMainFrequency = mainfreq;
|
||||||
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::handleUpdateCurrentMainMode(mode_info m)
|
||||||
|
{
|
||||||
|
// Used to set the secondary VFO to the same mode
|
||||||
|
// (generally FM)
|
||||||
|
// NB: We don't accept values during transmit as they
|
||||||
|
// may represent the inactive VFO
|
||||||
|
if(!amTransmitting)
|
||||||
|
{
|
||||||
|
this->currentModeMain = m;
|
||||||
|
this->modeTransmitVFO = m;
|
||||||
|
this->modeTransmitVFO.VFO = inactiveVFO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::handleTransmitStatus(bool amTransmitting)
|
||||||
|
{
|
||||||
|
this->amTransmitting = amTransmitting;
|
||||||
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::showEvent(QShowEvent *event)
|
||||||
|
{
|
||||||
|
emit getSplitModeEnabled();
|
||||||
|
(void)event;
|
||||||
|
}
|
||||||
|
|
||||||
void repeaterSetup::on_rptSimplexBtn_clicked()
|
void repeaterSetup::on_rptSimplexBtn_clicked()
|
||||||
{
|
{
|
||||||
// Simplex
|
// Simplex
|
||||||
|
@ -395,3 +461,136 @@ void repeaterSetup::on_debugBtn_clicked()
|
||||||
//emit getDTCS();
|
//emit getDTCS();
|
||||||
emit getRptAccessMode();
|
emit getRptAccessMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::on_splitOffsetSetBtn_clicked()
|
||||||
|
{
|
||||||
|
freqt txFreq;
|
||||||
|
bool ok = true;
|
||||||
|
txFreq.Hz = ui->splitTransmitFreqEdit->text().toDouble(&ok) * 1E6;
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
// This function takes a string containing a number in KHz,
|
||||||
|
// and creates an accurate quint64 in Hz.
|
||||||
|
quint64 fhz = 0;
|
||||||
|
bool ok = true;
|
||||||
|
if(khz.isEmpty())
|
||||||
|
{
|
||||||
|
qWarning() << "KHz offset was empty!";
|
||||||
|
return fhz;
|
||||||
|
}
|
||||||
|
if(khz.contains("."))
|
||||||
|
{
|
||||||
|
// "600.245" becomes "600"
|
||||||
|
khz.chop(khz.indexOf("."));
|
||||||
|
}
|
||||||
|
fhz = 1E3 * khz.toUInt(&ok);
|
||||||
|
if(!ok)
|
||||||
|
{
|
||||||
|
qWarning() << "Could not understand user KHz text";
|
||||||
|
}
|
||||||
|
return fhz;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint64 repeaterSetup::getFreqHzFromMHzString(QString MHz)
|
||||||
|
{
|
||||||
|
// This function takes a string containing a number in KHz,
|
||||||
|
// and creates an accurate quint64 in Hz.
|
||||||
|
quint64 fhz = 0;
|
||||||
|
bool ok = true;
|
||||||
|
if(MHz.isEmpty())
|
||||||
|
{
|
||||||
|
qWarning() << "MHz string was empty!";
|
||||||
|
return fhz;
|
||||||
|
}
|
||||||
|
if(MHz.contains("."))
|
||||||
|
{
|
||||||
|
int decimalPtIndex = MHz.indexOf(".");
|
||||||
|
// "29.623"
|
||||||
|
// indexOf(".") = 2
|
||||||
|
// length = 6
|
||||||
|
// We want the right 4xx 3 characters.
|
||||||
|
QString KHz = MHz.right(MHz.length() - decimalPtIndex - 1);
|
||||||
|
MHz.chop(MHz.length() - decimalPtIndex);
|
||||||
|
|
||||||
|
fhz = MHz.toUInt(&ok) * 1E6; if(!ok) goto handleError;
|
||||||
|
fhz += KHz.toUInt(&ok) * 1E3; if(!ok) goto handleError;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Frequency was already MHz (unlikely but what can we do?)
|
||||||
|
fhz = MHz.toUInt(&ok) * 1E6; if(!ok) goto handleError;
|
||||||
|
}
|
||||||
|
return fhz;
|
||||||
|
|
||||||
|
handleError:
|
||||||
|
qWarning() << "Could not understand user MHz text " << MHz;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::on_splitPlusButton_clicked()
|
||||||
|
{
|
||||||
|
quint64 hzOffset = getFreqHzFromKHzString(ui->splitOffsetEdit->text());
|
||||||
|
quint64 txfreqhz;
|
||||||
|
freqt f;
|
||||||
|
QString txString;
|
||||||
|
if(hzOffset)
|
||||||
|
{
|
||||||
|
txfreqhz = currentMainFrequency.Hz + hzOffset;
|
||||||
|
f.Hz = txfreqhz;
|
||||||
|
f.VFO = inactiveVFO;
|
||||||
|
txString = QString::number(f.Hz / double(1E6), 'f', 6);
|
||||||
|
ui->splitTransmitFreqEdit->setText(txString);
|
||||||
|
usedPlusSplit = true;
|
||||||
|
emit setTransmitFrequency(f);
|
||||||
|
emit setTransmitMode(modeTransmitVFO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void repeaterSetup::on_splitMinusBtn_clicked()
|
||||||
|
{
|
||||||
|
quint64 hzOffset = getFreqHzFromKHzString(ui->splitOffsetEdit->text());
|
||||||
|
quint64 txfreqhz;
|
||||||
|
freqt f;
|
||||||
|
QString txString;
|
||||||
|
if(hzOffset)
|
||||||
|
{
|
||||||
|
txfreqhz = currentMainFrequency.Hz - hzOffset;
|
||||||
|
f.Hz = txfreqhz;
|
||||||
|
f.VFO = inactiveVFO;
|
||||||
|
txString = QString::number(f.Hz / double(1E6), 'f', 6);
|
||||||
|
ui->splitTransmitFreqEdit->setText(txString);
|
||||||
|
usedPlusSplit = false;
|
||||||
|
emit setTransmitFrequency(f);
|
||||||
|
emit setTransmitMode(modeTransmitVFO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void repeaterSetup::on_splitTxFreqSetBtn_clicked()
|
||||||
|
{
|
||||||
|
quint64 fHz = getFreqHzFromMHzString(ui->splitTransmitFreqEdit->text());
|
||||||
|
freqt f;
|
||||||
|
if(fHz)
|
||||||
|
{
|
||||||
|
f.Hz = fHz;
|
||||||
|
f.VFO = inactiveVFO;
|
||||||
|
emit setTransmitFrequency(f);
|
||||||
|
emit setTransmitMode(modeTransmitVFO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -31,6 +31,13 @@ signals:
|
||||||
void getDTCS();
|
void getDTCS();
|
||||||
void setRptAccessMode(rptAccessTxRx tmode);
|
void setRptAccessMode(rptAccessTxRx tmode);
|
||||||
void getRptAccessMode();
|
void getRptAccessMode();
|
||||||
|
// Split:
|
||||||
|
void getSplitModeEnabled();
|
||||||
|
void getTransmitFrequency();
|
||||||
|
// Use the duplexMode to communicate split.
|
||||||
|
// void setSplitModeEnabled(bool splitEnabled);
|
||||||
|
void setTransmitFrequency(freqt transmitFreq);
|
||||||
|
void setTransmitMode(mode_info m);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void receiveDuplexMode(duplexMode dm);
|
void receiveDuplexMode(duplexMode dm);
|
||||||
|
@ -38,8 +45,14 @@ public slots:
|
||||||
void handleTone(quint16 tone);
|
void handleTone(quint16 tone);
|
||||||
void handleTSQL(quint16 tsql);
|
void handleTSQL(quint16 tsql);
|
||||||
void handleDTCS(quint16 dcscode, bool tinv, bool rinv);
|
void handleDTCS(quint16 dcscode, bool tinv, bool rinv);
|
||||||
|
// void handleSplitMode(bool splitEnabled);
|
||||||
|
// void handleSplitFrequency(freqt transmitFreq);
|
||||||
|
void handleUpdateCurrentMainFrequency(freqt mainfreq);
|
||||||
|
void handleUpdateCurrentMainMode(mode_info m);
|
||||||
|
void handleTransmitStatus(bool amTransmitting);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void showEvent(QShowEvent *event);
|
||||||
void on_rptSimplexBtn_clicked();
|
void on_rptSimplexBtn_clicked();
|
||||||
void on_rptDupPlusBtn_clicked();
|
void on_rptDupPlusBtn_clicked();
|
||||||
void on_rptDupMinusBtn_clicked();
|
void on_rptDupMinusBtn_clicked();
|
||||||
|
@ -51,16 +64,29 @@ private slots:
|
||||||
void on_toneNone_clicked();
|
void on_toneNone_clicked();
|
||||||
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_splitMinusBtn_clicked();
|
||||||
|
|
||||||
|
void on_splitTxFreqSetBtn_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::repeaterSetup *ui;
|
Ui::repeaterSetup *ui;
|
||||||
|
freqt currentMainFrequency;
|
||||||
void populateTones();
|
void populateTones();
|
||||||
void populateDTCS();
|
void populateDTCS();
|
||||||
|
quint64 getFreqHzFromKHzString(QString khz);
|
||||||
|
quint64 getFreqHzFromMHzString(QString MHz);
|
||||||
|
|
||||||
rigCapabilities rig;
|
rigCapabilities rig;
|
||||||
bool haveRig = false;
|
bool haveRig = false;
|
||||||
duplexMode currentdm;
|
duplexMode currentdm;
|
||||||
|
mode_info currentModeMain;
|
||||||
|
mode_info modeTransmitVFO;
|
||||||
|
bool usedPlusSplit = false;
|
||||||
|
bool amTransmitting = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // REPEATERSETUP_H
|
#endif // REPEATERSETUP_H
|
||||||
|
|
115
repeatersetup.ui
115
repeatersetup.ui
|
@ -6,7 +6,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>800</width>
|
<width>922</width>
|
||||||
<height>217</height>
|
<height>217</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="rptGrpbox">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Repeater Duplex</string>
|
<string>Repeater Duplex</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -119,6 +119,115 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="splitModeGrpbox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Split Mode</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="splitEnableChk">
|
||||||
|
<property name="text">
|
||||||
|
<string>Split Enable</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="autoTrackLiveBtn">
|
||||||
|
<property name="text">
|
||||||
|
<string>Auto Track Live</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Offset (KHz):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="splitOffsetEdit">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="splitPlusButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Split+</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="splitMinusBtn">
|
||||||
|
<property name="text">
|
||||||
|
<string>Split-</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="rptOffsetBtn">
|
||||||
|
<property name="text">
|
||||||
|
<string>RPT</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Tx Freq (MHz):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="splitTransmitFreqEdit">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="splitTxFreqSetBtn">
|
||||||
|
<property name="text">
|
||||||
|
<string>Set</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
@ -231,7 +340,7 @@
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
<buttongroups>
|
<buttongroups>
|
||||||
<buttongroup name="rptDuplexBtns"/>
|
|
||||||
<buttongroup name="rptToneBtns"/>
|
<buttongroup name="rptToneBtns"/>
|
||||||
|
<buttongroup name="rptDuplexBtns"/>
|
||||||
</buttongroups>
|
</buttongroups>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
@ -772,8 +772,17 @@ void rigCommander::setMode(mode_info m)
|
||||||
m.filter = '\x01';
|
m.filter = '\x01';
|
||||||
}
|
}
|
||||||
|
|
||||||
payload.setRawData("\x06", 1);
|
if(m.VFO==inactiveVFO)
|
||||||
|
{
|
||||||
|
payload.setRawData("\x26\x01", 2);
|
||||||
|
} else {
|
||||||
|
payload.setRawData("\x06", 1);
|
||||||
|
}
|
||||||
|
|
||||||
payload.append(m.reg);
|
payload.append(m.reg);
|
||||||
|
if(m.VFO==inactiveVFO)
|
||||||
|
payload.append("\x00", 1);
|
||||||
|
|
||||||
payload.append(m.filter);
|
payload.append(m.filter);
|
||||||
|
|
||||||
prepDataAndSend(payload);
|
prepDataAndSend(payload);
|
||||||
|
@ -846,6 +855,19 @@ void rigCommander::getDataMode()
|
||||||
prepDataAndSend(payload);
|
prepDataAndSend(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rigCommander::getSplit()
|
||||||
|
{
|
||||||
|
QByteArray payload("\x0F");
|
||||||
|
prepDataAndSend(payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rigCommander::setSplit(bool splitEnabled)
|
||||||
|
{
|
||||||
|
QByteArray payload("\x0F");
|
||||||
|
payload.append((unsigned char)splitEnabled);
|
||||||
|
prepDataAndSend(payload);
|
||||||
|
}
|
||||||
|
|
||||||
void rigCommander::setDuplexMode(duplexMode dm)
|
void rigCommander::setDuplexMode(duplexMode dm)
|
||||||
{
|
{
|
||||||
QByteArray payload;
|
QByteArray payload;
|
||||||
|
|
|
@ -76,6 +76,8 @@ public slots:
|
||||||
void getMode();
|
void getMode();
|
||||||
void setDataMode(bool dataOn, unsigned char filter);
|
void setDataMode(bool dataOn, unsigned char filter);
|
||||||
void getDataMode();
|
void getDataMode();
|
||||||
|
void getSplit();
|
||||||
|
void setSplit(bool splitEnabled);
|
||||||
void getBandStackReg(char band, char regCode);
|
void getBandStackReg(char band, char regCode);
|
||||||
void getRitEnabled();
|
void getRitEnabled();
|
||||||
void getRitValue();
|
void getRitValue();
|
||||||
|
@ -365,7 +367,7 @@ private:
|
||||||
void setup();
|
void setup();
|
||||||
QByteArray stripData(const QByteArray &data, unsigned char cutPosition);
|
QByteArray stripData(const QByteArray &data, unsigned char cutPosition);
|
||||||
void parseData(QByteArray data); // new data come here
|
void parseData(QByteArray data); // new data come here
|
||||||
void parseCommand();
|
void parseCommand(); // Entry point for complete commands
|
||||||
unsigned char bcdHexToUChar(unsigned char in);
|
unsigned char bcdHexToUChar(unsigned char in);
|
||||||
unsigned char bcdHexToUChar(unsigned char hundreds, unsigned char tensunits);
|
unsigned char bcdHexToUChar(unsigned char hundreds, unsigned char tensunits);
|
||||||
unsigned int bcdHexToUInt(unsigned char hundreds, unsigned char tensunits);
|
unsigned int bcdHexToUInt(unsigned char hundreds, unsigned char tensunits);
|
||||||
|
|
16
wfmain.cpp
16
wfmain.cpp
|
@ -391,6 +391,11 @@ void wfmain::rigConnections()
|
||||||
connect(rig, SIGNAL(haveTSQL(quint16)), rpt, SLOT(handleTSQL(quint16)));
|
connect(rig, SIGNAL(haveTSQL(quint16)), rpt, SLOT(handleTSQL(quint16)));
|
||||||
connect(rig, SIGNAL(haveDTCS(quint16,bool,bool)), rpt, SLOT(handleDTCS(quint16,bool,bool)));
|
connect(rig, SIGNAL(haveDTCS(quint16,bool,bool)), rpt, SLOT(handleDTCS(quint16,bool,bool)));
|
||||||
connect(rig, SIGNAL(haveRptAccessMode(rptAccessTxRx)), rpt, SLOT(handleRptAccessMode(rptAccessTxRx)));
|
connect(rig, SIGNAL(haveRptAccessMode(rptAccessTxRx)), rpt, SLOT(handleRptAccessMode(rptAccessTxRx)));
|
||||||
|
connect(this->rpt, &repeaterSetup::setTransmitFrequency,
|
||||||
|
[=](const freqt &transmitFreq) { issueCmd(cmdSetFreq, transmitFreq);});
|
||||||
|
|
||||||
|
connect(this->rpt, &repeaterSetup::setTransmitMode,
|
||||||
|
[=](const mode_info &transmitMode) { issueCmd(cmdSetMode, transmitMode);});
|
||||||
|
|
||||||
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()));
|
||||||
|
@ -3597,7 +3602,7 @@ void wfmain::doCmd(commandtype cmddata)
|
||||||
{
|
{
|
||||||
lastFreqCmdTime_ms = QDateTime::currentMSecsSinceEpoch();
|
lastFreqCmdTime_ms = QDateTime::currentMSecsSinceEpoch();
|
||||||
freqt f = (*std::static_pointer_cast<freqt>(data));
|
freqt f = (*std::static_pointer_cast<freqt>(data));
|
||||||
emit setFrequency(0,f);
|
emit setFrequency(f.VFO,f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case cmdSetMode:
|
case cmdSetMode:
|
||||||
|
@ -4621,6 +4626,7 @@ void wfmain::receiveFreq(freqt freqStruct)
|
||||||
{
|
{
|
||||||
ui->freqLabel->setText(QString("%1").arg(freqStruct.MHzDouble, 0, 'f'));
|
ui->freqLabel->setText(QString("%1").arg(freqStruct.MHzDouble, 0, 'f'));
|
||||||
freq = freqStruct;
|
freq = freqStruct;
|
||||||
|
rpt->handleUpdateCurrentMainFrequency(freqStruct);
|
||||||
} else {
|
} else {
|
||||||
qDebug(logSystem()) << "Rejecting stale frequency: " << freqStruct.Hz << " Hz, delta time ms = " << tnow_ms - lastFreqCmdTime_ms\
|
qDebug(logSystem()) << "Rejecting stale frequency: " << freqStruct.Hz << " Hz, delta time ms = " << tnow_ms - lastFreqCmdTime_ms\
|
||||||
<< ", tnow_ms " << tnow_ms << ", last: " << lastFreqCmdTime_ms;
|
<< ", tnow_ms " << tnow_ms << ", last: " << lastFreqCmdTime_ms;
|
||||||
|
@ -4641,6 +4647,7 @@ void wfmain::receivePTTstatus(bool pttOn)
|
||||||
pttLed->setState(QLedLabel::State::StateOk);
|
pttLed->setState(QLedLabel::State::StateOk);
|
||||||
}
|
}
|
||||||
amTransmitting = pttOn;
|
amTransmitting = pttOn;
|
||||||
|
rpt->handleTransmitStatus(pttOn);
|
||||||
changeTxBtn();
|
changeTxBtn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5366,18 +5373,11 @@ void wfmain::receiveMode(unsigned char mode, unsigned char filter)
|
||||||
currentModeInfo.reg = mode;
|
currentModeInfo.reg = mode;
|
||||||
rpt->handleUpdateCurrentMainMode(currentModeInfo);
|
rpt->handleUpdateCurrentMainMode(currentModeInfo);
|
||||||
|
|
||||||
<<<<<<< Updated upstream
|
|
||||||
currentModeIndex = mode;
|
|
||||||
currentModeInfo.mk = (mode_kind)mode;
|
|
||||||
currentMode = (mode_kind)mode;
|
|
||||||
currentModeInfo.filter = filter;
|
|
||||||
=======
|
|
||||||
if (!found)
|
if (!found)
|
||||||
{
|
{
|
||||||
qWarning(logSystem()) << __func__ << "Received mode " << mode << " but could not match to any index within the modeSelectCombo. ";
|
qWarning(logSystem()) << __func__ << "Received mode " << mode << " but could not match to any index within the modeSelectCombo. ";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
>>>>>>> Stashed changes
|
|
||||||
|
|
||||||
if (maxPassbandHz != 0)
|
if (maxPassbandHz != 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,6 +60,19 @@ enum mode_kind {
|
||||||
modeDCR
|
modeDCR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum selVFO_t {
|
||||||
|
activeVFO = 0,
|
||||||
|
inactiveVFO = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mode_info {
|
||||||
|
mode_kind mk;
|
||||||
|
unsigned char reg;
|
||||||
|
unsigned char filter;
|
||||||
|
selVFO_t VFO = activeVFO;
|
||||||
|
QString name;
|
||||||
|
};
|
||||||
|
|
||||||
enum breakIn_t {
|
enum breakIn_t {
|
||||||
brkinOff = 0x00,
|
brkinOff = 0x00,
|
||||||
brkinSemi = 0x01,
|
brkinSemi = 0x01,
|
||||||
|
@ -69,6 +82,7 @@ enum breakIn_t {
|
||||||
struct freqt {
|
struct freqt {
|
||||||
quint64 Hz;
|
quint64 Hz;
|
||||||
double MHzDouble;
|
double MHzDouble;
|
||||||
|
selVFO_t VFO = activeVFO;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct datekind {
|
struct datekind {
|
||||||
|
|
Ładowanie…
Reference in New Issue