kopia lustrzana https://gitlab.com/eliggett/wfview
452 wiersze
12 KiB
C++
452 wiersze
12 KiB
C++
#include "bandbuttons.h"
|
|
#include "ui_bandbuttons.h"
|
|
|
|
bandbuttons::bandbuttons(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::bandbuttons)
|
|
{
|
|
ui->setupUi(this);
|
|
ui->bandStkLastUsedBtn->setVisible(false);
|
|
ui->bandStkVoiceBtn->setVisible(false);
|
|
ui->bandStkDataBtn->setVisible(false);
|
|
ui->bandStkCWBtn->setVisible(false);
|
|
this->setWindowTitle("Band Switcher");
|
|
this->setObjectName("bandButtons");
|
|
queue = cachingQueue::getInstance();
|
|
connect(queue, SIGNAL(rigCapsUpdated(rigCapabilities*)), this, SLOT(receiveRigCaps(rigCapabilities*)));
|
|
connect(queue,SIGNAL(cacheUpdated(cacheItem)),this,SLOT(receiveCache(cacheItem)));
|
|
if (rigCaps != Q_NULLPTR) {
|
|
ui->subBandCheck->setEnabled(rigCaps->numReceiver>1);
|
|
}
|
|
}
|
|
|
|
bandbuttons::~bandbuttons()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
int bandbuttons::getBSRNumber()
|
|
{
|
|
return ui->bandStkPopdown->currentIndex()+1;
|
|
}
|
|
|
|
void bandbuttons::receiveCache(cacheItem item)
|
|
{
|
|
// Only used to receive initial frequency!
|
|
bool sub=false;
|
|
switch (item.command)
|
|
{
|
|
#if defined __GNUC__
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
|
#endif
|
|
case funcUnselectedFreq:
|
|
sub=true;
|
|
case funcFreq:
|
|
case funcSelectedFreq:
|
|
case funcFreqGet:
|
|
case funcFreqTR:
|
|
// Here we will process incoming frequency.
|
|
{
|
|
if(!rigCaps) {
|
|
return;
|
|
}
|
|
if (requestedBand == bandUnknown) {
|
|
if (ui->subBandCheck->isChecked() == bool(sub)) {
|
|
quint64 freq = quint64(item.value.value<freqt>().Hz);
|
|
for (auto &b: rigCaps->bands)
|
|
{
|
|
// Highest frequency band is always first!
|
|
if (freq >= b.lowFreq && freq <= b.highFreq)
|
|
{
|
|
// This frequency is contained within this band!
|
|
qInfo() << "Band Buttons found current band:" << b.name;
|
|
requestedBand = b.band;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (bool(sub) == ui->subBandCheck->isChecked()) {
|
|
currentFrequency = item.value.value<freqt>();
|
|
}
|
|
break;
|
|
case funcUnselectedMode:
|
|
sub=true;
|
|
case funcMode:
|
|
case funcSelectedMode:
|
|
case funcModeGet:
|
|
case funcModeTR:
|
|
{
|
|
if(!rigCaps) {
|
|
return;
|
|
}
|
|
if (bool(sub) == ui->subBandCheck->isChecked()) {
|
|
currentMode = item.value.value<modeInfo>();
|
|
}
|
|
break;
|
|
}
|
|
#if defined __GNUC__
|
|
#pragma GCC diagnostic pop
|
|
#endif
|
|
case funcBandStackReg:
|
|
if(!rigCaps) {
|
|
return;
|
|
}
|
|
currentBSR = item.value.value<bandStackType>();
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void bandbuttons::receiveRigCaps(rigCapabilities* rc)
|
|
{
|
|
this->rigCaps = rc;
|
|
qDebug(logGui()) << "Accepting new rigcaps into band buttons.";
|
|
|
|
if (rc != Q_NULLPTR) {
|
|
ui->subBandCheck->setEnabled(rigCaps->numReceiver>1);
|
|
|
|
qDebug(logGui()) << "Bands in this rigcaps: ";
|
|
for(size_t i=0; i < rigCaps->bands.size(); i++)
|
|
{
|
|
qDebug(logGui()) << "band[" << i << "]: " << (quint8)rigCaps->bands[i].band;
|
|
}
|
|
|
|
for(size_t i=0; i < 20; i++)
|
|
{
|
|
qDebug(logGui()) << "bsr[" << i << "]: " << (quint8)rigCaps->bsr[i];
|
|
}
|
|
}
|
|
// We have a new rigcaps (or none) so set band to unknown.
|
|
requestedBand = bandUnknown;
|
|
|
|
setUIToRig();
|
|
}
|
|
|
|
void bandbuttons::setUIToRig()
|
|
{
|
|
// Turn off each button first:
|
|
hideButton(ui->band3cmbtn);
|
|
hideButton(ui->band6cmbtn);
|
|
hideButton(ui->band13cmbtn);
|
|
hideButton(ui->band23cmbtn);
|
|
hideButton(ui->band70cmbtn);
|
|
hideButton(ui->band2mbtn);
|
|
hideButton(ui->bandAirbtn);
|
|
hideButton(ui->bandWFMbtn);
|
|
hideButton(ui->band4mbtn);
|
|
hideButton(ui->band6mbtn);
|
|
|
|
hideButton(ui->band10mbtn);
|
|
hideButton(ui->band12mbtn);
|
|
hideButton(ui->band15mbtn);
|
|
hideButton(ui->band17mbtn);
|
|
hideButton(ui->band20mbtn);
|
|
hideButton(ui->band30mbtn);
|
|
hideButton(ui->band40mbtn);
|
|
hideButton(ui->band60mbtn);
|
|
hideButton(ui->band80mbtn);
|
|
hideButton(ui->band160mbtn);
|
|
|
|
hideButton(ui->band630mbtn);
|
|
hideButton(ui->band2200mbtn);
|
|
hideButton(ui->bandGenbtn);
|
|
|
|
if (rigCaps != Q_NULLPTR) {
|
|
for (auto &band: rigCaps->bands)
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void bandbuttons::showButton(QPushButton *b)
|
|
{
|
|
b->setVisible(true);
|
|
}
|
|
|
|
void bandbuttons::hideButton(QPushButton *b)
|
|
{
|
|
b->setHidden(true);
|
|
}
|
|
|
|
void bandbuttons::bandStackBtnClick(availableBands band)
|
|
{
|
|
if(rigCaps != Q_NULLPTR)
|
|
{
|
|
for (auto &b: rigCaps->bands)
|
|
{
|
|
if (b.band == band)
|
|
{
|
|
if(b.bsr == 0 || ui->subBandCheck->isChecked())
|
|
{
|
|
qDebug(logGui()) << "requested to drop to band that does not have a BSR (or sub band), using direct mode.";
|
|
jumpToBandWithoutBSR(band);
|
|
} else {
|
|
queue->add(priorityImmediate,queueItem(funcBandStackReg,
|
|
QVariant::fromValue<bandStackType>(bandStackType(b.bsr,ui->bandStkPopdown->currentIndex()+1)),false,uchar(0)));
|
|
}
|
|
requestedBand = band;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
qWarning(logGui()) << "bandbuttons, Asked to go to a band but do not have rigCaps yet.";
|
|
}
|
|
}
|
|
|
|
void bandbuttons::jumpToBandWithoutBSR(availableBands band)
|
|
{
|
|
// Sometimes we do not have a BSR for these bands:
|
|
if (rigCaps != Q_NULLPTR)
|
|
{
|
|
for (auto &b: rigCaps->bands)
|
|
{
|
|
if (b.band == band)
|
|
{
|
|
freqt f;
|
|
f.Hz = (b.lowFreq+b.highFreq)/2.0;
|
|
f.MHzDouble = f.Hz/1000000.0;
|
|
f.VFO = activeVFO;
|
|
vfoCommandType t = queue->getVfoCommand(ui->subBandCheck->isChecked()?vfoSub:vfoA,ui->subBandCheck->isChecked(),true);
|
|
queue->add(priorityImmediate,queueItem(t.freqFunc, QVariant::fromValue<freqt>(f),false,t.receiver));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void bandbuttons::on_band2200mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band2200m);
|
|
}
|
|
|
|
void bandbuttons::on_band630mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band630m);
|
|
}
|
|
|
|
void bandbuttons::on_band160mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band160m);
|
|
}
|
|
|
|
void bandbuttons::on_band80mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band80m);
|
|
}
|
|
|
|
void bandbuttons::on_band60mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band60m);
|
|
}
|
|
|
|
void bandbuttons::on_band40mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band40m);
|
|
}
|
|
|
|
void bandbuttons::on_band30mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band30m);
|
|
}
|
|
|
|
void bandbuttons::on_band20mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band20m);
|
|
}
|
|
|
|
void bandbuttons::on_band17mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band17m);
|
|
}
|
|
|
|
void bandbuttons::on_band15mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band15m);
|
|
}
|
|
|
|
void bandbuttons::on_band12mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band12m);
|
|
}
|
|
|
|
void bandbuttons::on_band10mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band10m);
|
|
}
|
|
|
|
void bandbuttons::on_band6mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band6m);
|
|
}
|
|
|
|
void bandbuttons::on_band4mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band4m);
|
|
}
|
|
|
|
void bandbuttons::on_band2mbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band2m);
|
|
}
|
|
|
|
void bandbuttons::on_band70cmbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band70cm);
|
|
}
|
|
|
|
void bandbuttons::on_band23cmbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band23cm);
|
|
}
|
|
|
|
void bandbuttons::on_band13cmbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band13cm);
|
|
}
|
|
|
|
void bandbuttons::on_band6cmbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band6cm);
|
|
}
|
|
|
|
void bandbuttons::on_band3cmbtn_clicked()
|
|
{
|
|
bandStackBtnClick(band3cm);
|
|
}
|
|
|
|
void bandbuttons::on_bandWFMbtn_clicked()
|
|
{
|
|
bandStackBtnClick(bandWFM);
|
|
}
|
|
|
|
void bandbuttons::on_bandAirbtn_clicked()
|
|
{
|
|
bandStackBtnClick(bandAir);
|
|
}
|
|
|
|
void bandbuttons::on_bandGenbtn_clicked()
|
|
{
|
|
bandStackBtnClick(bandGen);
|
|
}
|
|
|
|
void bandbuttons::on_bandSetBtn_clicked()
|
|
{
|
|
if(rigCaps != Q_NULLPTR)
|
|
{
|
|
qInfo() << "Setting BSR to current freq/mode, first find band that contains frequency:" << currentFrequency.MHzDouble;
|
|
// First find which band we are in
|
|
for (auto &band: rigCaps->bands)
|
|
{
|
|
if (band.region == "" || band.region == region) {
|
|
if (band.bsr != 0 && currentFrequency.Hz >= band.lowFreq && currentFrequency.Hz <= band.highFreq)
|
|
{
|
|
// qInfo() << "Found band" << band.name;
|
|
// This frequency is within this band
|
|
bandStackType bs=currentBSR;
|
|
bs.band = band.bsr;
|
|
bs.data = currentMode.data;
|
|
bs.freq = currentFrequency;
|
|
bs.filter = currentMode.filter;
|
|
bs.regCode = ui->bandStkPopdown->currentIndex()+1;
|
|
bs.mode = currentMode.reg;
|
|
// If we haven't received a tone yet, use default.
|
|
if (bs.tone.tone == 0) {
|
|
bs.tone.tone = 885;
|
|
bs.tsql.tone = 885;
|
|
}
|
|
queue->add(priorityImmediate,queueItem(funcBandStackReg, QVariant::fromValue<bandStackType>(bs),false,uchar(0)));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
qWarning(logGui()) << "bandbuttons, Asked to go to a band but do not have rigCaps yet.";
|
|
}
|
|
}
|
|
|
|
void bandbuttons::on_subBandCheck_clicked(bool checked)
|
|
{
|
|
requestedBand = bandUnknown;
|
|
vfoCommandType t = queue->getVfoCommand(vfoA,uchar(checked),false);
|
|
queue->add(priorityImmediate,t.freqFunc,false,t.receiver);
|
|
}
|