Make bandType a struct containing frequency and default SSB mode

half-duplex
Phil Taylor 2022-10-29 15:12:30 +01:00
rodzic 429aba7d68
commit f7c532007e
5 zmienionych plików z 95 dodań i 160 usunięć

Wyświetl plik

@ -3088,12 +3088,35 @@ void rigCommander::determineRigCaps()
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};
bandType bandDef6m = bandType(band6m, 50000000, 54000000, modeUSB);
bandType bandDef10m = bandType(band10m, 28000000, 29700000, modeUSB);
bandType bandDef12m = bandType(band12m, 24890000, 24990000, modeUSB);
bandType bandDef15m = bandType(band15m, 21000000, 21450000, modeUSB);
bandType bandDef17m = bandType(band17m, 18068000, 18168000, modeUSB);
bandType bandDef20m = bandType(band20m, 14000000, 14350000, modeUSB);
bandType bandDef30m = bandType(band30m, 10100000, 10150000, modeLSB);
bandType bandDef40m = bandType(band40m, 7000000, 7300000, modeLSB);
bandType bandDef60m = bandType(band60m, 5250000, 5450000, modeLSB);
bandType bandDef80m = bandType(band80m, 3500000, 4000000, modeLSB);
bandType bandDef160m = bandType(band160m, 1800000, 2000000, modeLSB);
bandType bandDef630m = bandType(band630m, 493000, 595000, modeLSB);
bandType bandDef2200m = bandType(band2200m, 135000, 138000, modeLSB);
bandType bandDef2m = bandType(band2m, 144000000, 148000000, modeUSB);
bandType bandDef4m = bandType(band4m, 70000000, 70500000, modeUSB);
bandType bandDef70cm = bandType(band70cm, 420000000, 450000000, modeUSB);
bandType bandDef23cm = bandType(band23cm, 1240000000, 1400000000, modeUSB);
bandType bandDefAir(bandAir, 108000000, 137000000, modeAM);
bandType bandDefWFM(bandWFM, 88000000, 108000000, modeWFM);
bandType bandDefGen(bandGen, 10000, 30000000, modeAM);
standardHF = { bandDef6m, bandDef10m, bandDef12m, bandDef15m, bandDef17m,
bandDef20m, bandDef30m, bandDef40m, bandDef60m, bandDef80m, bandDef80m};
standardVU = { bandDef2m, bandDef70cm };
standardVU = {band70cm, band2m};
std::vector <mode_info> commonModes;
commonModes = { createMode(modeLSB, 0x00, "LSB"), createMode(modeUSB, 0x01, "USB"),
@ -3194,10 +3217,7 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02');
rigCaps.bands = standardHF;
rigCaps.bands.push_back(band4m);
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.bands.insert(rigCaps.bands.end(), { bandDef4m, bandDef630m, bandDef2200m, bandDefGen });
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x71");
@ -3228,7 +3248,7 @@ void rigCommander::determineRigCaps()
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});
rigCaps.bands.insert(rigCaps.bands.end(), { bandDef23cm, bandDef4m, bandDef630m, bandDef2200m, bandDefGen });
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {
createMode(modeWFM, 0x06, "WFM"), createMode(modeS_AMD, 0x11, "S-AM (D)"),
@ -3260,7 +3280,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.push_back('\x10');
rigCaps.preamps.push_back('\x01');
rigCaps.bands = standardVU;
rigCaps.bands.push_back(band23cm);
rigCaps.bands.push_back(bandDef23cm);
rigCaps.bsr[band23cm] = 0x03;
rigCaps.bsr[band70cm] = 0x02;
rigCaps.bsr[band2m] = 0x01;
@ -3285,7 +3305,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x10' , '\x20', '\x30'});
rigCaps.preamps.push_back('\x01');
rigCaps.bands = standardVU;
rigCaps.bands.push_back(band23cm);
rigCaps.bands.push_back(bandDef23cm);
rigCaps.bsr[band23cm] = 0x03;
rigCaps.bsr[band70cm] = 0x02;
rigCaps.bsr[band2m] = 0x01;
@ -3311,7 +3331,7 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x02');
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), { createMode(modePSK, 0x12, "PSK"),
@ -3344,9 +3364,7 @@ void rigCommander::determineRigCaps()
rigCaps.antennas = {0x00, 0x01};
rigCaps.hasATU = true;
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.bands.insert(rigCaps.bands.end(), { bandDef630m, bandDef2200m, bandDefGen });
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), { createMode(modePSK, 0x12, "PSK"),
createMode(modePSK_R, 0x13, "PSK-R") });
@ -3378,9 +3396,7 @@ void rigCommander::determineRigCaps()
rigCaps.hasAntennaSel = true;
rigCaps.antennas = {0x00, 0x01, 0x02, 0x03};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.bands.insert(rigCaps.bands.end(), { bandDef630m, bandDef2200m, bandDefGen });
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"),
createMode(modePSK_R, 0x13, "PSK-R")});
@ -3410,16 +3426,12 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x02');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandAir);
rigCaps.bands.push_back(bandWFM);
rigCaps.bands.insert(rigCaps.bands.end(), { bandDefAir, bandDefGen, bandDefWFM, bandDef630m, bandDef2200m });
rigCaps.bsr[band70cm] = 0x14;
rigCaps.bsr[band2m] = 0x13;
rigCaps.bsr[bandAir] = 0x12;
rigCaps.bsr[bandWFM] = 0x11;
rigCaps.bsr[bandGen] = 0x15;
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeWFM, 0x06, "WFM"),
createMode(modeDV, 0x17, "DV")});
@ -3442,7 +3454,7 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x01');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[band2m] = 0x11;
rigCaps.bsr[band70cm] = 0x12;
rigCaps.bsr[bandGen] = 0x13;
@ -3467,7 +3479,7 @@ void rigCommander::determineRigCaps()
rigCaps.preamps.push_back('\x02');
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x40");
@ -3491,8 +3503,7 @@ void rigCommander::determineRigCaps()
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.bands.insert(rigCaps.bands.end(), { bandDef4m, bandDefGen});
rigCaps.bsr[band2m] = 0x11;
rigCaps.bsr[band70cm] = 0x12;
rigCaps.bsr[bandGen] = 0x13;
@ -3518,7 +3529,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.push_back('\x20');
rigCaps.preamps.push_back('\x01');
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x03\x48");
@ -3543,9 +3554,7 @@ void rigCommander::determineRigCaps()
rigCaps.antennas = {0x00, 0x01, 0x02, 0x03}; // not sure if 0x03 works
rigCaps.hasATU = true;
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.bands.insert(rigCaps.bands.end(), { bandDefGen, bandDef630m, bandDef2200m });
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"),
createMode(modePSK_R, 0x13, "PSK-R")});
@ -3567,7 +3576,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.push_back('\x20');
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), createMode(modeWFM, 0x06, "WFM"));
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
@ -3588,9 +3597,9 @@ void rigCommander::determineRigCaps()
rigCaps.hasDataModes = false;
rigCaps.attenuators.push_back('\x20');
rigCaps.preamps.push_back('\x01');
rigCaps.bands = {band10m, band10m, band12m,
band15m, band17m, band20m, band30m,
band40m, band60m, band80m, band160m, bandGen};
rigCaps.bands = {bandDef10m, bandDef10m, bandDef12m,
bandDef15m, bandDef17m, bandDef20m, bandDef30m,
bandDef40m, bandDef60m, bandDef80m, bandDef160m, bandDefGen};
rigCaps.modes = { createMode(modeLSB, 0x00, "LSB"), createMode(modeUSB, 0x01, "USB"),
createMode(modeAM, 0x02, "AM"),
createMode(modeCW, 0x03, "CW"), createMode(modeCW_R, 0x07, "CW-R"),
@ -3642,8 +3651,8 @@ void rigCommander::determineRigCaps()
// this incorrectly shows up as 2 and 3 in the drop down.
rigCaps.antennas = {0x01, 0x02};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(band2m);
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDef2m);
rigCaps.bands.push_back(bandDefGen);
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
break;
@ -3664,7 +3673,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'});
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
@ -3685,7 +3694,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'});
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
@ -3706,7 +3715,7 @@ void rigCommander::determineRigCaps()
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'});
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
@ -3730,8 +3739,8 @@ void rigCommander::determineRigCaps()
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(band23cm);
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(bandDef23cm);
rigCaps.bands.push_back(bandDefGen);
rigCaps.bsr[band2m] = 0x11;
rigCaps.bsr[band70cm] = 0x12;
rigCaps.bsr[band23cm] = 0x13;
@ -3757,7 +3766,7 @@ void rigCommander::determineRigCaps()
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});
rigCaps.bands.insert(rigCaps.bands.end(), {bandDef23cm, bandDef4m, bandDef630m, bandDef2200m, bandDefGen});
rigCaps.modes = commonModes;
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
qInfo(logRig()) << "Found unknown rig: 0x" << QString("%1").arg(rigCaps.modelID, 2, 16);

