diff --git a/freqmemory.h b/freqmemory.h index a06e550..b803f4a 100644 --- a/freqmemory.h +++ b/freqmemory.h @@ -20,7 +20,24 @@ enum mode_kind { modeLSB_D=0x80, modeUSB_D=0x81, modeDV=0x17, - modeDD=0x27 + modeDD=0x27, + modeWFM, + modeS_AMD, + modeS_AML, + modeS_AMU, + modeP25, + modedPMR, + modeNXDN_VN, + modeNXDN_N, + modeDCR, + modePSK, + modePSK_R +}; + +struct mode_info { + mode_kind mk; + unsigned char reg; + QString name; }; struct preset_kind { diff --git a/rigcommander.cpp b/rigcommander.cpp index 0b7c47d..f5ab8b1 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -2527,6 +2527,16 @@ void rigCommander::parseWFData() } } + +mode_info rigCommander::createMode(mode_kind m, unsigned char reg, QString name) +{ + mode_info mode; + mode.mk = m; + mode.reg = reg; + mode.name = name; + return mode; +} + void rigCommander::determineRigCaps() { //TODO: Determine available bands (low priority, rig will reject out of band requests anyway) @@ -2541,6 +2551,14 @@ void rigCommander::determineRigCaps() standardVU = {band70cm, band2m}; + std::vector commonModes; + commonModes = { createMode(modeLSB, 0x00, "LSB"), createMode(modeUSB, 0x01, "USB"), + createMode(modeFM, 0x05, "FM"), createMode(modeAM, 0x02, "AM"), + createMode(modeCW, 0x03, "CW"), createMode(modeCW_R, 0x07, "CW-R"), + createMode(modeRTTY, 0x04, "RTTY"), createMode(modeRTTY_R, 0x08, "RTTY-R") + }; + + rigCaps.model = model; rigCaps.civ = incomingCIVAddr; @@ -2617,6 +2635,7 @@ void rigCommander::determineRigCaps() rigCaps.bands.push_back(bandGen); rigCaps.bands.push_back(band630m); rigCaps.bands.push_back(band2200m); + rigCaps.modes = commonModes; break; case modelR8600: rigCaps.modelName = QString("IC-R8600"); @@ -2642,6 +2661,13 @@ void rigCommander::determineRigCaps() 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.modes = commonModes; + rigCaps.modes.insert(rigCaps.modes.end(), { + createMode(modeWFM, 0x06, "WFM"), createMode(modeS_AMD, 0x11, "S-AM (D)"), + createMode(modeS_AML, 0x14, "S-AM(L)"), createMode(modeS_AMU, 0x15, "S-AM(U)"), + createMode(modeP25, 0x16, "P25"), createMode(modedPMR, 0x18, "dPMR"), + createMode(modeNXDN_VN, 0x19, "NXDN-VN"), createMode(modeNXDN_N, 0x20, "NXDN-N"), + createMode(modeDCR, 0x21, "DCR")}); break; case model9700: rigCaps.modelName = QString("IC-9700"); @@ -2666,6 +2692,9 @@ void rigCommander::determineRigCaps() rigCaps.bsr[band23cm] = 0x03; rigCaps.bsr[band70cm] = 0x02; rigCaps.bsr[band2m] = 0x01; + rigCaps.modes = commonModes; + rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeDV, 0x17, "DV"), + createMode(modeDD, 0x22, "DD")}); break; case model910h: rigCaps.modelName = QString("IC-910H"); @@ -2685,6 +2714,7 @@ void rigCommander::determineRigCaps() rigCaps.bsr[band23cm] = 0x03; rigCaps.bsr[band70cm] = 0x02; rigCaps.bsr[band2m] = 0x01; + rigCaps.modes = commonModes; break; case model7610: rigCaps.modelName = QString("IC-7610"); @@ -2713,6 +2743,7 @@ void rigCommander::determineRigCaps() rigCaps.bands.push_back(bandGen); rigCaps.bands.push_back(band630m); rigCaps.bands.push_back(band2200m); + rigCaps.modes = commonModes; break; case model7850: rigCaps.modelName = QString("IC-785x"); @@ -2740,6 +2771,9 @@ void rigCommander::determineRigCaps() rigCaps.bands.push_back(bandGen); rigCaps.bands.push_back(band630m); rigCaps.bands.push_back(band2200m); + rigCaps.modes = commonModes; + rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"), + createMode(modePSK_R, 0x13, "PSK-R")}); break; case model705: rigCaps.modelName = QString("IC-705"); @@ -2772,6 +2806,9 @@ void rigCommander::determineRigCaps() 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")}); break; case model7000: rigCaps.modelName = QString("IC-7000"); @@ -2791,6 +2828,7 @@ void rigCommander::determineRigCaps() rigCaps.bsr[band2m] = 0x11; rigCaps.bsr[band70cm] = 0x12; rigCaps.bsr[bandGen] = 0x13; + rigCaps.modes = commonModes; break; case model7410: rigCaps.modelName = QString("IC-7410"); @@ -2809,6 +2847,7 @@ void rigCommander::determineRigCaps() rigCaps.bands = standardHF; rigCaps.bands.push_back(bandGen); rigCaps.bsr[bandGen] = 0x11; + rigCaps.modes = commonModes; break; case model7100: rigCaps.modelName = QString("IC-7100"); @@ -2831,6 +2870,9 @@ void rigCommander::determineRigCaps() rigCaps.bsr[band2m] = 0x11; rigCaps.bsr[band70cm] = 0x12; rigCaps.bsr[bandGen] = 0x13; + rigCaps.modes = commonModes; + rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeWFM, 0x06, "WFM"), + createMode(modeDV, 0x17, "DV")}); break; case model7200: rigCaps.modelName = QString("IC-7200"); @@ -2848,6 +2890,7 @@ void rigCommander::determineRigCaps() rigCaps.bands = standardHF; rigCaps.bands.push_back(bandGen); rigCaps.bsr[bandGen] = 0x11; + rigCaps.modes = commonModes; break; case model706: rigCaps.modelName = QString("IC-706"); @@ -2861,6 +2904,8 @@ void rigCommander::determineRigCaps() rigCaps.bands = standardHF; rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end()); rigCaps.bands.push_back(bandGen); + rigCaps.modes = commonModes; + rigCaps.modes.insert(rigCaps.modes.end(), createMode(modeWFM, 0x06, "WFM")); break; case model756pro: rigCaps.modelName = QString("IC-756 Pro"); @@ -2877,6 +2922,24 @@ void rigCommander::determineRigCaps() rigCaps.bands = standardHF; rigCaps.bands.push_back(bandGen); rigCaps.bsr[bandGen] = 0x11; + rigCaps.modes = commonModes; + break; + case model756proii: + rigCaps.modelName = QString("IC-756 Pro II"); + rigCaps.hasSpectrum = false; + rigCaps.inputs.clear(); + rigCaps.hasLan = false; + rigCaps.hasEthernet = false; + rigCaps.hasWiFi = false; + rigCaps.hasATU = true; + rigCaps.preamps.push_back('\x01'); + rigCaps.preamps.push_back('\x02'); + rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'}); + rigCaps.antennas = {0x00, 0x01}; + rigCaps.bands = standardHF; + rigCaps.bands.push_back(bandGen); + rigCaps.bsr[bandGen] = 0x11; + rigCaps.modes = commonModes; break; case model756proiii: rigCaps.modelName = QString("IC-756 Pro III"); @@ -2893,6 +2956,7 @@ void rigCommander::determineRigCaps() rigCaps.bands = standardHF; rigCaps.bands.push_back(bandGen); rigCaps.bsr[bandGen] = 0x11; + rigCaps.modes = commonModes; break; default: rigCaps.modelName = QString("IC-0x%1").arg(rigCaps.modelID, 2, 16); @@ -2912,7 +2976,8 @@ void rigCommander::determineRigCaps() rigCaps.bands = standardHF; rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end()); rigCaps.bands.insert(rigCaps.bands.end(), {band23cm, band4m, band630m, band2200m, bandGen}); - qInfo(logRig()) << "Found unknown rig: " << rigCaps.modelID; + rigCaps.modes = commonModes; + qInfo(logRig()) << "Found unknown rig: 0x" << QString("%1").arg(rigCaps.modelID, 2, 16); break; } haveRigCaps = true; diff --git a/rigcommander.h b/rigcommander.h index bdb111c..23f714e 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -9,6 +9,7 @@ #include "udphandler.h" #include "rigidentities.h" #include "repeaterattributes.h" +#include "freqmemory.h" // This file figures out what to send to the comm and also // parses returns into useful things. @@ -375,6 +376,7 @@ private: void debugMe(); void printHex(const QByteArray &pdata); void printHex(const QByteArray &pdata, bool printVert, bool printHoriz); + mode_info createMode(mode_kind m, unsigned char reg, QString name); commHandler* comm = Q_NULLPTR; pttyHandler* ptty = Q_NULLPTR; diff --git a/rigidentities.cpp b/rigidentities.cpp index f335659..15f62ac 100644 --- a/rigidentities.cpp +++ b/rigidentities.cpp @@ -58,6 +58,9 @@ model_kind determineRadioModel(unsigned char rigID) case model756pro: rig = model756pro; break; + case model756proii: + rig = model756proii; + break; default: rig = modelUnknown; break; diff --git a/rigidentities.h b/rigidentities.h index 21a8bf4..9ad2630 100644 --- a/rigidentities.h +++ b/rigidentities.h @@ -6,6 +6,8 @@ #include #include +#include "freqmemory.h" + // Credit for parts of CIV list: // http://www.docksideradio.com/Icom%20Radio%20Hex%20Addresses.htm @@ -27,6 +29,7 @@ enum model_kind { model705 = 0xA4, model706 = 0x58, model756pro = 0x5C, + model756proii = 0x64, model756proiii = 0x6E, model910h = 0x60, modelUnknown = 0xFF @@ -102,6 +105,8 @@ struct rigCapabilities { std::vector antennas; std::vector bands; unsigned char bsr[20] = {0}; + + std::vector modes; }; diff --git a/wfmain.cpp b/wfmain.cpp index 8b31327..c98cd09 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -863,6 +863,9 @@ void wfmain::receiveFoundRigID(rigCapabilities rigCaps) delayedCommand->setInterval( msMinTiming * 2); // 20 byte message periodicPollingTimer->setInterval( msMinTiming ); // slower for s-meter poll + qInfo(logSystem()) << "Delay command interval timing: " << msMinTiming * 2 << "ms"; + qInfo(logSystem()) << "Periodic polling timer: " << msMinTiming << "ms"; + // Normal: delayedCmdIntervalLAN_ms = msMinTiming * 2; delayedCmdIntervalSerial_ms = msMinTiming * 2; @@ -2244,40 +2247,19 @@ void wfmain::receiveRigID(rigCapabilities rigCaps) // Added so that server receives rig capabilities. emit sendRigCaps(rigCaps); rpt->setRig(rigCaps); - if(rigCaps.model==model7850) + + // Set the mode combo box up: + + ui->modeSelectCombo->blockSignals(true); + ui->modeSelectCombo->clear(); + + for(unsigned int i=0; i < rigCaps.modes.size(); i++) { - ui->modeSelectCombo->addItem("PSK", 0x12); - ui->modeSelectCombo->addItem("PSK-R", 0x13); + ui->modeSelectCombo->addItem(rigCaps.modes.at(i).name, + rigCaps.modes.at(i).reg); } - if(rigCaps.hasDV) - { - ui->modeSelectCombo->addItem("DV", 0x17); - } - - if(rigCaps.hasDD) - { - ui->modeSelectCombo->addItem("DD", 0x22); - } - - if(rigCaps.model==modelR8600) - { - ui->modeSelectCombo->addItem("WFM", 0x06); - ui->modeSelectCombo->addItem("FSK-R", 0x08); - ui->modeSelectCombo->addItem("S-AM (D)", 0x11); - ui->modeSelectCombo->addItem("S-AM (L)", 0x14); - ui->modeSelectCombo->addItem("S-AM (U)", 0x15); - ui->modeSelectCombo->addItem("P25", 0x16); - ui->modeSelectCombo->addItem("dPMR", 0x18); - ui->modeSelectCombo->addItem("NXDN-VN", 0x19); - ui->modeSelectCombo->addItem("NXDN-N", 0x20); - ui->modeSelectCombo->addItem("DCR", 0x21); - } - - if (rigCaps.model == model705) - { - ui->modeSelectCombo->addItem("WFM", 0x06); - } + ui->modeSelectCombo->blockSignals(false); if(rigCaps.model == model9700) {