Added dynamic band buttons. Fixed multiple bugs related to various

differences in band stacking register addresses (for example, the GEN
band on the 705 has a different address from the 7100 and the 7300).
This code was only tested with the 9700.
merge-requests/2/head
Elliott Liggett 2021-04-26 18:24:28 -07:00
rodzic a35609c629
commit 7109c2b396
5 zmienionych plików z 496 dodań i 31 usunięć

Wyświetl plik

@ -2466,6 +2466,16 @@ void rigCommander::determineRigCaps()
{
//TODO: Determine available bands (low priority, rig will reject out of band requests anyway)
std::vector <bandType> standardHF;
std::vector <bandType> standardVU;
// Most commonly supported "HF" bands:
standardHF = {band6m, band10m, band10m, band12m,
band15m, band17m, band20m, band30m,
band40m, band60m, band80m, band160m};
standardVU = {band70cm, band2m};
rigCaps.model = model;
rigCaps.modelID = model; // may delete later
@ -2495,6 +2505,32 @@ void rigCommander::determineRigCaps()
rigCaps.hasTransmit = true;
// Common, reasonable defaults for most supported HF rigs:
rigCaps.bsr[band160m] = 0x01;
rigCaps.bsr[band80m] = 0x02;
rigCaps.bsr[band40m] = 0x03;
rigCaps.bsr[band30m] = 0x04;
rigCaps.bsr[band20m] = 0x05;
rigCaps.bsr[band17m] = 0x06;
rigCaps.bsr[band15m] = 0x07;
rigCaps.bsr[band12m] = 0x08;
rigCaps.bsr[band10m] = 0x09;
rigCaps.bsr[band6m] = 0x10;
rigCaps.bsr[bandGen] = 0x11;
// Bands that seem to change with every model:
rigCaps.bsr[band2m] = 0x00;
rigCaps.bsr[band70cm] = 0x00;
rigCaps.bsr[band23cm] = 0x00;
// These bands generally aren't defined:
rigCaps.bsr[band4m] = 0x00;
rigCaps.bsr[band60m] = 0x00;
rigCaps.bsr[bandWFM] = 0x00;
rigCaps.bsr[bandAir] = 0x00;
rigCaps.bsr[band630m] = 0x00;
rigCaps.bsr[band2200m] = 0x00;
switch(model){
case model7300:
rigCaps.modelName = QString("IC-7300");
@ -2512,6 +2548,9 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.push_back('\x20');
rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02');
rigCaps.bands = standardHF;
rigCaps.bands.push_back(band4m);
rigCaps.bands.push_back(bandGen);
break;
case modelR8600:
rigCaps.modelName = QString("IC-R8600");
@ -2533,6 +2572,9 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x02');
rigCaps.hasAntennaSel = true;
rigCaps.antennas = {0x00, 0x01, 0x02};
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.insert(rigCaps.bands.end(), {band23cm, band4m, band630m, band2200m, bandGen});
break;
case model9700:
rigCaps.modelName = QString("IC-9700");
@ -2552,6 +2594,11 @@ void rigCommander::determineRigCaps()
rigCaps.hasDTCS = true;
rigCaps.attenuators.push_back('\x10');
rigCaps.preamps.push_back('\x01');
rigCaps.bands = standardVU;
rigCaps.bands.push_back(band23cm);
rigCaps.bsr[band23cm] = 0x03;
rigCaps.bsr[band70cm] = 0x02;
rigCaps.bsr[band2m] = 0x01;
break;
case model7610:
rigCaps.modelName = QString("IC-7610");
@ -2576,6 +2623,8 @@ void rigCommander::determineRigCaps()
rigCaps.hasAntennaSel = true;
rigCaps.antennas = {0x00, 0x01};
rigCaps.hasATU = true;
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
break;
case model7850:
rigCaps.modelName = QString("IC-785x");
@ -2599,6 +2648,8 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x02');
rigCaps.hasAntennaSel = true;
rigCaps.antennas = {0x00, 0x01, 0x02, 0x03};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
break;
case model705:
rigCaps.modelName = QString("IC-705");
@ -2619,6 +2670,14 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20'});
rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[band70cm] = 0x14;
rigCaps.bsr[band2m] = 0x13;
rigCaps.bsr[bandAir] = 0x12;
rigCaps.bsr[bandWFM] = 0x11;
rigCaps.bsr[bandGen] = 0x15;
break;
case model7100:
rigCaps.modelName = QString("IC-7100");
@ -2634,6 +2693,13 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.push_back('\x12');
rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(band4m);
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[band2m] = 0x11;
rigCaps.bsr[band70cm] = 0x12;
rigCaps.bsr[bandGen] = 0x13;
break;
case model706:
rigCaps.modelName = QString("IC-706");
@ -2644,6 +2710,9 @@ void rigCommander::determineRigCaps()
rigCaps.hasWiFi = false;
rigCaps.hasATU = true;
rigCaps.attenuators.push_back('\x20');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(bandGen);
break;
default:
rigCaps.modelName = QString("IC-RigID: 0x%1").arg(rigCaps.model, 0, 16);
@ -2660,6 +2729,9 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.push_back('\x10');
rigCaps.attenuators.push_back('\x12');
rigCaps.attenuators.push_back('\x20');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.insert(rigCaps.bands.end(), {band23cm, band4m, band630m, band2200m, bandGen});
qDebug(logRig()) << "Found unknown rig: " << rigCaps.modelName;
break;
}

Wyświetl plik

@ -37,6 +37,28 @@ enum rigInput{ inputMic=0,
inputUnknown=0xff
};
enum bandType { band23cm=1,
band70cm,
band2m,
bandAir,
bandWFM,
band4m,
band6m,
band10m,
band12m,
band15m,
band17m,
band20m,
band30m,
band40m,
band60m,
band80m,
band160m,
band630m,
band2200m,
bandGen
};
model_kind determineRadioModel(unsigned char rigID);
struct rigCapabilities {
@ -69,10 +91,12 @@ struct rigCapabilities {
bool hasAttenuator;
bool hasPreamp;
bool hasAntennaSel;
//QVector <unsigned char> attenuators;
std::vector <unsigned char> attenuators;
std::vector <unsigned char> preamps;
std::vector <unsigned char> antennas;
std::vector <bandType> bands;
unsigned char bsr[20] = {0};
};

Wyświetl plik

@ -2116,7 +2116,7 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
ui->antennaSelCombo->setDisabled(true);
}
setBandButtons();
ui->tuneEnableChk->setEnabled(rigCaps.hasATU);
ui->tuneNowBtn->setEnabled(rigCaps.hasATU);
@ -2662,6 +2662,9 @@ void wfmain::changeMode(mode_kind mode, bool dataOn)
{
int filter = ui->modeFilterCombo->currentData().toInt();
emit setMode((unsigned char)mode, filter);
currentMode = mode;
if(dataOn)
{
issueDelayedCommand(cmdSetDataModeOn);
@ -2691,7 +2694,7 @@ void wfmain::on_modeSelectCombo_activated(int index)
// oops, we forgot to reset the combo box
} else {
qDebug(logSystem()) << __func__ << " at index " << index << " has newMode: " << newMode;
currentMode = (mode_kind)newMode;
emit setMode(newMode, filterSelection);
}
}
@ -2809,6 +2812,37 @@ void wfmain::bandStackBtnClick()
emit getBandStackReg(bandStkBand, bandStkRegCode);
}
void wfmain::on_band23cmbtn_clicked()
{
bandStkBand = rigCaps.bsr[band23cm]; // 23cm
bandStackBtnClick();
}
void wfmain::on_band70cmbtn_clicked()
{
bandStkBand = rigCaps.bsr[band70cm]; // 70cm
bandStackBtnClick();
}
void wfmain::on_band2mbtn_clicked()
{
bandStkBand = rigCaps.bsr[band2m]; // 2m
bandStackBtnClick();
}
void wfmain::on_band4mbtn_clicked()
{
// There isn't a BSR for this one:
freqt f;
if((currentMode == modeAM) || (currentMode == modeFM))
{
f.Hz = (70.260) * 1E6;
} else {
f.Hz = (70.200) * 1E6;
}
setFrequency(f);
}
void wfmain::on_band6mbtn_clicked()
{
bandStkBand = 0x10; // 6 meters
@ -2885,11 +2919,25 @@ void wfmain::on_band160mbtn_clicked()
bandStackBtnClick();
}
void wfmain::on_band630mbtn_clicked()
{
freqt f;
f.Hz = 475 * 1E3;
setFrequency(f);
}
void wfmain::on_band2200mbtn_clicked()
{
freqt f;
f.Hz = 136 * 1E3;
setFrequency(f);
}
void wfmain::on_bandGenbtn_clicked()
{
// "GENE" general coverage frequency outside the ham bands
// which does probably include any 60 meter frequencies used.
bandStkBand = 0x11; // GEN
bandStkBand = rigCaps.bsr[bandGen]; // GEN
bandStackBtnClick();
}
@ -3827,7 +3875,7 @@ void wfmain::receiveRITStatus(bool ritEnabled)
void wfmain::receiveRITValue(int ritValHz)
{
if((ritValHz > -500) and (ritValHz < 500))
if((ritValHz > -500) && (ritValHz < 500))
{
ui->ritTuneDial->blockSignals(true);
ui->ritTuneDial->setValue(ritValHz);
@ -3837,11 +3885,116 @@ void wfmain::receiveRITValue(int ritValHz)
}
}
void wfmain::showButton(QPushButton *btn)
{
btn->setHidden(false);
}
void wfmain::hideButton(QPushButton *btn)
{
btn->setHidden(true);
}
void wfmain::setBandButtons()
{
// Turn off each button first:
hideButton(ui->band23cmbtn);
hideButton(ui->band70cmbtn);
hideButton(ui->band2mbtn);
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);
bandType bandSel;
//for (auto band = rigCaps.bands.begin(); band != rigCaps.bands.end(); ++band) // no worky
for(unsigned int i=0; i < rigCaps.bands.size(); i++)
{
bandSel = rigCaps.bands.at(i);
switch(bandSel)
{
case(band23cm):
showButton(ui->band23cmbtn);
break;
case(band70cm):
showButton(ui->band70cmbtn);
break;
case(band2m):
showButton(ui->band2mbtn);
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;
}
}
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
{
qDebug(logSystem()) << "Debug button pressed.";
qDebug(logSystem()) << "Getting RIT enabled status: ";
emit getRitValue();
qDebug(logSystem()) << "Changing band buttons: ";
setBandButtons();
}