Wyświetl plik

@ -133,7 +133,7 @@ void rigCtlClient::socketReadyRead()
char responseCode = 0;
QStringList response;
bool setCommand = false;
//commands.chop(1); // Remove \n character
//commands.chop(1); // Remove \n
if (commands.endsWith('\r'))
{
commands.chop(1); // Remove \n character
@ -144,7 +144,7 @@ void rigCtlClient::socketReadyRead()
continue;
}
//qDebug(logRigCtlD()) << sessionId << "command received" << commands;
qDebug(logRigCtlD()) << sessionId << "RX:" << commands;
// We have a full line so process command.
@ -195,24 +195,32 @@ void rigCtlClient::socketReadyRead()
}
else if (command[0] == "dump_state")
{
// Currently send "fake" state information until I can work out what is required!
response.append("1"); // rigctld protocol version
// rigctld protocol version
response.append("1");
// Radio model
response.append(QString("%1").arg(rigCaps.rigctlModel));
response.append("0"); // Print something
bandType lastBand=(bandType)-1;
// Print something (used to be ITU region)
response.append("0");
// Supported RX bands (startf,endf,modes,low_power,high_power,vfo,ant)
quint32 lowFreq = 0;
quint32 highFreq = 0;
for (bandType band : rigCaps.bands)
{
if (band != lastBand)
response.append(generateFreqRange(band));
lastBand = band;
if (lowFreq == 0 || band.lowFreq < lowFreq)
lowFreq = band.lowFreq;
if (band.highFreq > highFreq)
highFreq = band.highFreq;
}
response.append(QString("%1.000000 %2.000000 0x%3 %4 %5 0x%6 0x%7").arg(lowFreq).arg(highFreq)
.arg(getRadioModes(), 0, 16).arg(-1).arg(-1).arg(0x16000000, 0, 16).arg(getAntennas(), 0, 16));
response.append("0 0 0 0 0 0 0");
if (rigCaps.hasTransmit) {
// Supported TX bands (startf,endf,modes,low_power,high_power,vfo,ant)
for (bandType band : rigCaps.bands)
{
if (band != lastBand)
response.append(generateFreqRange(band));
lastBand = band;
response.append(QString("%1.000000 %2.000000 0x%3 %4 %5 0x%6 0x%7").arg(band.lowFreq).arg(band.highFreq)
.arg(getRadioModes(), 0, 16).arg(2000).arg(100000).arg(0x16000000, 0, 16).arg(getAntennas(), 0, 16));
}
}
response.append("0 0 0 0 0 0 0");
@ -1179,7 +1187,7 @@ void rigCtlClient::closeSocket()
void rigCtlClient::sendData(QString data)
{
//qDebug(logRigCtlD()) << "Sending:" << data;
qDebug(logRigCtlD()) << sessionId << "TX:" << data;
if (socket != Q_NULLPTR && socket->isValid() && socket->isOpen())
{
socket->write(data.toLatin1());
@ -1345,99 +1353,6 @@ unsigned char rigCtlClient::getMode(QString modeString) {
return 0;
}
QString rigCtlClient::generateFreqRange(bandType band)
{
unsigned int lowFreq = 0;
unsigned int highFreq = 0;
switch (band) {
case band2200m:
lowFreq = 135000;
highFreq = 138000;
break;
case band630m:
lowFreq = 493000;
highFreq = 595000;
break;
case band160m:
lowFreq = 1800000;
highFreq = 2000000;
break;
case band80m:
lowFreq = 3500000;
highFreq = 4000000;
break;
case band60m:
lowFreq = 5250000;
highFreq = 5450000;
break;
case band40m:
lowFreq = 7000000;
highFreq = 7300000;
break;
case band30m:
lowFreq = 10100000;
highFreq = 10150000;
break;
case band20m:
lowFreq = 14000000;
highFreq = 14350000;
break;
case band17m:
lowFreq = 18068000;
highFreq = 18168000;
break;
case band15m:
lowFreq = 21000000;
highFreq = 21450000;
break;
case band12m:
lowFreq = 24890000;
highFreq = 24990000;
break;
case band10m:
lowFreq = 28000000;
highFreq = 29700000;
break;
case band6m:
lowFreq = 50000000;
highFreq = 54000000;
break;
case band4m:
lowFreq = 70000000;
highFreq = 70500000;
break;
case band2m:
lowFreq = 144000000;
highFreq = 148000000;
break;
case band70cm:
lowFreq = 420000000;
highFreq = 450000000;
break;
case band23cm:
lowFreq = 1240000000;
highFreq = 1400000000;
break;
case bandAir:
lowFreq = 108000000;
highFreq = 137000000;
break;
case bandWFM:
lowFreq = 88000000;
highFreq = 108000000;
break;
case bandGen:
lowFreq = 10000;
highFreq = 30000000;
break;
}
QString ret = "";
if (lowFreq > 0 && highFreq > 0) {
ret = QString("%1.000000 %2.000000 0x%3 %4 %5 0x%6 0x%7").arg(lowFreq).arg(highFreq).arg(getRadioModes(),0,16).arg(-1).arg(-1).arg(0x16000003,0,16).arg(getAntennas(),0,16);
}
return ret;
}
unsigned char rigCtlClient::getAntennas()
{
@ -1498,19 +1413,19 @@ QString rigCtlClient::getAntName(unsigned char ant)
unsigned char rigCtlClient::antFromName(QString name) {
unsigned char ret;
if (name == "ANT1")
if (name.toUpper() == "ANT1")
ret = 0;
else if (name == "ANT2")
else if (name.toUpper() == "ANT2")
ret = 1;
else if (name == "ANT3")
else if (name.toUpper() == "ANT3")
ret = 2;
else if (name == "ANT4")
else if (name.toUpper() == "ANT4")
ret = 3;
else if (name == "ANT5")
else if (name.toUpper() == "ANT5")
ret = 4;
else if (name == "ANT_UNKNOWN")
else if (name.toUpper() == "ANT_UNKNOWN")
ret = 30;
else if (name == "ANT_CURR")
else if (name.toUpper() == "ANT_CURR")
ret = 31;
else
ret = 99;

Wyświetl plik

@ -406,7 +406,6 @@ private:
QString getMode(unsigned char mode, bool datamode);
unsigned char getMode(QString modeString);
QString getFilter(unsigned char mode, unsigned char filter);
QString generateFreqRange(bandType band);
unsigned char getAntennas();
quint64 getRadioModes();
QString getAntName(unsigned char ant);

Wyświetl plik

@ -50,7 +50,7 @@ enum rigInput{ inputMic=0,
inputUnknown=0xff
};
enum bandType { band23cm=0,
enum availableBands { band23cm=0,
band70cm,
band2m,
bandAir,
@ -90,6 +90,18 @@ struct centerSpanData {
QString name;
};
struct bandType {
bandType(availableBands band, quint32 lowFreq, quint32 highFreq, mode_kind defaultMode) :
band(band), lowFreq(lowFreq), highFreq(highFreq), defaultMode(defaultMode) {}
bandType() {}
availableBands band;
quint32 lowFreq;
quint32 highFreq;
mode_kind defaultMode;
};
model_kind determineRadioModel(unsigned char rigID);
struct rigCapabilities {

Wyświetl plik

@ -6031,7 +6031,7 @@ void wfmain::setBandButtons()
for(unsigned int i=0; i < rigCaps.bands.size(); i++)
{
bandSel = rigCaps.bands.at(i);
switch(bandSel)
switch(bandSel.band)
{
case(band23cm):
showButton(ui->band23cmbtn);