kopia lustrzana https://gitlab.com/eliggett/wfview
Move rigCaps to a single pointer across whole app.
rodzic
ffeec4925a
commit
235869a501
222
bandbuttons.cpp
222
bandbuttons.cpp
|
@ -13,6 +13,7 @@ bandbuttons::bandbuttons(QWidget *parent) :
|
|||
this->setWindowTitle("Band Switcher");
|
||||
this->setObjectName("bandButtons");
|
||||
queue = cachingQueue::getInstance(this);
|
||||
connect(queue, SIGNAL(rigCapsUpdated(rigCapabilities*)), this, SLOT(receiveRigCaps(rigCapabilities*)));
|
||||
}
|
||||
|
||||
bandbuttons::~bandbuttons()
|
||||
|
@ -25,26 +26,24 @@ int bandbuttons::getBSRNumber()
|
|||
return ui->bandStkPopdown->currentIndex()+1;
|
||||
}
|
||||
|
||||
void bandbuttons::acceptRigCaps(rigCapabilities rc)
|
||||
void bandbuttons::receiveRigCaps(rigCapabilities* rc)
|
||||
{
|
||||
this->rigCaps = rc;
|
||||
qDebug(logGui()) << "Accepting new rigcaps into band buttons.";
|
||||
if(haveRigCaps)
|
||||
qDebug(logGui()) << "Accepting additional rigcaps into band buttons.";
|
||||
|
||||
qDebug(logGui()) << "Bands in this rigcaps: ";
|
||||
for(size_t i=0; i < rigCaps.bands.size(); i++)
|
||||
{
|
||||
qDebug(logGui()) << "band[" << i << "]: " << (unsigned char)rigCaps.bands.at(i).band;
|
||||
if (rigCaps != Q_NULLPTR) {
|
||||
qDebug(logGui()) << "Bands in this rigcaps: ";
|
||||
for(size_t i=0; i < rigCaps->bands.size(); i++)
|
||||
{
|
||||
qDebug(logGui()) << "band[" << i << "]: " << (unsigned char)rigCaps->bands.at(i).band;
|
||||
}
|
||||
|
||||
for(size_t i=0; i < 20; i++)
|
||||
{
|
||||
qDebug(logGui()) << "bsr[" << i << "]: " << (unsigned char)rigCaps->bsr[i];
|
||||
}
|
||||
}
|
||||
|
||||
for(size_t i=0; i < 20; i++)
|
||||
{
|
||||
qDebug(logGui()) << "bsr[" << i << "]: " << (unsigned char)rigCaps.bsr[i];
|
||||
}
|
||||
|
||||
setUIToRig();
|
||||
haveRigCaps = true;
|
||||
}
|
||||
|
||||
void bandbuttons::setUIToRig()
|
||||
|
@ -76,82 +75,84 @@ void bandbuttons::setUIToRig()
|
|||
hideButton(ui->band2200mbtn);
|
||||
hideButton(ui->bandGenbtn);
|
||||
|
||||
for (auto &band: rigCaps.bands)
|
||||
{
|
||||
switch(band.band)
|
||||
if (rigCaps != Q_NULLPTR) {
|
||||
for (auto &band: rigCaps->bands)
|
||||
{
|
||||
case(band3cm):
|
||||
showButton(ui->band3cmbtn);
|
||||
break;
|
||||
case(band6cm):
|
||||
showButton(ui->band6cmbtn);
|
||||
break;
|
||||
case(band13cm):
|
||||
showButton(ui->band13cmbtn);
|
||||
break;
|
||||
case(band23cm):
|
||||
showButton(ui->band23cmbtn);
|
||||
break;
|
||||
case(band70cm):
|
||||
showButton(ui->band70cmbtn);
|
||||
break;
|
||||
case(band2m):
|
||||
showButton(ui->band2mbtn);
|
||||
break;
|
||||
case(bandAir):
|
||||
showButton(ui->bandAirbtn);
|
||||
break;
|
||||
case(bandWFM):
|
||||
showButton(ui->bandWFMbtn);
|
||||
break;
|
||||
case(band4m):
|
||||
showButton(ui->band4mbtn);
|
||||
break;
|
||||
case(band6m):
|
||||
showButton(ui->band6mbtn);
|
||||
break;
|
||||
case(band10m):
|
||||
showButton(ui->band10mbtn);
|
||||
break;
|
||||
case(band12m):
|
||||
showButton(ui->band12mbtn);
|
||||
break;
|
||||
case(band15m):
|
||||
showButton(ui->band15mbtn);
|
||||
break;
|
||||
case(band17m):
|
||||
showButton(ui->band17mbtn);
|
||||
break;
|
||||
case(band20m):
|
||||
showButton(ui->band20mbtn);
|
||||
break;
|
||||
case(band30m):
|
||||
showButton(ui->band30mbtn);
|
||||
break;
|
||||
case(band40m):
|
||||
showButton(ui->band40mbtn);
|
||||
break;
|
||||
case(band60m):
|
||||
showButton(ui->band60mbtn);
|
||||
break;
|
||||
case(band80m):
|
||||
showButton(ui->band80mbtn);
|
||||
break;
|
||||
case(band160m):
|
||||
showButton(ui->band160mbtn);
|
||||
break;
|
||||
case(band630m):
|
||||
showButton(ui->band630mbtn);
|
||||
break;
|
||||
case(band2200m):
|
||||
showButton(ui->band2200mbtn);
|
||||
break;
|
||||
case(bandGen):
|
||||
showButton(ui->bandGenbtn);
|
||||
break;
|
||||
switch(band.band)
|
||||
{
|
||||
case(band3cm):
|
||||
showButton(ui->band3cmbtn);
|
||||
break;
|
||||
case(band6cm):
|
||||
showButton(ui->band6cmbtn);
|
||||
break;
|
||||
case(band13cm):
|
||||
showButton(ui->band13cmbtn);
|
||||
break;
|
||||
case(band23cm):
|
||||
showButton(ui->band23cmbtn);
|
||||
break;
|
||||
case(band70cm):
|
||||
showButton(ui->band70cmbtn);
|
||||
break;
|
||||
case(band2m):
|
||||
showButton(ui->band2mbtn);
|
||||
break;
|
||||
case(bandAir):
|
||||
showButton(ui->bandAirbtn);
|
||||
break;
|
||||
case(bandWFM):
|
||||
showButton(ui->bandWFMbtn);
|
||||
break;
|
||||
case(band4m):
|
||||
showButton(ui->band4mbtn);
|
||||
break;
|
||||
case(band6m):
|
||||
showButton(ui->band6mbtn);
|
||||
break;
|
||||
case(band10m):
|
||||
showButton(ui->band10mbtn);
|
||||
break;
|
||||
case(band12m):
|
||||
showButton(ui->band12mbtn);
|
||||
break;
|
||||
case(band15m):
|
||||
showButton(ui->band15mbtn);
|
||||
break;
|
||||
case(band17m):
|
||||
showButton(ui->band17mbtn);
|
||||
break;
|
||||
case(band20m):
|
||||
showButton(ui->band20mbtn);
|
||||
break;
|
||||
case(band30m):
|
||||
showButton(ui->band30mbtn);
|
||||
break;
|
||||
case(band40m):
|
||||
showButton(ui->band40mbtn);
|
||||
break;
|
||||
case(band60m):
|
||||
showButton(ui->band60mbtn);
|
||||
break;
|
||||
case(band80m):
|
||||
showButton(ui->band80mbtn);
|
||||
break;
|
||||
case(band160m):
|
||||
showButton(ui->band160mbtn);
|
||||
break;
|
||||
case(band630m):
|
||||
showButton(ui->band630mbtn);
|
||||
break;
|
||||
case(band2200m):
|
||||
showButton(ui->band2200mbtn);
|
||||
break;
|
||||
case(bandGen):
|
||||
showButton(ui->bandGenbtn);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -166,33 +167,11 @@ void bandbuttons::hideButton(QPushButton *b)
|
|||
b->setHidden(true);
|
||||
}
|
||||
|
||||
void bandbuttons::receiveBandStackReg(freqt freqGo, char mode, char filter, bool dataOn)
|
||||
{
|
||||
// This function is not currently used, but perhaps it should be?
|
||||
// Issue: wfmain is also waiting for a BSR and acts upon it.
|
||||
if(waitingForBSR)
|
||||
{
|
||||
qDebug(logGui()) << "Received band stack register and was waiting for one.";
|
||||
emit issueCmdF(cmdSetFreq, freqGo);
|
||||
emit issueCmd(cmdSetMode, mode);
|
||||
//emit issueCmd(cmdSetFilter, filter); // TODO
|
||||
if(dataOn)
|
||||
emit issueDelayedCommand(cmdSetDataModeOn);
|
||||
else
|
||||
emit issueDelayedCommand(cmdSetDataModeOff);
|
||||
|
||||
waitingForBSR = false;
|
||||
} else {
|
||||
qWarning(logGui()) << "Received a BSR but did not expect one.";
|
||||
}
|
||||
(void)filter;
|
||||
}
|
||||
|
||||
void bandbuttons::bandStackBtnClick(availableBands band)
|
||||
{
|
||||
if(haveRigCaps)
|
||||
if(rigCaps != Q_NULLPTR)
|
||||
{
|
||||
for (auto &b: rigCaps.bands)
|
||||
for (auto &b: rigCaps->bands)
|
||||
{
|
||||
if (b.band == band)
|
||||
{
|
||||
|
@ -215,16 +194,19 @@ void bandbuttons::bandStackBtnClick(availableBands band)
|
|||
void bandbuttons::jumpToBandWithoutBSR(availableBands band)
|
||||
{
|
||||
// Sometimes we do not have a BSR for these bands:
|
||||
for (auto &b: rigCaps.bands)
|
||||
if (rigCaps != Q_NULLPTR)
|
||||
{
|
||||
if (b.band == band)
|
||||
for (auto &b: rigCaps->bands)
|
||||
{
|
||||
freqt f;
|
||||
f.Hz = (b.lowFreq+b.highFreq)/2.0;
|
||||
f.MHzDouble = f.Hz/1000000.0;
|
||||
f.VFO = activeVFO;
|
||||
queue->add(priorityImmediate,queueItem(funcSelectedFreq,QVariant::fromValue<freqt>(f),false,false));
|
||||
break;
|
||||
if (b.band == band)
|
||||
{
|
||||
freqt f;
|
||||
f.Hz = (b.lowFreq+b.highFreq)/2.0;
|
||||
f.MHzDouble = f.Hz/1000000.0;
|
||||
f.VFO = activeVFO;
|
||||
queue->add(priorityImmediate,queueItem(funcSelectedFreq,QVariant::fromValue<freqt>(f),false,false));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,9 +51,7 @@ signals:
|
|||
|
||||
|
||||
public slots:
|
||||
// These should come from connections to rigCommander:
|
||||
void acceptRigCaps(rigCapabilities rc);
|
||||
void receiveBandStackReg(freqt freqGo, char mode, char filter, bool dataOn);
|
||||
void receiveRigCaps(rigCapabilities* rc);
|
||||
|
||||
private slots:
|
||||
void on_band2200mbtn_clicked();
|
||||
|
@ -90,7 +88,7 @@ private:
|
|||
char bandStkRegCode;
|
||||
|
||||
bool waitingForBSR = false;
|
||||
rigCapabilities rigCaps;
|
||||
rigCapabilities* rigCaps=Q_NULLPTR;
|
||||
bool haveRigCaps = false;
|
||||
cachingQueue* queue;
|
||||
};
|
||||
|
|
|
@ -118,7 +118,7 @@ public:
|
|||
QMultiMap <queuePriority,queueItem> getQueueItems();
|
||||
void lockMutex() {mutex.lock();}
|
||||
void unlockMutex() {mutex.unlock();}
|
||||
void setRigCaps(rigCapabilities* caps) { rigCaps = caps; emit rigCapsUpdated(rigCaps);}
|
||||
void setRigCaps(rigCapabilities* caps) { if (rigCaps != caps) { rigCaps = caps; emit rigCapsUpdated(rigCaps);} }
|
||||
rigCapabilities* getRigCaps() { return rigCaps; }
|
||||
};
|
||||
|
||||
|
|
138
memories.cpp
138
memories.cpp
|
@ -4,16 +4,19 @@
|
|||
#include "memories.h"
|
||||
#include "ui_memories.h"
|
||||
|
||||
memories::memories(rigCapabilities rigCaps, bool slowLoad, QWidget *parent) :
|
||||
memories::memories(bool slowLoad, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
slowLoad(slowLoad),
|
||||
rigCaps(rigCaps),
|
||||
ui(new Ui::memories)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->table->setColumnCount(totalColumns);
|
||||
ui->table->editing(false);
|
||||
|
||||
this->setObjectName("RigCtlD");
|
||||
queue = cachingQueue::getInstance(this);
|
||||
rigCaps = queue->getRigCaps();
|
||||
|
||||
QStringList headers;
|
||||
|
||||
/*
|
||||
|
@ -32,9 +35,9 @@ memories::memories(rigCapabilities rigCaps, bool slowLoad, QWidget *parent) :
|
|||
split << "OFF" << "ON";
|
||||
|
||||
dataModes << "OFF" << "DATA1";
|
||||
if (rigCaps.commands.contains(funcDATA2Mod))
|
||||
if (rigCaps->commands.contains(funcDATA2Mod))
|
||||
dataModes.append("DATA2");
|
||||
if (rigCaps.commands.contains(funcDATA3Mod))
|
||||
if (rigCaps->commands.contains(funcDATA3Mod))
|
||||
dataModes.append("DATA3");
|
||||
|
||||
filters << "FIL1" << "FIL2" << "FIL3";
|
||||
|
@ -42,7 +45,7 @@ memories::memories(rigCapabilities rigCaps, bool slowLoad, QWidget *parent) :
|
|||
duplexModes << "OFF" << "DUP-" << "DUP+" << "RPS";
|
||||
|
||||
toneModes << "OFF" << "TONE" << "TSQL";
|
||||
if (rigCaps.commands.contains(funcRepeaterDTCS))
|
||||
if (rigCaps->commands.contains(funcRepeaterDTCS))
|
||||
toneModes.append("DTCS");
|
||||
|
||||
|
||||
|
@ -72,12 +75,12 @@ memories::memories(rigCapabilities rigCaps, bool slowLoad, QWidget *parent) :
|
|||
|
||||
ui->group->blockSignals(true);
|
||||
ui->group->addItem("Memory Group",-1);
|
||||
for (int i=rigCaps.memStart;i<=rigCaps.memGroups;i++) {
|
||||
for (int i=rigCaps->memStart;i<=rigCaps->memGroups;i++) {
|
||||
|
||||
ui->group->addItem(QString("Group %0").arg(i,2,10,QChar('0')),i);
|
||||
}
|
||||
|
||||
if (rigCaps.satMemories && rigCaps.commands.contains(funcSatelliteMode)){
|
||||
if (rigCaps->satMemories && rigCaps->commands.contains(funcSatelliteMode)){
|
||||
ui->group->addItem("Satellite",MEMORY_SATGROUP);
|
||||
}
|
||||
|
||||
|
@ -88,13 +91,13 @@ memories::memories(rigCapabilities rigCaps, bool slowLoad, QWidget *parent) :
|
|||
dvsql.append(QString::number(i).rightJustified(2,'0'));
|
||||
}
|
||||
|
||||
if (rigCaps.commands.contains(funcVFOEqualAB)) {
|
||||
if (rigCaps->commands.contains(funcVFOEqualAB)) {
|
||||
vfos << "VFOA" << "VFOB";
|
||||
} else if (rigCaps.commands.contains(funcVFOEqualMS)) {
|
||||
} else if (rigCaps->commands.contains(funcVFOEqualMS)) {
|
||||
vfos << "MAIN" << "SUB";
|
||||
}
|
||||
|
||||
for (auto &mode: rigCaps.modes){
|
||||
for (auto &mode: rigCaps->modes){
|
||||
modes.append(mode.name);
|
||||
}
|
||||
|
||||
|
@ -131,7 +134,7 @@ void memories::rowAdded(int row)
|
|||
{
|
||||
// Find the next available memory number:
|
||||
|
||||
quint32 num=rigCaps.memStart;
|
||||
quint32 num=rigCaps->memStart;
|
||||
|
||||
/* This feels unnecessarily complicated, but here we are:
|
||||
* Set the memory number to 1
|
||||
|
@ -160,11 +163,11 @@ void memories::rowAdded(int row)
|
|||
if (i == rows.end())
|
||||
{
|
||||
// No gaps found so work on highest value found
|
||||
if ((ui->group->currentData().toInt() != 200 && rows.back() < groupMemories-1) || (ui->group->currentData().toInt() == MEMORY_SATGROUP && rows.back() < rigCaps.satMemories-1))
|
||||
if ((ui->group->currentData().toInt() != 200 && rows.back() < groupMemories-1) || (ui->group->currentData().toInt() == MEMORY_SATGROUP && rows.back() < rigCaps->satMemories-1))
|
||||
{
|
||||
num = rows.back() + 1;
|
||||
}
|
||||
else if (rows.front() == rigCaps.memStart)
|
||||
else if (rows.front() == rigCaps->memStart)
|
||||
{
|
||||
qWarning() << "Sorry no free memory slots found, please delete one first";
|
||||
ui->table->removeRow(row);
|
||||
|
@ -177,7 +180,9 @@ void memories::rowAdded(int row)
|
|||
QPushButton* recall = new QPushButton("Recall");
|
||||
ui->table->setCellWidget(row,columnRecall,recall);
|
||||
connect(recall, &QPushButton::clicked, this,
|
||||
[=]() { qInfo() << "Recalling" << num; emit recallMemory((quint32((ui->group->currentData().toUInt() << 16) | num)));});
|
||||
[=]() { qInfo() << "Recalling" << num;
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryMode,QVariant::fromValue<uint>((quint32((ui->group->currentData().toUInt() << 16) | num)))));
|
||||
});
|
||||
ui->table->model()->setData(ui->table->model()->index(row,columnNum),QString::number(num).rightJustified(3,'0'));
|
||||
// Set default values (where possible) for all other values:
|
||||
if (ui->table->item(row,columnSplit) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnSplit),split[0]);
|
||||
|
@ -219,7 +224,7 @@ void memories::rowAdded(int row)
|
|||
void memories::rowDeleted(quint32 mem)
|
||||
|
||||
{
|
||||
if (mem >= rigCaps.memStart && mem <= rigCaps.memories) {
|
||||
if (mem >= rigCaps->memStart && mem <= rigCaps->memories) {
|
||||
qInfo() << "Mem Deleted" << mem;
|
||||
memoryType currentMemory;
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP)
|
||||
|
@ -230,7 +235,7 @@ void memories::rowDeleted(quint32 mem)
|
|||
currentMemory.group=ui->group->currentData().toInt();
|
||||
currentMemory.channel = mem;
|
||||
currentMemory.del = true;
|
||||
emit setMemory(currentMemory);
|
||||
queue->add(priorityImmediate,queueItem((currentMemory.sat?funcSatelliteMemory:funcMemoryContents),QVariant::fromValue<memoryType>(currentMemory)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -315,7 +320,7 @@ void memories::on_table_cellChanged(int row, int col)
|
|||
currentMemory.frequency.Hz = (ui->table->item(row,columnFrequency) == NULL) ? 0 : quint64(ui->table->item(row,columnFrequency)->text().toDouble()*1000000.0);
|
||||
currentMemory.frequencyB.Hz = (ui->table->item(row,columnFrequencyB) == NULL) ? 0 : quint64(ui->table->item(row,columnFrequencyB)->text().toDouble()*1000000.0);
|
||||
|
||||
for (auto &m: rigCaps.modes){
|
||||
for (auto &m: rigCaps->modes){
|
||||
if (!ui->table->isColumnHidden(columnMode) && ui->table->item(row,columnMode) != NULL && ui->table->item(row,columnMode)->text()==m.name) {
|
||||
currentMemory.mode=m.reg;
|
||||
}
|
||||
|
@ -412,8 +417,7 @@ void memories::on_table_cellChanged(int row, int col)
|
|||
write=false;
|
||||
}
|
||||
if (write) {
|
||||
emit setMemory(currentMemory);
|
||||
|
||||
queue->add(priorityImmediate,queueItem((currentMemory.sat?funcSatelliteMemory:funcMemoryContents),QVariant::fromValue<memoryType>(currentMemory)));
|
||||
qInfo() << "Sending memory, group:" << currentMemory.group << "channel" << currentMemory.channel;
|
||||
// Set number to not be editable once written. Not sure why but this crashes?
|
||||
//ui->table->item(row,columnNum)->setFlags(ui->table->item(row,columnNum)->flags() & (~Qt::ItemIsEditable));
|
||||
|
@ -431,11 +435,11 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
|
||||
// Special case for group 100 on the IC705!
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP)
|
||||
groupMemories=rigCaps.satMemories;
|
||||
groupMemories=rigCaps->satMemories;
|
||||
else if (ui->group->currentData().toInt() == MEMORY_SHORTGROUP)
|
||||
groupMemories=3;
|
||||
else
|
||||
groupMemories=rigCaps.memories;
|
||||
groupMemories=rigCaps->memories;
|
||||
|
||||
ui->loadingMemories->setVisible(true);
|
||||
ui->table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
|
@ -453,15 +457,21 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
|
||||
QVector<memParserFormat> parser;
|
||||
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMode,QVariant::fromValue<bool>(ui->group->currentData().toInt() == MEMORY_SATGROUP)));
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP) {
|
||||
emit setSatelliteMode(true);
|
||||
parser = rigCaps.satParser;
|
||||
queue->del(funcSelectedFreq,false);
|
||||
queue->del(funcSelectedMode,false);
|
||||
queue->del(funcUnselectedFreq,true);
|
||||
queue->del(funcUnselectedMode,true);
|
||||
parser = rigCaps->satParser;
|
||||
} else {
|
||||
emit setSatelliteMode(false);
|
||||
parser = rigCaps.memParser;
|
||||
queue->addUnique(priorityMedium,funcSelectedFreq,true,false);
|
||||
queue->addUnique(priorityMedium,funcSelectedMode,true,false);
|
||||
queue->addUnique(priorityMedium,funcUnselectedFreq,true,true);
|
||||
queue->addUnique(priorityMedium,funcUnselectedMode,true,true);
|
||||
parser = rigCaps->memParser;
|
||||
}
|
||||
|
||||
|
||||
for (auto &parse: parser) {
|
||||
switch (parse.spec)
|
||||
{
|
||||
|
@ -879,38 +889,49 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP) {
|
||||
|
||||
lastMemoryRequested = rigCaps.memStart;
|
||||
lastMemoryRequested = rigCaps->memStart;
|
||||
if (slowLoad) {
|
||||
QTimer::singleShot(MEMORY_SLOWLOAD, this, [this]{ emit getSatMemory(lastMemoryRequested); });
|
||||
QTimer::singleShot(MEMORY_SLOWLOAD, this, [this]{
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMemory,QVariant::fromValue<ushort>(lastMemoryRequested & 0xffff)));
|
||||
});
|
||||
} else {
|
||||
emit getSatMemory(lastMemoryRequested);
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMemory,QVariant::fromValue<ushort>(lastMemoryRequested & 0xffff)));
|
||||
}
|
||||
} else {
|
||||
lastMemoryRequested = quint32((ui->group->currentData().toInt())<<16) | (rigCaps.memStart & 0xffff);
|
||||
lastMemoryRequested = quint32((ui->group->currentData().toInt())<<16) | (rigCaps->memStart & 0xffff);
|
||||
if (slowLoad) {
|
||||
QTimer::singleShot(MEMORY_SLOWLOAD, this, [this]{ emit getMemory(lastMemoryRequested); });
|
||||
QTimer::singleShot(MEMORY_SLOWLOAD, this, [this]{
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(lastMemoryRequested)));
|
||||
});
|
||||
} else {
|
||||
// Is the current group attached to a particular band?
|
||||
for (auto &band: rigCaps.bands)
|
||||
for (auto &band: rigCaps->bands)
|
||||
{
|
||||
if (band.memGroup==ui->group->currentData().toInt())
|
||||
{
|
||||
emit setBand(band.band);
|
||||
queue->add(priorityImmediate,queueItem(funcBandStackReg,QVariant::fromValue<uchar>(band.band)));
|
||||
}
|
||||
}
|
||||
emit getMemory(lastMemoryRequested);
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(lastMemoryRequested)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void memories::on_vfoMode_clicked()
|
||||
{
|
||||
emit vfoMode();
|
||||
queue->addUnique(priorityMedium,funcSelectedFreq,true,false);
|
||||
queue->addUnique(priorityMedium,funcSelectedMode,true,false);
|
||||
queue->addUnique(priorityMedium,funcUnselectedFreq,true,true);
|
||||
queue->addUnique(priorityMedium,funcUnselectedMode,true,true);
|
||||
}
|
||||
|
||||
void memories::on_memoryMode_clicked()
|
||||
{
|
||||
emit memoryMode();
|
||||
queue->add(priorityImmediate,funcMemoryMode);
|
||||
queue->del(funcSelectedFreq,false);
|
||||
queue->del(funcSelectedMode,false);
|
||||
queue->del(funcUnselectedFreq,true);
|
||||
queue->del(funcUnselectedMode,true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -921,9 +942,9 @@ void memories::receiveMemory(memoryType mem)
|
|||
{
|
||||
lastMemoryRequested++;
|
||||
if (mem.sat)
|
||||
emit getSatMemory(lastMemoryRequested);
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMemory,QVariant::fromValue<ushort>(lastMemoryRequested & 0xffff)));
|
||||
else
|
||||
emit getMemory(lastMemoryRequested);
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(lastMemoryRequested)));
|
||||
timeoutTimer.start(MEMORY_TIMEOUT);
|
||||
}
|
||||
else if (mem.channel == groupMemories)
|
||||
|
@ -946,7 +967,8 @@ void memories::receiveMemory(memoryType mem)
|
|||
|
||||
for (int n = 0; n<ui->table->rowCount();n++)
|
||||
{
|
||||
if (ui->table->item(n,columnNum) != NULL && ui->table->item(n,columnNum)->text().toInt() == mem.channel && (rigCaps.memGroups < 2 || mem.sat || mem.group == ui->group->currentData().toInt()))
|
||||
if (ui->table->item(n,columnNum) != NULL && ui->table->item(n,columnNum)->text().toInt() == mem.channel &&
|
||||
(rigCaps->memGroups < 2 || mem.sat || mem.group == ui->group->currentData().toInt()))
|
||||
{
|
||||
row = n;
|
||||
break;
|
||||
|
@ -961,8 +983,10 @@ void memories::receiveMemory(memoryType mem)
|
|||
row=ui->table->rowCount()-1;
|
||||
QPushButton* recall = new QPushButton("Recall");
|
||||
ui->table->setCellWidget(row,columnRecall,recall);
|
||||
connect(recall, &QPushButton::clicked, this,
|
||||
[=]() { qInfo() << "Recalling" << mem.channel; emit recallMemory((quint32((ui->group->currentData().toUInt() << 16) | mem.channel)));});
|
||||
connect(recall, &QPushButton::clicked, this, [=]() {
|
||||
qInfo() << "Recalling" << mem.channel;
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryMode,QVariant::fromValue<uint>(quint32((ui->group->currentData().toUInt() << 16) | mem.channel))));
|
||||
});
|
||||
}
|
||||
|
||||
ui->table->model()->setData(ui->table->model()->index(row,columnNum),QString::number(mem.channel & 0xffff).rightJustified(3,'0'));
|
||||
|
@ -981,12 +1005,12 @@ void memories::receiveMemory(memoryType mem)
|
|||
ui->table->model()->setData(ui->table->model()->index(row,columnFrequencyB),QString::number(double(mem.frequencyB.Hz/1000000.0),'f',3));
|
||||
validData++;
|
||||
|
||||
for (uint i=0;i<rigCaps.modes.size();i++)
|
||||
for (uint i=0;i<rigCaps->modes.size();i++)
|
||||
{
|
||||
if (mem.mode == rigCaps.modes[i].reg)
|
||||
if (mem.mode == rigCaps->modes[i].reg)
|
||||
validData += updateCombo(modes,row,columnMode,i);
|
||||
|
||||
if (mem.modeB == rigCaps.modes[i].reg)
|
||||
if (mem.modeB == rigCaps->modes[i].reg)
|
||||
validData += updateCombo(modes,row,columnModeB,i);
|
||||
}
|
||||
|
||||
|
@ -1094,10 +1118,11 @@ void memories::receiveMemory(memoryType mem)
|
|||
|
||||
if (validData < visibleColumns) {
|
||||
qInfo(logRig()) << "Memory" << mem.channel << "Received valid data for" << validData << "columns, " << "expected" << visibleColumns << "requesting again";
|
||||
if (mem.sat)
|
||||
emit getSatMemory(mem.channel & 0xffff);
|
||||
else
|
||||
emit getMemory(quint32((ui->group->currentData().toInt())<<16) | (mem.channel & 0xffff));
|
||||
if (mem.sat) {
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMemory,QVariant::fromValue<ushort>(mem.channel & 0xffff)));
|
||||
} else {
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(mem.channel & 0xffff)));
|
||||
}
|
||||
retries++;
|
||||
}
|
||||
|
||||
|
@ -1155,14 +1180,15 @@ bool memories::checkASCII(QString str)
|
|||
|
||||
|
||||
void memories::timeout()
|
||||
{
|
||||
{
|
||||
if (timeoutCount < 10 )
|
||||
{
|
||||
qInfo(logRig()) << "Timeout receiving memory:" << (lastMemoryRequested & 0xffff) << "in group" << (lastMemoryRequested >> 16 & 0xffff);
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP)
|
||||
emit getSatMemory(lastMemoryRequested);
|
||||
else
|
||||
emit getMemory(lastMemoryRequested);
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP) {
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMemory,QVariant::fromValue<ushort>(lastMemoryRequested & 0xffff)));
|
||||
} else {
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(lastMemoryRequested)));
|
||||
}
|
||||
timeoutTimer.start(MEMORY_TIMEOUT);
|
||||
timeoutCount++;
|
||||
} else {
|
||||
|
@ -1241,8 +1267,10 @@ void memories::on_csvImport_clicked()
|
|||
ui->table->insertRow(rownum);
|
||||
QPushButton* recall = new QPushButton("Recall");
|
||||
ui->table->setCellWidget(rownum,columnRecall,recall);
|
||||
connect(recall, &QPushButton::clicked, this,
|
||||
[=]() { qInfo() << "Recalling" << row[0].toInt(); emit recallMemory((quint32((ui->group->currentData().toUInt() << 16) | row[0].toInt())));});
|
||||
connect(recall, &QPushButton::clicked, this, [=]() {
|
||||
qInfo() << "Recalling" << row[0].toInt();
|
||||
queue->add(priorityImmediate,queueItem(funcMemoryMode,QVariant::fromValue<uint>(quint32((ui->group->currentData().toUInt() << 16) | row[0].toInt()))));
|
||||
});
|
||||
}
|
||||
// rownum is now the row we need to work on.
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "tablewidget.h"
|
||||
#include "wfviewtypes.h"
|
||||
#include "rigidentities.h"
|
||||
#include "cachingqueue.h"
|
||||
|
||||
#define MEMORY_TIMEOUT 1000
|
||||
#define MEMORY_SLOWLOAD 500
|
||||
|
@ -29,7 +30,7 @@ class memories : public QWidget
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit memories(rigCapabilities rigCaps,bool slowLoad=false,QWidget *parent = nullptr);
|
||||
explicit memories(bool slowLoad=false,QWidget *parent = nullptr);
|
||||
~memories();
|
||||
void populate();
|
||||
|
||||
|
@ -64,6 +65,7 @@ private slots:
|
|||
void timeout();
|
||||
|
||||
private:
|
||||
cachingQueue* queue;
|
||||
quint32 groupMemories=0;
|
||||
quint32 lastMemoryRequested=0;
|
||||
QTimer timeoutTimer;
|
||||
|
@ -175,7 +177,7 @@ private:
|
|||
tableEditor* r1EditorB = Q_NULLPTR;
|
||||
tableEditor* r2EditorB = Q_NULLPTR;
|
||||
|
||||
rigCapabilities rigCaps;
|
||||
rigCapabilities* rigCaps = Q_NULLPTR;
|
||||
|
||||
Ui::memories *ui;
|
||||
bool extended = false;
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
pttyHandler::pttyHandler(QString pty, QObject* parent) : QObject(parent)
|
||||
{
|
||||
//constructor
|
||||
|
||||
this->setObjectName("pttyHandler");
|
||||
queue = cachingQueue::getInstance(this);
|
||||
connect(queue, SIGNAL(rigCapsUpdated(rigCapabilities*)), this, SLOT(receiveRigCaps(rigCapabilities*)));
|
||||
rigCaps = queue->getRigCaps();
|
||||
|
||||
if (pty == "" || pty.toLower() == "none")
|
||||
{
|
||||
// Just return if pty is not configured.
|
||||
|
@ -222,7 +228,7 @@ void pttyHandler::receiveDataIn(int fd) {
|
|||
qInfo(logSerial()) << "pty remote CI-V changed:" << QString("0x%1").arg((quint8)civId,0,16);
|
||||
}
|
||||
// filter C-IV transceive command before forwarding on.
|
||||
if (inPortData.contains(rigCaps.transceiveCommand))
|
||||
if (rigCaps != Q_NULLPTR && inPortData.contains(rigCaps->transceiveCommand))
|
||||
{
|
||||
//qInfo(logSerial()) << "Filtered transceive command";
|
||||
//printHex(inPortData, false, true);
|
||||
|
@ -337,10 +343,12 @@ void pttyHandler::printHex(const QByteArray& pdata, bool printVert, bool printHo
|
|||
qDebug(logSerial()) << "----- End hex dump -----";
|
||||
}
|
||||
|
||||
void pttyHandler::receiveFoundRigID(rigCapabilities rigCaps) {
|
||||
this->rigCaps = rigCaps;
|
||||
qInfo(logSerial) << "Received rigCapabilities for" << rigCaps.modelName;
|
||||
|
||||
void pttyHandler::receiveRigCaps(rigCapabilities* caps)
|
||||
{
|
||||
if (caps != Q_NULLPTR) {
|
||||
qInfo(logSerial()) << "Got rigcaps for:" << caps->modelName;
|
||||
}
|
||||
this->rigCaps = caps;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "rigidentities.h"
|
||||
#include "wfviewtypes.h"
|
||||
#include "cachingqueue.h"
|
||||
|
||||
// This class abstracts the comm port in a useful way and connects to
|
||||
// the command creator and command parser.
|
||||
|
@ -30,7 +31,7 @@ private slots:
|
|||
void receiveDataIn(int fd); // from physical port
|
||||
void receiveDataFromRigToPtty(const QByteArray& data);
|
||||
void debugThis();
|
||||
void receiveFoundRigID(rigCapabilities rigCaps);
|
||||
void receiveRigCaps(rigCapabilities* rigCaps);
|
||||
|
||||
signals:
|
||||
void haveTextMessage(QString message); // status, debug only
|
||||
|
@ -73,7 +74,8 @@ private:
|
|||
bool disableTransceive = false;
|
||||
QSocketNotifier *ptReader = Q_NULLPTR;
|
||||
quint8 civId=0;
|
||||
rigCapabilities rigCaps;
|
||||
rigCapabilities* rigCaps = Q_NULLPTR;
|
||||
cachingQueue* queue = Q_NULLPTR;
|
||||
};
|
||||
|
||||
#endif // PTTYHANDLER_H
|
||||
|
|
|
@ -95,8 +95,6 @@ void rigCommander::commSetup(QHash<unsigned char,QString> rigList, unsigned char
|
|||
connect(this, SIGNAL(getMoreDebug()), comm, SLOT(debugThis()));
|
||||
connect(this, SIGNAL(getMoreDebug()), ptty, SLOT(debugThis()));
|
||||
|
||||
connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities)));
|
||||
|
||||
commonSetup();
|
||||
}
|
||||
|
||||
|
@ -170,8 +168,6 @@ void rigCommander::commSetup(QHash<unsigned char,QString> rigList, unsigned char
|
|||
connect(ptty, SIGNAL(havePortError(errorType)), this, SLOT(handlePortError(errorType)));
|
||||
connect(this, SIGNAL(getMoreDebug()), ptty, SLOT(debugThis()));
|
||||
|
||||
connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities)));
|
||||
|
||||
connect(udp, SIGNAL(requestRadioSelection(QList<radio_cap_packet>)), this, SLOT(radioSelection(QList<radio_cap_packet>)));
|
||||
connect(udp, SIGNAL(setRadioUsage(quint8, bool, quint8, QString, QString)), this, SLOT(radioUsage(quint8, bool, quint8, QString, QString)));
|
||||
connect(this, SIGNAL(selectedRadio(quint8)), udp, SLOT(setCurrentRadio(quint8)));
|
||||
|
|
|
@ -310,7 +310,9 @@ void rigCtlD::stopServer()
|
|||
|
||||
void rigCtlClient::receiveRigCaps(rigCapabilities* caps)
|
||||
{
|
||||
qInfo(logRigCtlD()) << "Got rigcaps for:" << caps->modelName;
|
||||
if (caps != Q_NULLPTR) {
|
||||
qInfo(logRigCtlD()) << "Got rigcaps for:" << caps->modelName;
|
||||
}
|
||||
this->rigCaps = caps;
|
||||
}
|
||||
|
||||
|
|
|
@ -278,7 +278,6 @@ public:
|
|||
|
||||
int startServer(qint16 port);
|
||||
void stopServer();
|
||||
rigCapabilities* rigCaps;
|
||||
|
||||
signals:
|
||||
void onStarted();
|
||||
|
@ -342,7 +341,7 @@ protected:
|
|||
|
||||
private:
|
||||
cachingQueue* queue;
|
||||
rigCapabilities* rigCaps;
|
||||
rigCapabilities* rigCaps=Q_NULLPTR;
|
||||
rigCtlD* parent;
|
||||
bool chkVfoEecuted=false;
|
||||
unsigned long crcTable[256];
|
||||
|
|
|
@ -33,11 +33,6 @@ transceiverAdjustments::transceiverAdjustments(QWidget *parent) :
|
|||
|
||||
transceiverAdjustments::~transceiverAdjustments()
|
||||
{
|
||||
rigCaps.inputs.clear();
|
||||
rigCaps.preamps.clear();
|
||||
rigCaps.attenuators.clear();
|
||||
rigCaps.antennas.clear();
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
|
|
@ -1235,7 +1235,7 @@ void usbController::sendRequest(USBDEVICE *dev, usbFeatureType feature, int val,
|
|||
{
|
||||
|
||||
myImage.save(&butBuffer, "BMP");
|
||||
quint16 payloadLen = dev->type.maxPayload - sizeof(streamdeck_v1_image_header);
|
||||
quint16 payloadLen = dev->type.maxPayload - quint16(sizeof(streamdeck_v1_image_header));
|
||||
|
||||
if (dev->type.model == usbDeviceType::StreamDeckOriginal) {
|
||||
// Special case for buttons on original StreamDeck
|
||||
|
|
621
wfmain.cpp
621
wfmain.cpp
|
@ -88,7 +88,6 @@ wfmain::wfmain(const QString settingsFile, const QString logFile, bool debugMode
|
|||
cal = new calibrationWindow();
|
||||
rpt = new repeaterSetup();
|
||||
sat = new satelliteSetup();
|
||||
trxadj = new transceiverAdjustments();
|
||||
cw = new cwSender();
|
||||
abtBox = new aboutbox();
|
||||
selRad = new selectRadio();
|
||||
|
@ -141,8 +140,6 @@ wfmain::wfmain(const QString settingsFile, const QString logFile, bool debugMode
|
|||
qRegisterMetaType<centerSpanData>();
|
||||
qRegisterMetaType<bandStackType>();
|
||||
|
||||
haveRigCaps = false;
|
||||
|
||||
this->setObjectName("wfmain");
|
||||
queue = cachingQueue::getInstance(this);
|
||||
|
||||
|
@ -214,6 +211,8 @@ wfmain::wfmain(const QString settingsFile, const QString logFile, bool debugMode
|
|||
ConnectionTimer.setSingleShot(true);
|
||||
connect(&ConnectionTimer,SIGNAL(timeout()), this,SLOT(connectionTimeout()));
|
||||
|
||||
// Make sure we know about any changes to rigCaps
|
||||
connect(queue, SIGNAL(rigCapsUpdated(rigCapabilities*)), this, SLOT(receiveRigCaps(rigCapabilities*)));
|
||||
|
||||
setupKeyShortcuts();
|
||||
|
||||
|
@ -485,7 +484,7 @@ void wfmain::makeRig()
|
|||
connect(this, SIGNAL(sendChangeLatency(quint16)), rig, SLOT(changeLatency(quint16)));
|
||||
connect(this, SIGNAL(getRigCIV()), rig, SLOT(findRigs()));
|
||||
connect(this, SIGNAL(setRigID(unsigned char)), rig, SLOT(setRigID(unsigned char)));
|
||||
connect(rig, SIGNAL(discoveredRigID(rigCapabilities)), this, SLOT(receiveFoundRigID(rigCapabilities)));
|
||||
|
||||
connect(rig, SIGNAL(commReady()), this, SLOT(receiveCommReady()));
|
||||
|
||||
|
||||
|
@ -512,7 +511,7 @@ void wfmain::makeRig()
|
|||
//connect(this, SIGNAL(getSatMemory(quint32)), rig, SLOT(getSatMemory(quint32)));
|
||||
//connect(this, SIGNAL(setMemory(memoryType)), rig, SLOT(setMemory(memoryType)));
|
||||
//connect(this, SIGNAL(clearMemory(quint32)), rig, SLOT(clearMemory(quint32)));
|
||||
//connect(this, SIGNAL(recallMemory(quint32)), rig, SLOT(recallMemory(quint32)));
|
||||
//connect(this, SIGNAL(rigCaps->ry(quint32)), rig, SLOT(rigCaps->ry(quint32)));
|
||||
|
||||
connect(this->rpt, &repeaterSetup::setDuplexMode, this->rig,
|
||||
[=](const duplexMode_t &t) { queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(t),false));});
|
||||
|
@ -550,7 +549,7 @@ void wfmain::makeRig()
|
|||
|
||||
connect(this->rpt, &repeaterSetup::getRptAccessMode, this->rig,
|
||||
[=]() {
|
||||
if (rigCaps.commands.contains(funcToneSquelchType)) {
|
||||
if (rigCaps->commands.contains(funcToneSquelchType)) {
|
||||
queue->add(priorityImmediate,funcToneSquelchType,false,false);
|
||||
} else {
|
||||
queue->add(priorityImmediate,funcRepeaterTone,false,false);
|
||||
|
@ -565,7 +564,7 @@ void wfmain::makeRig()
|
|||
|
||||
connect(this->rpt, &repeaterSetup::setRptAccessMode, this->rig,
|
||||
[=](const rptrAccessData &rd) {
|
||||
if (rigCaps.commands.contains(funcToneSquelchType)) {
|
||||
if (rigCaps->commands.contains(funcToneSquelchType)) {
|
||||
queue->add(priorityImmediate,queueItem(funcToneSquelchType,QVariant::fromValue<rptrAccessData>(rd),false));
|
||||
} else {
|
||||
if(rd.accessMode == ratrTN) {
|
||||
|
@ -747,21 +746,6 @@ void wfmain::receiveCommReady()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void wfmain::receiveFoundRigID(rigCapabilities rigCaps)
|
||||
{
|
||||
// Entry point for unknown rig being identified at the start of the program.
|
||||
//now we know what the rig ID is:
|
||||
//qInfo(logSystem()) << "In wfview, we now have a reply to our request for rig identity sent to CIV BROADCAST.";
|
||||
|
||||
receiveRigID(rigCaps);
|
||||
|
||||
initPeriodicCommands();
|
||||
getInitialRigState();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void wfmain::receivePortError(errorType err)
|
||||
{
|
||||
if (err.alert) {
|
||||
|
@ -1027,7 +1011,7 @@ void wfmain::setServerToPrefs()
|
|||
|
||||
emit initServer();
|
||||
|
||||
connect(this, SIGNAL(sendRigCaps(rigCapabilities)), udp, SLOT(receiveRigCaps(rigCapabilities)));
|
||||
//connect(this, SIGNAL(sendRigCaps(rigCapabilities)), udp, SLOT(receiveRigCaps(rigCapabilities)));
|
||||
|
||||
ui->statusBar->showMessage(QString("Server enabled"), 1000);
|
||||
|
||||
|
@ -1053,7 +1037,7 @@ void wfmain::configureVFOs()
|
|||
vfos.clear();
|
||||
}
|
||||
|
||||
for(uchar i=0;i<rigCaps.numVFO;i++)
|
||||
for(uchar i=0;i<rigCaps->numVFO;i++)
|
||||
{
|
||||
spectrumScope* vfo = new spectrumScope;
|
||||
|
||||
|
@ -1222,7 +1206,7 @@ void wfmain::setupKeyShortcuts()
|
|||
// Alternate for plus:
|
||||
keyK = new QShortcut(this);
|
||||
keyK->setKey(Qt::Key_K);
|
||||
connect(keyK, &QShortcut::activated,
|
||||
connect(keyK, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
this->shortcutPlus();
|
||||
|
@ -1231,7 +1215,7 @@ void wfmain::setupKeyShortcuts()
|
|||
// Alternate for minus:
|
||||
keyJ = new QShortcut(this);
|
||||
keyJ->setKey(Qt::Key_J);
|
||||
connect(keyJ, &QShortcut::activated,
|
||||
connect(keyJ, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
this->shortcutMinus();
|
||||
|
@ -1239,7 +1223,7 @@ void wfmain::setupKeyShortcuts()
|
|||
|
||||
keyShiftK = new QShortcut(this);
|
||||
keyShiftK->setKey(Qt::SHIFT | Qt::Key_K);
|
||||
connect(keyShiftK, &QShortcut::activated,
|
||||
connect(keyShiftK, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
this->shortcutShiftPlus();
|
||||
|
@ -1248,7 +1232,7 @@ void wfmain::setupKeyShortcuts()
|
|||
|
||||
keyShiftJ = new QShortcut(this);
|
||||
keyShiftJ->setKey(Qt::SHIFT | Qt::Key_J);
|
||||
connect(keyShiftJ, &QShortcut::activated,
|
||||
connect(keyShiftJ, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
this->shortcutShiftMinus();
|
||||
|
@ -1256,7 +1240,7 @@ void wfmain::setupKeyShortcuts()
|
|||
|
||||
keyControlK = new QShortcut(this);
|
||||
keyControlK->setKey(Qt::CTRL | Qt::Key_K);
|
||||
connect(keyControlK, &QShortcut::activated,
|
||||
connect(keyControlK, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
this->shortcutControlPlus();
|
||||
|
@ -1265,7 +1249,7 @@ void wfmain::setupKeyShortcuts()
|
|||
|
||||
keyControlJ = new QShortcut(this);
|
||||
keyControlJ->setKey(Qt::CTRL | Qt::Key_J);
|
||||
connect(keyControlJ, &QShortcut::activated,
|
||||
connect(keyControlJ, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
this->shortcutControlMinus();
|
||||
|
@ -1274,7 +1258,7 @@ void wfmain::setupKeyShortcuts()
|
|||
// H = Down
|
||||
keyH = new QShortcut(this);
|
||||
keyH->setKey(Qt::Key_H);
|
||||
connect(keyH, &QShortcut::activated,
|
||||
connect(keyH, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
|
||||
|
@ -1289,7 +1273,7 @@ void wfmain::setupKeyShortcuts()
|
|||
// L = Up
|
||||
keyL = new QShortcut(this);
|
||||
keyL->setKey(Qt::Key_L);
|
||||
connect(keyL, &QShortcut::activated,
|
||||
connect(keyL, &QShortcut::activated, this,
|
||||
[=]() {
|
||||
if (freqLock) return;
|
||||
|
||||
|
@ -1391,31 +1375,31 @@ void wfmain::buttonControl(const COMMAND* cmd)
|
|||
switch (cmd->command) {
|
||||
case funcBandStackReg:
|
||||
if (cmd->value == 100) {
|
||||
for (size_t i = 0; i < rigCaps.bands.size(); i++) {
|
||||
if (rigCaps.bands[i].band == lastRequestedBand)
|
||||
for (size_t i = 0; i < rigCaps->bands.size(); i++) {
|
||||
if (rigCaps->bands[i].band == lastRequestedBand)
|
||||
{
|
||||
if (i > 0) {
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps.bands[i - 1].band);
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps->bands[i - 1].band);
|
||||
}
|
||||
else {
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps.bands[rigCaps.bands.size() - 1].band);
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps->bands[rigCaps->bands.size() - 1].band);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (cmd->value == -100) {
|
||||
for (size_t i = 0; i < rigCaps.bands.size(); i++) {
|
||||
if (rigCaps.bands[i].band == lastRequestedBand)
|
||||
for (size_t i = 0; i < rigCaps->bands.size(); i++) {
|
||||
if (rigCaps->bands[i].band == lastRequestedBand)
|
||||
{
|
||||
if (i + 1 < rigCaps.bands.size()) {
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps.bands[i + 1].band);
|
||||
if (i + 1 < rigCaps->bands.size()) {
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps->bands[i + 1].band);
|
||||
}
|
||||
else {
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps.bands[0].band);
|
||||
//issueCmd(cmdGetBandStackReg, rigCaps->bands[0].band);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (auto &band: rigCaps.bands)
|
||||
for (auto &band: rigCaps->bands)
|
||||
{
|
||||
if (band.band == cmd->value)
|
||||
{
|
||||
|
@ -1426,26 +1410,26 @@ void wfmain::buttonControl(const COMMAND* cmd)
|
|||
break;
|
||||
case funcModeSet:
|
||||
if (cmd->value == 100) {
|
||||
for (size_t i = 0; i < rigCaps.modes.size(); i++) {
|
||||
if (rigCaps.modes[i].mk == currentModeInfo.mk)
|
||||
for (size_t i = 0; i < rigCaps->modes.size(); i++) {
|
||||
if (rigCaps->modes[i].mk == currentModeInfo.mk)
|
||||
{
|
||||
if (i + 1 < rigCaps.modes.size()) {
|
||||
changeMode(rigCaps.modes[i + 1].mk);
|
||||
if (i + 1 < rigCaps->modes.size()) {
|
||||
changeMode(rigCaps->modes[i + 1].mk);
|
||||
}
|
||||
else {
|
||||
changeMode(rigCaps.modes[0].mk);
|
||||
changeMode(rigCaps->modes[0].mk);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (cmd->value == -100) {
|
||||
for (size_t i = 0; i < rigCaps.modes.size(); i++) {
|
||||
if (rigCaps.modes[i].mk == currentModeInfo.mk)
|
||||
for (size_t i = 0; i < rigCaps->modes.size(); i++) {
|
||||
if (rigCaps->modes[i].mk == currentModeInfo.mk)
|
||||
{
|
||||
if (i>0) {
|
||||
changeMode(rigCaps.modes[i - 1].mk);
|
||||
changeMode(rigCaps->modes[i - 1].mk);
|
||||
}
|
||||
else {
|
||||
changeMode(rigCaps.modes[rigCaps.modes.size()-1].mk);
|
||||
changeMode(rigCaps->modes[rigCaps->modes.size()-1].mk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3284,7 +3268,7 @@ void wfmain::on_tuningStepCombo_currentIndexChanged(int index)
|
|||
|
||||
tsWfScrollHz = ui->tuningStepCombo->itemData(index).toUInt();
|
||||
tsKnobHz = ui->tuningStepCombo->itemData(index).toUInt();
|
||||
for (auto &s: rigCaps.steps) {
|
||||
for (auto &s: rigCaps->steps) {
|
||||
if (tsWfScrollHz == s.hz)
|
||||
{
|
||||
foreach (auto vfo, vfos)
|
||||
|
@ -3509,25 +3493,25 @@ void wfmain:: getInitialRigState()
|
|||
queue->del(funcTransceiverId); // This command is no longer required
|
||||
|
||||
/*
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcSelectedFreq)?funcSelectedFreq:funcFreqGet),false);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcSelectedMode)?funcSelectedMode:funcModeGet),false);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcUnselectedFreq)?funcUnselectedFreq:funcNone),false,true);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcUnselectedMode)?funcUnselectedMode:funcNone),false,true);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcSelectedFreq)?funcSelectedFreq:funcFreqGet),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcSelectedMode)?funcSelectedMode:funcModeGet),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcUnselectedFreq)?funcUnselectedFreq:funcNone),false,true);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcUnselectedMode)?funcUnselectedMode:funcNone),false,true);
|
||||
|
||||
// From left to right in the UI:
|
||||
if (rigCaps.hasTransmit)
|
||||
if (rigCaps->hasTransmit)
|
||||
{
|
||||
queue->add(priorityImmediate,funcDataModeWithFilter);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcDATAOffMod)?funcDATAOffMod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcDATA1Mod)?funcDATA1Mod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcDATA2Mod)?funcDATA2Mod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcDATA3Mod)?funcDATA3Mod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcRFPower)?funcRFPower:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcDATAOffMod)?funcDATAOffMod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcDATA1Mod)?funcDATA1Mod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcDATA2Mod)?funcDATA2Mod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcDATA3Mod)?funcDATA3Mod:funcNone),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcRFPower)?funcRFPower:funcNone),false);
|
||||
queue->add(priorityImmediate,getInputTypeCommand(currentModDataOffSrc.type),false);
|
||||
queue->add(priorityImmediate,getInputTypeCommand(currentModData1Src.type),false);
|
||||
if (rigCaps.commands.contains(funcDATA2Mod))
|
||||
if (rigCaps->commands.contains(funcDATA2Mod))
|
||||
queue->add(priorityImmediate,getInputTypeCommand(currentModData2Src.type),false);
|
||||
if (rigCaps.commands.contains(funcDATA3Mod))
|
||||
if (rigCaps->commands.contains(funcDATA3Mod))
|
||||
queue->add(priorityImmediate,getInputTypeCommand(currentModData3Src.type),false);
|
||||
}
|
||||
|
||||
|
@ -3540,21 +3524,21 @@ void wfmain:: getInitialRigState()
|
|||
queue->add(priorityImmediate,funcMonitorGain,false);
|
||||
|
||||
*/
|
||||
if(rigCaps.hasSpectrum)
|
||||
if(rigCaps->hasSpectrum)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcScopeOnOff,QVariant::fromValue(quint8(1)),false));
|
||||
queue->add(priorityImmediate,queueItem(funcScopeDataOutput,QVariant::fromValue(quint8(1)),false));
|
||||
|
||||
// Find the scope ref limits
|
||||
auto mr = rigCaps.commands.find(funcScopeMainRef);
|
||||
if (mr != rigCaps.commands.end())
|
||||
auto mr = rigCaps->commands.find(funcScopeMainRef);
|
||||
if (mr != rigCaps->commands.end())
|
||||
{
|
||||
vfos[0]->setRefLimits(mr.value().minVal,mr.value().maxVal);
|
||||
queue->add(priorityImmediate,(funcScopeMainRef),false,false);
|
||||
}
|
||||
|
||||
auto sr = rigCaps.commands.find(funcScopeSubRef);
|
||||
if (sr != rigCaps.commands.end())
|
||||
auto sr = rigCaps->commands.find(funcScopeSubRef);
|
||||
if (sr != rigCaps->commands.end())
|
||||
{
|
||||
if (vfos.size()>1)
|
||||
vfos[1]->setRefLimits(sr.value().minVal,sr.value().maxVal);
|
||||
|
@ -3564,14 +3548,14 @@ void wfmain:: getInitialRigState()
|
|||
|
||||
|
||||
// Only show settingsgroup if rig has sub
|
||||
ui->scopeSettingsGroup->setVisible(rigCaps.commands.contains(funcScopeSubWaveData));
|
||||
ui->scopeSettingsGroup->setVisible(rigCaps->commands.contains(funcScopeSubWaveData));
|
||||
|
||||
ui->scopeDualBtn->setVisible(rigCaps.commands.contains(funcScopeSingleDual));
|
||||
ui->antennaGroup->setVisible(rigCaps.commands.contains(funcAntenna));
|
||||
ui->preampAttGroup->setVisible(rigCaps.commands.contains(funcPreamp));
|
||||
ui->scopeDualBtn->setVisible(rigCaps->commands.contains(funcScopeSingleDual));
|
||||
ui->antennaGroup->setVisible(rigCaps->commands.contains(funcAntenna));
|
||||
ui->preampAttGroup->setVisible(rigCaps->commands.contains(funcPreamp));
|
||||
quint64 start=UINT64_MAX;
|
||||
quint64 end=0;
|
||||
for (auto &band: rigCaps.bands)
|
||||
for (auto &band: rigCaps->bands)
|
||||
{
|
||||
if (start > band.lowFreq)
|
||||
start = band.lowFreq;
|
||||
|
@ -3580,60 +3564,60 @@ void wfmain:: getInitialRigState()
|
|||
}
|
||||
foreach (auto vfo, vfos)
|
||||
{
|
||||
vfo->enableScope(this->rigCaps.commands.contains(funcScopeMainMode));
|
||||
vfo->displaySettings(0, start, end, 1,(FctlUnit)prefs.frequencyUnits,&rigCaps.bands);
|
||||
vfo->enableScope(this->rigCaps->commands.contains(funcScopeMainMode));
|
||||
vfo->displaySettings(0, start, end, 1,(FctlUnit)prefs.frequencyUnits,&rigCaps->bands);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
if (rigCaps.commands.contains(funcFilterWidth))
|
||||
if (rigCaps->commands.contains(funcFilterWidth))
|
||||
queue->add(priorityHigh,funcFilterWidth,false);
|
||||
|
||||
|
||||
if (rigCaps.commands.contains(funcSplitStatus))
|
||||
if (rigCaps->commands.contains(funcSplitStatus))
|
||||
queue->add(priorityHigh,funcSplitStatus,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcTuningStep))
|
||||
if(rigCaps->commands.contains(funcTuningStep))
|
||||
queue->add(priorityImmediate,funcTuningStep,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcRepeaterTone))
|
||||
if(rigCaps->commands.contains(funcRepeaterTone))
|
||||
{
|
||||
queue->add(priorityImmediate,funcRepeaterTone,false);
|
||||
queue->add(priorityImmediate,funcRepeaterTSQL,false);
|
||||
}
|
||||
|
||||
if(rigCaps.commands.contains(funcRepeaterDTCS))
|
||||
if(rigCaps->commands.contains(funcRepeaterDTCS))
|
||||
queue->add(priorityImmediate,funcRepeaterDTCS,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcToneSquelchType))
|
||||
if(rigCaps->commands.contains(funcToneSquelchType))
|
||||
queue->add(priorityImmediate,funcToneSquelchType,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcAntenna))
|
||||
if(rigCaps->commands.contains(funcAntenna))
|
||||
queue->add(priorityImmediate,funcAntenna,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcAttenuator))
|
||||
if(rigCaps->commands.contains(funcAttenuator))
|
||||
queue->add(priorityImmediate,funcAttenuator,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcPreamp))
|
||||
if(rigCaps->commands.contains(funcPreamp))
|
||||
queue->add(priorityImmediate,funcPreamp,false);
|
||||
|
||||
if (rigCaps.commands.contains(funcRitStatus))
|
||||
if (rigCaps->commands.contains(funcRitStatus))
|
||||
{
|
||||
queue->add(priorityImmediate,funcRITFreq,false);
|
||||
queue->add(priorityImmediate,funcRitStatus,false);
|
||||
}
|
||||
|
||||
if(rigCaps.commands.contains(funcIFShift))
|
||||
if(rigCaps->commands.contains(funcIFShift))
|
||||
queue->add(priorityImmediate,funcIFShift,false);
|
||||
|
||||
if(rigCaps.commands.contains(funcPBTInner) && rigCaps.commands.contains(funcPBTOuter))
|
||||
if(rigCaps->commands.contains(funcPBTInner) && rigCaps->commands.contains(funcPBTOuter))
|
||||
{
|
||||
queue->add(priorityImmediate,funcPBTInner,false);
|
||||
queue->add(priorityImmediate,funcPBTOuter,false);
|
||||
}
|
||||
|
||||
if(rigCaps.commands.contains(funcTunerStatus))
|
||||
if(rigCaps->commands.contains(funcTunerStatus))
|
||||
queue->add(priorityImmediate,funcTunerStatus,false);
|
||||
|
||||
*/
|
||||
|
@ -3791,223 +3775,6 @@ void wfmain::setDefaultColors(int presetNumber)
|
|||
//ui->colorPresetCombo->setItemText(presetNumber, *(p->presetName));
|
||||
}
|
||||
|
||||
void wfmain::receiveRigID(rigCapabilities rigCaps)
|
||||
{
|
||||
// We have heard from the rig, so if the connection is pending, stop the timer immediately
|
||||
ConnectionTimer.stop();
|
||||
|
||||
// Note: We intentionally request rigID several times
|
||||
// because without rigID, we can't do anything with the waterfall.
|
||||
bandbtns->acceptRigCaps(rigCaps);
|
||||
|
||||
if(haveRigCaps)
|
||||
{
|
||||
// Note: This line makes it difficult to accept a different radio connecting.
|
||||
return;
|
||||
} else {
|
||||
|
||||
showStatusBarText(QString("Found radio at address 0x%1 of name %2 and model ID %3.").arg(rigCaps.civ,2,16).arg(rigCaps.modelName).arg(rigCaps.modelID));
|
||||
|
||||
qDebug(logSystem()) << "Rig name: " << rigCaps.modelName;
|
||||
qDebug(logSystem()) << "Has LAN capabilities: " << rigCaps.hasLan;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: spectLenMax: " << rigCaps.spectLenMax;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: spectAmpMax: " << rigCaps.spectAmpMax;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: spectSeqMax: " << rigCaps.spectSeqMax;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: hasSpectrum: " << rigCaps.hasSpectrum;
|
||||
|
||||
this->rigCaps = rigCaps;
|
||||
|
||||
configureVFOs(); // Now we have a rig connection, need to configure the VFOs
|
||||
|
||||
rigName->setText(rigCaps.modelName);
|
||||
if (serverConfig.enabled) {
|
||||
serverConfig.rigs.first()->modelName = rigCaps.modelName;
|
||||
serverConfig.rigs.first()->rigName = rigCaps.modelName;
|
||||
serverConfig.rigs.first()->civAddr = rigCaps.civ;
|
||||
serverConfig.rigs.first()->baudRate = rigCaps.baudRate;
|
||||
}
|
||||
setWindowTitle(rigCaps.modelName);
|
||||
|
||||
if(rigCaps.hasSpectrum)
|
||||
{
|
||||
foreach (auto vfo, vfos)
|
||||
{
|
||||
vfo->prepareScope(rigCaps.spectAmpMax, rigCaps.spectLenMax);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
trxadj->setRig(rigCaps);
|
||||
|
||||
foreach (auto vfo, vfos) {
|
||||
// Setup various combo box up for each VFO:
|
||||
vfo->clearMode();
|
||||
for (auto &m: rigCaps.modes)
|
||||
{
|
||||
//ui->modeSelectCombo->addItem(m.name, m.mk);
|
||||
vfo->addMode("Mode "+m.name,QVariant::fromValue(m));
|
||||
}
|
||||
|
||||
vfo->clearFilter();
|
||||
for (auto& f: rigCaps.filters)
|
||||
{
|
||||
vfo->addFilter(f.name,f.num);
|
||||
}
|
||||
|
||||
vfo->clearData();
|
||||
|
||||
vfo->addData("Data Off",0);
|
||||
|
||||
if (rigCaps.commands.contains(funcDATA1Mod))
|
||||
{
|
||||
setupui->updateModSourceList(1, rigCaps.inputs);
|
||||
if (!rigCaps.commands.contains(funcDATA2Mod))
|
||||
{
|
||||
vfo->addData("Data On", 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (rigCaps.commands.contains(funcDATA2Mod))
|
||||
{
|
||||
setupui->updateModSourceList(2, rigCaps.inputs);
|
||||
vfo->addData("Data 1", 2);
|
||||
vfo->addData("Data 2", 2);
|
||||
}
|
||||
|
||||
if (rigCaps.commands.contains(funcDATA3Mod))
|
||||
{
|
||||
setupui->updateModSourceList(3, rigCaps.inputs);
|
||||
vfo->addData("Data 3", 3);
|
||||
}
|
||||
|
||||
vfo->clearSpans();
|
||||
if(rigCaps.hasSpectrum)
|
||||
{
|
||||
for(unsigned int i=0; i < rigCaps.scopeCenterSpans.size(); i++)
|
||||
{
|
||||
vfo->addSpan(rigCaps.scopeCenterSpans.at(i).name, QVariant::fromValue(rigCaps.scopeCenterSpans.at(i)));
|
||||
}
|
||||
vfo->setRange(prefs.mainPlotFloor, prefs.mainPlotCeiling);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the tuning step combo box up:
|
||||
ui->tuningStepCombo->blockSignals(true);
|
||||
ui->tuningStepCombo->clear();
|
||||
for (auto &s: rigCaps.steps)
|
||||
{
|
||||
ui->tuningStepCombo->addItem(s.name, s.hz);
|
||||
}
|
||||
|
||||
ui->tuningStepCombo->setCurrentIndex(2);
|
||||
ui->tuningStepCombo->blockSignals(false);
|
||||
|
||||
setupui->updateModSourceList(0, rigCaps.inputs);
|
||||
|
||||
|
||||
ui->attSelCombo->clear();
|
||||
if(rigCaps.commands.contains(funcAttenuator))
|
||||
{
|
||||
ui->attSelCombo->setDisabled(false);
|
||||
for (auto &att: rigCaps.attenuators)
|
||||
{
|
||||
ui->attSelCombo->addItem(((att == 0) ? QString("0 dB") : QString("-%1 dB").arg(att)),att);
|
||||
}
|
||||
} else {
|
||||
ui->attSelCombo->setDisabled(true);
|
||||
}
|
||||
|
||||
ui->preampSelCombo->clear();
|
||||
if(rigCaps.commands.contains(funcPreamp))
|
||||
{
|
||||
ui->preampSelCombo->setDisabled(false);
|
||||
for (auto &pre: rigCaps.preamps)
|
||||
{
|
||||
ui->preampSelCombo->addItem(pre.name, pre.num);
|
||||
}
|
||||
} else {
|
||||
ui->preampSelCombo->setDisabled(true);
|
||||
}
|
||||
|
||||
ui->antennaSelCombo->clear();
|
||||
if(rigCaps.commands.contains(funcAntenna))
|
||||
{
|
||||
ui->antennaSelCombo->setDisabled(false);
|
||||
for (auto &ant: rigCaps.antennas)
|
||||
{
|
||||
ui->antennaSelCombo->addItem(ant.name,ant.num);
|
||||
}
|
||||
} else {
|
||||
ui->antennaSelCombo->setDisabled(true);
|
||||
}
|
||||
|
||||
ui->rxAntennaCheck->setEnabled(rigCaps.commands.contains(funcRXAntenna));
|
||||
ui->rxAntennaCheck->setChecked(false);
|
||||
|
||||
//ui->scopeBWCombo->blockSignals(true);
|
||||
//ui->scopeBWCombo->clear();
|
||||
|
||||
ui->tuneEnableChk->setEnabled(rigCaps.commands.contains(funcTunerStatus));
|
||||
ui->tuneNowBtn->setEnabled(rigCaps.commands.contains(funcTunerStatus));
|
||||
|
||||
ui->memoriesBtn->setEnabled(rigCaps.commands.contains(funcMemoryContents));
|
||||
|
||||
//ui->useRTSforPTTchk->setChecked(prefs.forceRTSasPTT);
|
||||
|
||||
// ui->audioSystemCombo->setEnabled(false);
|
||||
//ui->audioSystemServerCombo->setEnabled(false);
|
||||
|
||||
ui->connectBtn->setText("Disconnect from Radio"); // We must be connected now.
|
||||
connStatus = connConnected;
|
||||
if(usingLAN)
|
||||
{
|
||||
ui->afGainSlider->setValue(prefs.localAFgain);
|
||||
emit sendLevel(funcAfGain,prefs.localAFgain);
|
||||
}
|
||||
// Adding these here because clearly at this point we have valid
|
||||
// rig comms. In the future, we should establish comms and then
|
||||
// do all the initial grabs. For now, this hack of adding them here and there:
|
||||
// recalculate command timing now that we know the rig better:
|
||||
if(prefs.polling_ms != 0)
|
||||
{
|
||||
changePollTiming(prefs.polling_ms, true);
|
||||
} else {
|
||||
calculateTimingParameters();
|
||||
}
|
||||
|
||||
// Set the second meter here as I suspect we need to be connected for it to work?
|
||||
changeMeterType(prefs.meter2Type, 2);
|
||||
changeMeterType(prefs.meter3Type, 3);
|
||||
ui->meter2Widget->blockMeterType(prefs.meter3Type);
|
||||
ui->meter3Widget->blockMeterType(prefs.meter2Type);
|
||||
ui->meter2Widget->setCompReverse(prefs.compMeterReverse);
|
||||
ui->meter3Widget->setCompReverse(prefs.compMeterReverse);
|
||||
|
||||
|
||||
|
||||
// for (int i = 0; i < ui->meter2selectionCombo->count(); i++)
|
||||
// {
|
||||
// if (static_cast<meter_t>(ui->meter2selectionCombo->itemData(i).toInt()) == prefs.meter2Type)
|
||||
// {
|
||||
// // I thought that setCurrentIndex() would call the activated() function for the combobox
|
||||
// // but it doesn't, so call it manually.
|
||||
// //ui->meter2selectionCombo->setCurrentIndex(i);
|
||||
// changeMeter2Type(i);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void wfmain::initPeriodicCommands()
|
||||
{
|
||||
// This function places periodic polling commands into the queue.
|
||||
|
@ -4017,9 +3784,9 @@ void wfmain::initPeriodicCommands()
|
|||
|
||||
queue->clear();
|
||||
|
||||
foreach (auto cap, rigCaps.periodic) {
|
||||
foreach (auto cap, rigCaps->periodic) {
|
||||
if (cap.vfo == -1) {
|
||||
for (uchar v=0;v<rigCaps.numVFO;v++)
|
||||
for (uchar v=0;v<rigCaps->numVFO;v++)
|
||||
{
|
||||
qDebug(logSystem()) << "Inserting command" << funcString[cap.func] << "priority" << cap.priority << "on VFO" << QString::number(v);
|
||||
queue->add(queuePriority(cap.prioVal),cap.func,true,v);
|
||||
|
@ -4034,11 +3801,11 @@ void wfmain::initPeriodicCommands()
|
|||
/*
|
||||
queue->add(priorityMedium,funcSelectedFreq,true,false);
|
||||
queue->add(priorityMedium,funcSelectedMode,true,false);
|
||||
//queue->add(priorityMedium,(rigCaps.commands.contains(funcSelectedMode)?funcNone:funcDataModeWithFilter),true,false);
|
||||
//queue->add(priorityMedium,(rigCaps->commands.contains(funcSelectedMode)?funcNone:funcDataModeWithFilter),true,false);
|
||||
queue->add(priorityMedium,funcUnselectedFreq,true,true);
|
||||
queue->add(priorityMedium,funcUnselectedMode,true,true);
|
||||
|
||||
if (rigCaps.hasSpectrum)
|
||||
if (rigCaps->hasSpectrum)
|
||||
{
|
||||
queue->add(priorityHigh,funcOverflowStatus,true,false);
|
||||
queue->add(priorityMediumHigh,funcScopeMainMode,true,false);
|
||||
|
@ -4054,7 +3821,7 @@ void wfmain::initPeriodicCommands()
|
|||
queue->add(priorityMedium,funcVFODualWatch,true,false);
|
||||
}
|
||||
|
||||
if(rigCaps.hasTransmit) {
|
||||
if(rigCaps->hasTransmit) {
|
||||
queue->add(priorityHigh,funcTransceiverStatus,true,false);
|
||||
queue->add(priorityMediumHigh,funcDATAOffMod,true,false);
|
||||
queue->add(priorityMediumHigh,funcDATA1Mod,true,false);
|
||||
|
@ -4189,7 +3956,7 @@ void wfmain::changeMode(rigMode_t mode)
|
|||
|
||||
void wfmain::changeMode(rigMode_t mode, unsigned char data)
|
||||
{
|
||||
for (modeInfo &mi: rigCaps.modes)
|
||||
for (modeInfo &mi: rigCaps->modes)
|
||||
{
|
||||
if (mi.mk == mode)
|
||||
{
|
||||
|
@ -4199,8 +3966,8 @@ void wfmain::changeMode(rigMode_t mode, unsigned char data)
|
|||
m.VFO=selVFO_t::activeVFO;
|
||||
if((m.mk != currentModeInfo.mk) && prefs.automaticSidebandSwitching)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem((rigCaps.commands.contains(funcSelectedMode)?funcSelectedMode:funcModeGet),QVariant::fromValue<modeInfo>(m),false));
|
||||
if (!rigCaps.commands.contains(funcSelectedMode))
|
||||
queue->add(priorityImmediate,queueItem((rigCaps->commands.contains(funcSelectedMode)?funcSelectedMode:funcModeGet),QVariant::fromValue<modeInfo>(m),false));
|
||||
if (!rigCaps->commands.contains(funcSelectedMode))
|
||||
queue->add(priorityImmediate,queueItem(funcDataModeWithFilter,QVariant::fromValue<modeInfo>(m),false));
|
||||
}
|
||||
usingDataMode = data;
|
||||
|
@ -4208,7 +3975,7 @@ void wfmain::changeMode(rigMode_t mode, unsigned char data)
|
|||
}
|
||||
}
|
||||
|
||||
queue->add(priorityImmediate,(rigCaps.commands.contains(funcSelectedMode)?funcSelectedMode:funcModeGet),false);
|
||||
queue->add(priorityImmediate,(rigCaps->commands.contains(funcSelectedMode)?funcSelectedMode:funcModeGet),false);
|
||||
}
|
||||
|
||||
void wfmain::on_freqDial_valueChanged(int value)
|
||||
|
@ -4361,7 +4128,6 @@ void wfmain::on_monitorLabel_linkActivated(const QString&)
|
|||
|
||||
void wfmain::receiveIFShift(unsigned char level)
|
||||
{
|
||||
trxadj->updateIFShift(level);
|
||||
emit sendLevel(funcIFShift,level);
|
||||
}
|
||||
|
||||
|
@ -4703,7 +4469,7 @@ void wfmain::receiveTuningStep(unsigned char step)
|
|||
{
|
||||
if (step > 0)
|
||||
{
|
||||
for (auto &s: rigCaps.steps)
|
||||
for (auto &s: rigCaps->steps)
|
||||
{
|
||||
if (step == s.num && ui->tuningStepCombo->currentData().toUInt() != s.hz) {
|
||||
qInfo(logSystem()) << QString("Received new Tuning Step %0").arg(s.name);
|
||||
|
@ -4926,7 +4692,7 @@ void wfmain::calculateTimingParameters()
|
|||
if(msMinTiming < 25)
|
||||
msMinTiming = 25;
|
||||
|
||||
if(haveRigCaps && rigCaps.hasFDcomms)
|
||||
if(rigCaps != Q_NULLPTR && rigCaps->hasFDcomms)
|
||||
{
|
||||
delayedCommand->setInterval( msMinTiming); // 20 byte message
|
||||
queue->interval(msMinTiming);
|
||||
|
@ -5159,10 +4925,10 @@ void wfmain::enableRigCtl(bool enabled)
|
|||
// Start rigctld
|
||||
rigCtl = new rigCtlD(this);
|
||||
rigCtl->startServer(prefs.rigCtlPort);
|
||||
if (rig != Q_NULLPTR) {
|
||||
// We are already connected to a rig.
|
||||
emit sendRigCaps(rigCaps);
|
||||
}
|
||||
//if (rig != Q_NULLPTR) {
|
||||
// // We are already connected to a rig.
|
||||
// emit sendRigCaps(rigCaps);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5387,7 +5153,7 @@ void wfmain::connectionHandler(bool connect)
|
|||
{
|
||||
queue->clear();
|
||||
emit sendCloseComm();
|
||||
haveRigCaps = false;
|
||||
|
||||
rigName->setText("NONE");
|
||||
connStatus = connDisconnected;
|
||||
|
||||
|
@ -5432,10 +5198,10 @@ void wfmain::on_cwButton_clicked()
|
|||
|
||||
void wfmain::on_memoriesBtn_clicked()
|
||||
{
|
||||
if (haveRigCaps) {
|
||||
if (rigCaps != Q_NULLPTR) {
|
||||
if (memWindow == Q_NULLPTR) {
|
||||
// Add slowload option for background loading.
|
||||
memWindow = new memories(rigCaps,false);
|
||||
memWindow = new memories(false);
|
||||
this->memWindow->connect(this, SIGNAL(haveMemory(memoryType)), memWindow, SLOT(receiveMemory(memoryType)));
|
||||
|
||||
this->memWindow->connect(this->memWindow, &memories::getMemory, rig,[=](const quint32 &mem) {
|
||||
|
@ -5768,13 +5534,13 @@ void wfmain::receiveValue(cacheItem val){
|
|||
|
||||
queue->add(priorityImmediate,queueItem(funcSelectedFreq,QVariant::fromValue<freqt>(bsr.freq),false));
|
||||
|
||||
for (auto &md: rigCaps.modes)
|
||||
for (auto &md: rigCaps->modes)
|
||||
{
|
||||
if (md.reg == bsr.mode) {
|
||||
md.filter=bsr.filter;
|
||||
md.data=bsr.data;
|
||||
queue->add(priorityImmediate,queueItem((rigCaps.commands.contains(funcSelectedMode)?funcSelectedMode:funcModeSet),QVariant::fromValue<modeInfo>(md),false));
|
||||
queue->add(priorityImmediate,queueItem((rigCaps.commands.contains(funcSelectedMode)?funcNone:funcDataModeWithFilter),QVariant::fromValue<modeInfo>(md),false));
|
||||
queue->add(priorityImmediate,queueItem((rigCaps->commands.contains(funcSelectedMode)?funcSelectedMode:funcModeSet),QVariant::fromValue<modeInfo>(md),false));
|
||||
queue->add(priorityImmediate,queueItem((rigCaps->commands.contains(funcSelectedMode)?funcNone:funcDataModeWithFilter),QVariant::fromValue<modeInfo>(md),false));
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -6085,6 +5851,205 @@ void wfmain::receiveElapsed(bool sub, qint64 us)
|
|||
mainElapsed = us;
|
||||
}
|
||||
|
||||
void wfmain::receiveRigCaps(rigCapabilities* caps)
|
||||
{
|
||||
this->rigCaps = caps;
|
||||
|
||||
// Convenient place to stop the connection timer as rigCaps has changed.
|
||||
ConnectionTimer.stop();
|
||||
|
||||
//bandbtns->acceptRigCaps(rigCaps);
|
||||
|
||||
if(caps == Q_NULLPTR)
|
||||
{
|
||||
// Note: This line makes it difficult to accept a different radio connecting.
|
||||
return;
|
||||
} else {
|
||||
|
||||
showStatusBarText(QString("Found radio at address 0x%1 of name %2 and model ID %3.").arg(rigCaps->civ,2,16).arg(rigCaps->modelName).arg(rigCaps->modelID));
|
||||
|
||||
qDebug(logSystem()) << "Rig name: " << rigCaps->modelName;
|
||||
qDebug(logSystem()) << "Has LAN capabilities: " << rigCaps->hasLan;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: spectLenMax: " << rigCaps->spectLenMax;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: spectAmpMax: " << rigCaps->spectAmpMax;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: spectSeqMax: " << rigCaps->spectSeqMax;
|
||||
qDebug(logSystem()) << "Rig ID received into wfmain: hasSpectrum: " << rigCaps->hasSpectrum;
|
||||
|
||||
configureVFOs(); // Now we have a rig connection, need to configure the VFOs
|
||||
|
||||
rigName->setText(rigCaps->modelName);
|
||||
if (serverConfig.enabled) {
|
||||
serverConfig.rigs.first()->modelName = rigCaps->modelName;
|
||||
serverConfig.rigs.first()->rigName = rigCaps->modelName;
|
||||
serverConfig.rigs.first()->civAddr = rigCaps->civ;
|
||||
serverConfig.rigs.first()->baudRate = rigCaps->baudRate;
|
||||
}
|
||||
setWindowTitle(rigCaps->modelName);
|
||||
|
||||
if(rigCaps->hasSpectrum)
|
||||
{
|
||||
foreach (auto vfo, vfos)
|
||||
{
|
||||
vfo->prepareScope(rigCaps->spectAmpMax, rigCaps->spectLenMax);
|
||||
}
|
||||
}
|
||||
|
||||
if (rigCaps->bands.size() > 0) {
|
||||
lastRequestedBand = rigCaps->bands[0].band;
|
||||
}
|
||||
|
||||
// Added so that server receives rig capabilities.
|
||||
//emit sendRigCaps(rigCaps);
|
||||
//rpt->setRig(rigCaps);
|
||||
|
||||
foreach (auto vfo, vfos) {
|
||||
// Setup various combo box up for each VFO:
|
||||
vfo->clearMode();
|
||||
for (auto &m: rigCaps->modes)
|
||||
{
|
||||
//ui->modeSelectCombo->addItem(m.name, m.mk);
|
||||
vfo->addMode("Mode "+m.name,QVariant::fromValue(m));
|
||||
}
|
||||
|
||||
vfo->clearFilter();
|
||||
for (auto& f: rigCaps->filters)
|
||||
{
|
||||
vfo->addFilter(f.name,f.num);
|
||||
}
|
||||
|
||||
vfo->clearData();
|
||||
|
||||
vfo->addData("Data Off",0);
|
||||
|
||||
if (rigCaps->commands.contains(funcDATA1Mod))
|
||||
{
|
||||
setupui->updateModSourceList(1, rigCaps->inputs);
|
||||
if (!rigCaps->commands.contains(funcDATA2Mod))
|
||||
{
|
||||
vfo->addData("Data On", 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (rigCaps->commands.contains(funcDATA2Mod))
|
||||
{
|
||||
setupui->updateModSourceList(2, rigCaps->inputs);
|
||||
vfo->addData("Data 1", 2);
|
||||
vfo->addData("Data 2", 2);
|
||||
}
|
||||
|
||||
if (rigCaps->commands.contains(funcDATA3Mod))
|
||||
{
|
||||
setupui->updateModSourceList(3, rigCaps->inputs);
|
||||
vfo->addData("Data 3", 3);
|
||||
}
|
||||
|
||||
vfo->clearSpans();
|
||||
if(rigCaps->hasSpectrum)
|
||||
{
|
||||
for(unsigned int i=0; i < rigCaps->scopeCenterSpans.size(); i++)
|
||||
{
|
||||
vfo->addSpan(rigCaps->scopeCenterSpans.at(i).name, QVariant::fromValue(rigCaps->scopeCenterSpans.at(i)));
|
||||
}
|
||||
vfo->setRange(prefs.mainPlotFloor, prefs.mainPlotCeiling);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the tuning step combo box up:
|
||||
ui->tuningStepCombo->blockSignals(true);
|
||||
ui->tuningStepCombo->clear();
|
||||
for (auto &s: rigCaps->steps)
|
||||
{
|
||||
ui->tuningStepCombo->addItem(s.name, s.hz);
|
||||
}
|
||||
|
||||
ui->tuningStepCombo->setCurrentIndex(2);
|
||||
ui->tuningStepCombo->blockSignals(false);
|
||||
|
||||
setupui->updateModSourceList(0, rigCaps->inputs);
|
||||
|
||||
|
||||
ui->attSelCombo->clear();
|
||||
if(rigCaps->commands.contains(funcAttenuator))
|
||||
{
|
||||
ui->attSelCombo->setDisabled(false);
|
||||
for (auto &att: rigCaps->attenuators)
|
||||
{
|
||||
ui->attSelCombo->addItem(((att == 0) ? QString("0 dB") : QString("-%1 dB").arg(att)),att);
|
||||
}
|
||||
} else {
|
||||
ui->attSelCombo->setDisabled(true);
|
||||
}
|
||||
|
||||
ui->preampSelCombo->clear();
|
||||
if(rigCaps->commands.contains(funcPreamp))
|
||||
{
|
||||
ui->preampSelCombo->setDisabled(false);
|
||||
for (auto &pre: rigCaps->preamps)
|
||||
{
|
||||
ui->preampSelCombo->addItem(pre.name, pre.num);
|
||||
}
|
||||
} else {
|
||||
ui->preampSelCombo->setDisabled(true);
|
||||
}
|
||||
|
||||
ui->antennaSelCombo->clear();
|
||||
if(rigCaps->commands.contains(funcAntenna))
|
||||
{
|
||||
ui->antennaSelCombo->setDisabled(false);
|
||||
for (auto &ant: rigCaps->antennas)
|
||||
{
|
||||
ui->antennaSelCombo->addItem(ant.name,ant.num);
|
||||
}
|
||||
} else {
|
||||
ui->antennaSelCombo->setDisabled(true);
|
||||
}
|
||||
|
||||
ui->rxAntennaCheck->setEnabled(rigCaps->commands.contains(funcRXAntenna));
|
||||
ui->rxAntennaCheck->setChecked(false);
|
||||
|
||||
//ui->scopeBWCombo->blockSignals(true);
|
||||
//ui->scopeBWCombo->clear();
|
||||
|
||||
ui->tuneEnableChk->setEnabled(rigCaps->commands.contains(funcTunerStatus));
|
||||
ui->tuneNowBtn->setEnabled(rigCaps->commands.contains(funcTunerStatus));
|
||||
|
||||
ui->memoriesBtn->setEnabled(rigCaps->commands.contains(funcMemoryContents));
|
||||
|
||||
//ui->useRTSforPTTchk->setChecked(prefs.forceRTSasPTT);
|
||||
|
||||
// ui->audioSystemCombo->setEnabled(false);
|
||||
//ui->audioSystemServerCombo->setEnabled(false);
|
||||
|
||||
ui->connectBtn->setText("Disconnect from Radio"); // We must be connected now.
|
||||
connStatus = connConnected;
|
||||
if(usingLAN)
|
||||
{
|
||||
ui->afGainSlider->setValue(prefs.localAFgain);
|
||||
emit sendLevel(funcAfGain,prefs.localAFgain);
|
||||
}
|
||||
// Adding these here because clearly at this point we have valid
|
||||
// rig comms. In the future, we should establish comms and then
|
||||
// do all the initial grabs. For now, this hack of adding them here and there:
|
||||
// recalculate command timing now that we know the rig better:
|
||||
if(prefs.polling_ms != 0)
|
||||
{
|
||||
changePollTiming(prefs.polling_ms, true);
|
||||
} else {
|
||||
calculateTimingParameters();
|
||||
}
|
||||
|
||||
// Set the second meter here as I suspect we need to be connected for it to work?
|
||||
changeMeterType(prefs.meter2Type, 2);
|
||||
changeMeterType(prefs.meter3Type, 3);
|
||||
ui->meter2Widget->blockMeterType(prefs.meter3Type);
|
||||
ui->meter3Widget->blockMeterType(prefs.meter2Type);
|
||||
ui->meter2Widget->setCompReverse(prefs.compMeterReverse);
|
||||
ui->meter3Widget->setCompReverse(prefs.compMeterReverse);
|
||||
}
|
||||
|
||||
initPeriodicCommands();
|
||||
getInitialRigState();
|
||||
}
|
||||
|
||||
/* USB Hotplug support added at the end of the file for convenience */
|
||||
#ifdef USB_HOTPLUG
|
||||
|
|
11
wfmain.h
11
wfmain.h
|
@ -35,7 +35,7 @@
|
|||
#include "calibrationwindow.h"
|
||||
#include "repeatersetup.h"
|
||||
#include "satellitesetup.h"
|
||||
#include "transceiveradjustments.h"
|
||||
//#include "transceiveradjustments.h"
|
||||
#include "cwsender.h"
|
||||
#include "bandbuttons.h"
|
||||
#include "frequencyinputwidget.h"
|
||||
|
@ -406,8 +406,7 @@ private slots:
|
|||
void receivePreamp(unsigned char pre, uchar vfo);
|
||||
void receiveAttenuator(unsigned char att, uchar vfo);
|
||||
void receiveAntennaSel(unsigned char ant, bool rx,uchar vfo);
|
||||
void receiveRigID(rigCapabilities rigCaps);
|
||||
void receiveFoundRigID(rigCapabilities rigCaps);
|
||||
|
||||
void receivePortError(errorType err);
|
||||
void receiveStatusUpdate(networkStatus status);
|
||||
void receiveNetworkAudioLevels(networkAudioLevels l);
|
||||
|
@ -498,6 +497,8 @@ private slots:
|
|||
|
||||
void receiveElapsed(bool sub, qint64 us);
|
||||
void connectionTimeout();
|
||||
void receiveRigCaps(rigCapabilities* caps);
|
||||
|
||||
|
||||
private:
|
||||
Ui::wfmain *ui; // Main UI
|
||||
|
@ -712,7 +713,7 @@ private:
|
|||
int oldFreqDialVal;
|
||||
|
||||
QHash<unsigned char,QString> rigList;
|
||||
rigCapabilities rigCaps;
|
||||
rigCapabilities* rigCaps = Q_NULLPTR;
|
||||
|
||||
rigInput currentModSrc[4];
|
||||
|
||||
|
@ -728,7 +729,7 @@ private:
|
|||
calibrationWindow *cal = Q_NULLPTR;
|
||||
repeaterSetup *rpt = Q_NULLPTR;
|
||||
satelliteSetup *sat = Q_NULLPTR;
|
||||
transceiverAdjustments *trxadj = Q_NULLPTR;
|
||||
//transceiverAdjustments *trxadj = Q_NULLPTR;
|
||||
cwSender *cw = Q_NULLPTR;
|
||||
controllerSetup* usbWindow = Q_NULLPTR;
|
||||
aboutbox *abtBox = Q_NULLPTR;
|
||||
|
|
|
@ -287,7 +287,7 @@ SOURCES += main.cpp\
|
|||
rigctld.cpp \
|
||||
usbcontroller.cpp \
|
||||
controllersetup.cpp \
|
||||
transceiveradjustments.cpp \
|
||||
# transceiveradjustments.cpp \
|
||||
selectradio.cpp \
|
||||
tcpserver.cpp \
|
||||
cluster.cpp \
|
||||
|
@ -345,7 +345,7 @@ HEADERS += wfmain.h \
|
|||
ulaw.h \
|
||||
usbcontroller.h \
|
||||
controllersetup.h \
|
||||
transceiveradjustments.h \
|
||||
# transceiveradjustments.h \
|
||||
audiotaper.h \
|
||||
selectradio.h \
|
||||
tcpserver.h \
|
||||
|
@ -368,7 +368,7 @@ FORMS += wfmain.ui \
|
|||
selectradio.ui \
|
||||
repeatersetup.ui \
|
||||
settingswidget.ui \
|
||||
transceiveradjustments.ui \
|
||||
# transceiveradjustments.ui \
|
||||
controllersetup.ui \
|
||||
aboutbox.ui
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue