From 6a9301d9212400ccdfc4fc931e1698bc2fdde280 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Fri, 26 May 2023 18:38:40 +0100 Subject: [PATCH] Fix band buttons --- rigcommander.cpp | 20 +++++++++++++++++++- rigidentities.h | 18 +++++++++++++++++- wfmain.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index 789e9b6..1e3d513 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -2198,8 +2198,20 @@ void rigCommander::parseCommand() break; // 0x1a case funcBandStackReg: - parseBandStackReg(); + { + bandStackType bsr; + bsr.band = payloadIn[2]; + bsr.regCode = payloadIn[3]; + bsr.freq = parseFrequency(payloadIn, 7); + // The Band Stacking command returns the regCode in the position that VFO is expected. + // As BSR is always on the active VFO, just set that. + bsr.freq.VFO = selVFO_t::activeVFO; + bsr.data = (payloadIn[11] & 0x10) >> 4; // not sure... + bsr.mode = payloadIn[9]; + bsr.filter = payloadIn[10]; + value.setValue(bsr); break; + } case funcFilterWidth: { quint16 calc; @@ -7101,6 +7113,12 @@ void rigCommander::receiveCommand(queueItemType type, funcs func, QVariant value toneInfo t = value.value(); payload.append(encodeTone(t.tone, t.tinv, t.rinv)); } + else if (!strcmp(value.typeName(),"bandStackType")) + { + bandStackType bsr = value.value(); + payload.append(bsr.band); + payload.append(bsr.regCode); // [01...03]. 01 = latest, 03 = oldest + } else { qInfo(logRig()) << "Got unknown value type" << QString(value.typeName()); diff --git a/rigidentities.h b/rigidentities.h index 74b4678..22b8582 100644 --- a/rigidentities.h +++ b/rigidentities.h @@ -159,7 +159,22 @@ struct genericType { QString name; }; -model_kind determineRadioModel(unsigned char rigID); + +struct bandStackType { + bandStackType() {} + bandStackType(uchar band, uchar regCode): band(band),regCode(regCode), freq(), data(0), mode(0), filter(0) {} + bandStackType(uchar band, uchar regCode, freqt freq, uchar data, uchar mode, uchar filter): + band(band), regCode(regCode), freq(freq), data(data), mode(mode), filter(filter) {}; + uchar band; + uchar regCode; + freqt freq; + uchar data; + uchar mode; + uchar filter; +}; + + +//model_kind determineRadioModel(unsigned char rigID); struct rigCapabilities { quint8 model; @@ -249,6 +264,7 @@ Q_DECLARE_METATYPE(filterType) Q_DECLARE_METATYPE(inputTypes) Q_DECLARE_METATYPE(genericType) Q_DECLARE_METATYPE(bandType) +Q_DECLARE_METATYPE(bandStackType) Q_DECLARE_METATYPE(centerSpanData) #endif // RIGIDENTITIES_H diff --git a/wfmain.cpp b/wfmain.cpp index c8f6ab3..b17ccab 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -96,6 +96,7 @@ wfmain::wfmain(const QString settingsFile, const QString logFile, bool debugMode qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); + qRegisterMetaType(); haveRigCaps = false; @@ -5493,7 +5494,7 @@ void wfmain::bandStackBtnClick() { bandStkRegCode = ui->bandStkPopdown->currentIndex() + 1; waitingForBandStackRtn = true; // so that when the return is parsed we jump to this frequency/mode info - emit getBandStackReg(bandStkBand, bandStkRegCode); + queue->add(priorityImmediate,queueItem(funcBandStackReg,QVariant::fromValue(bandStackType(bandStkBand, bandStkRegCode)),false)); } void wfmain::setBand(int band) @@ -9132,7 +9133,29 @@ void wfmain::receiveValue(cacheItem val){ break; // 0x1a case funcBandStackReg: + { + bandStackType bsr = val.value.value(); + qInfo(logSystem()) << __func__ << "BSR received into main: Freq: " << bsr.freq.Hz << ", mode: " << bsr.mode << ", filter: " << bsr.filter << ", data mode: " << bsr.data; + + queue->add(priorityImmediate,queueItem((rigCaps.commands.contains(funcSelectedFreq)?funcSelectedFreq:funcFreqSet),QVariant::fromValue(bsr.freq),false)); + + freq = bsr.freq; + + ui->tabWidget->setCurrentIndex(0); + + foreach (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(md),false)); + queue->add(priorityImmediate,queueItem((rigCaps.commands.contains(funcSelectedMode)?funcNone:funcDataModeWithFilter),QVariant::fromValue(md),false)); + receiveMode(md); // update UI + break; + } + } break; + } case funcFilterWidth: receivePassband(val.value.value()); break;