Wyświetl plik

@ -417,6 +417,18 @@ private slots:
void on_ritEnableChk_clicked(bool checked);
void on_band23cmbtn_clicked();
void on_band70cmbtn_clicked();
void on_band2mbtn_clicked();
void on_band4mbtn_clicked();
void on_band630mbtn_clicked();
void on_band2200mbtn_clicked();
private:
Ui::wfmain *ui;
QSettings settings;
@ -430,6 +442,10 @@ private:
void setPlotTheme(QCustomPlot *plot, bool isDark);
void prepareWf();
void getInitialRigState();
void setBandButtons();
void showButton(QPushButton *btn);
void hideButton(QPushButton *btn);
void openRig();
void powerRigOff();
void powerRigOn();
@ -618,6 +634,7 @@ private:
rigCapabilities rigCaps;
rigInput currentModSrc = inputUnknown;
rigInput currentModDataSrc = inputUnknown;
mode_kind currentMode = modeUSB;
bool haveRigCaps;
bool amTransmitting;

247
wfmain.ui
Wyświetl plik

@ -18,7 +18,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="mainTab">
<attribute name="title">
@ -830,6 +830,92 @@
<string>Band</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_26">
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="band23cmbtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>23cm</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="band70cmbtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>70cm</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="band2mbtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>2m</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="band4mbtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>4m</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
@ -840,8 +926,14 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>6M</string>
<string>6m</string>
</property>
<property name="shortcut">
<string>6</string>
@ -856,8 +948,14 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>10M</string>
<string>10m</string>
</property>
<property name="shortcut">
<string>1</string>
@ -872,18 +970,20 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>12M</string>
<string>12m</string>
</property>
<property name="shortcut">
<string>T</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QPushButton" name="band15mbtn">
<property name="sizePolicy">
@ -892,14 +992,24 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>15M</string>
<string>15m</string>
</property>
<property name="shortcut">
<string>5</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QPushButton" name="band17mbtn">
<property name="sizePolicy">
@ -908,8 +1018,14 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>17M</string>
<string>17m</string>
</property>
<property name="shortcut">
<string>7</string>
@ -924,18 +1040,20 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>20M</string>
<string>20m</string>
</property>
<property name="shortcut">
<string>2</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QPushButton" name="band30mbtn">
<property name="sizePolicy">
@ -944,8 +1062,14 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>30M</string>
<string>30m</string>
</property>
<property name="shortcut">
<string>3</string>
@ -960,14 +1084,24 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>40M</string>
<string>40m</string>
</property>
<property name="shortcut">
<string>4</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QPushButton" name="band60mbtn">
<property name="sizePolicy">
@ -976,18 +1110,20 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>60M</string>
<string>60m</string>
</property>
<property name="shortcut">
<string>S</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QPushButton" name="band80mbtn">
<property name="sizePolicy">
@ -996,8 +1132,14 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>80M</string>
<string>80m</string>
</property>
<property name="shortcut">
<string>8</string>
@ -1012,14 +1154,62 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>160M</string>
<string>160m</string>
</property>
<property name="shortcut">
<string>L</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="band630mbtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>630m</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QPushButton" name="band2200mbtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>2200m</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="bandGenbtn">
<property name="sizePolicy">
@ -1028,6 +1218,12 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>128</height>
</size>
</property>
<property name="text">
<string>Gen</string>
</property>
@ -2040,6 +2236,9 @@
<property name="text">
<string>Debug</string>
</property>
<property name="shortcut">
<string>Ctrl+Alt+D</string>
</property>
</widget>
</item>
<item>