From d8e244f33a6f420224b8e618c963b15beb4510a1 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Mon, 26 Sep 2022 01:44:49 +0100 Subject: [PATCH] First look at a passband indicator --- rigcommander.cpp | 32 +++++++++++++++++++++++++++ rigcommander.h | 3 +++ wfmain.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++-- wfmain.h | 12 +++++++---- 4 files changed, 97 insertions(+), 6 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index d6ea80c..27d30ac 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -872,6 +872,35 @@ void rigCommander::getDuplexMode() prepDataAndSend(payload); } +void rigCommander::getPassband() +{ + QByteArray payload; + payload.setRawData("\x1A\x03", 2); + + /* + int cmd; + if (mode == modeLSB || mode == modeUSB || mode == modeLSB_D || mode == modeUSB_D) + cmd = 1; + else if (mode == modeAM) + cmd = 4; + else if (mode == modeFM) + cmd = 7; + else if (mode == modeCW || mode == modeCW_R) + cmd = 10; + else if (mode == modeRTTY || mode == modeRTTY_R) + cmd = 11; + else if (mode == modePSK || mode == modePSK_R) + cmd = 12; + else + cmd = 1; + + payload.append(bcdEncodeInt(cmd)); + */ + + qDebug() << "Requesting Passband" << payload; + prepDataAndSend(payload); +} + void rigCommander::getTransmitFrequency() { QByteArray payload; @@ -2511,6 +2540,9 @@ void rigCommander::parseRegisters1A() // band stacking register parseBandStackReg(); break; + case '\x03': + emit havePassband(bcdHexToUChar((quint8)payloadIn[2])); + break; case '\x04': state.set(AGC, (quint8)payloadIn[2], false); break; diff --git a/rigcommander.h b/rigcommander.h index e26941e..3655e41 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -157,6 +157,8 @@ public slots: void setManualNotch(bool enabled); void getManualNotch(); + void getPassband(); + // Repeater: void setDuplexMode(duplexMode dm); void getDuplexMode(); @@ -321,6 +323,7 @@ signals: void haveBandStackReg(freqt f, char mode, char filter, bool dataOn); void haveRitEnabled(bool ritEnabled); void haveRitFrequency(int ritHz); + void havePassband(quint8 pass); // Repeater: void haveDuplexMode(duplexMode); diff --git a/wfmain.cpp b/wfmain.cpp index fee1ddb..f46499e 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -61,6 +61,7 @@ wfmain::wfmain(const QString settingsFile, const QString logFile, bool debugMode qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); + qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType (); qRegisterMetaType (); @@ -283,6 +284,7 @@ void wfmain::rigConnections() connect(this, SIGNAL(scopeDisplayEnable()), rig, SLOT(enableSpectrumDisplay())); connect(rig, SIGNAL(haveMode(unsigned char, unsigned char)), this, SLOT(receiveMode(unsigned char, unsigned char))); connect(rig, SIGNAL(haveDataMode(bool)), this, SLOT(receiveDataModeStatus(bool))); + connect(rig, SIGNAL(havePassband(quint8)), this, SLOT(receivePassband(quint8))); connect(rpt, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode())); connect(rpt, SIGNAL(setDuplexMode(duplexMode)), rig, SLOT(setDuplexMode(duplexMode))); @@ -302,6 +304,7 @@ void wfmain::rigConnections() connect(this, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode())); + connect(this, SIGNAL(getPassband()), rig, SLOT(getPassband())); connect(this, SIGNAL(getTone()), rig, SLOT(getTone())); connect(this, SIGNAL(getTSQL()), rig, SLOT(getTSQL())); connect(this, SIGNAL(getRptAccessMode()), rig, SLOT(getRptAccessMode())); @@ -676,10 +679,16 @@ void wfmain::setupPlots() wf = ui->waterfall; + passbandIndicator = new QCPItemRect(plot); + passbandIndicator->setAntialiased(true); + passbandIndicator->setPen(QPen(Qt::red)); + passbandIndicator->setBrush(QBrush(Qt::red)); + freqIndicatorLine = new QCPItemLine(plot); freqIndicatorLine->setAntialiased(true); freqIndicatorLine->setPen(QPen(Qt::blue)); + ui->plot->addGraph(); // primary ui->plot->addGraph(0, 0); // secondary, peaks, same axis as first. ui->plot->addLayer( "Top Layer", ui->plot->layer("main")); @@ -704,8 +713,11 @@ void wfmain::setupPlots() plot->graph(1)->setPen(QPen(color.lighter(200))); plot->graph(1)->setBrush(QBrush(color)); - freqIndicatorLine->start->setCoords(0.5,0); - freqIndicatorLine->end->setCoords(0.5,160); + freqIndicatorLine->start->setCoords(0.5, 0); + freqIndicatorLine->end->setCoords(0.5, 160); + + passbandIndicator->topLeft->setCoords(0.5, 0); + passbandIndicator->bottomRight->setCoords(0.5, 160); // Plot user interaction connect(plot, SIGNAL(mouseDoubleClick(QMouseEvent*)), this, SLOT(handlePlotDoubleClick(QMouseEvent*))); @@ -2982,6 +2994,9 @@ void wfmain::doCmd(cmds cmd) case cmdGetDuplexMode: emit getDuplexMode(); break; + case cmdGetPassband: + emit getPassband(); + break; case cmdGetTone: emit getTone(); break; @@ -3576,6 +3591,9 @@ void wfmain::initPeriodicCommands() insertSlowPeriodicCommand(cmdGetAntenna, 128); } insertSlowPeriodicCommand(cmdGetDuplexMode, 128); + + // Get passband + insertPeriodicCommand(cmdGetPassband, 128); } void wfmain::insertPeriodicCommand(cmds cmd, unsigned char priority) @@ -3750,6 +3768,20 @@ void wfmain::receiveSpectrumData(QByteArray spectrum, double startFreq, double e { freqIndicatorLine->start->setCoords(freq.MHzDouble,0); freqIndicatorLine->end->setCoords(freq.MHzDouble,rigCaps.spectAmpMax); + + if (currentModeIndex == modeCW || currentModeIndex == modeRTTY || currentModeIndex == modeAM) { + passbandIndicator->topLeft->setCoords(freq.MHzDouble - (passBand/2), 0); + passbandIndicator->bottomRight->setCoords(freq.MHzDouble + (passBand/2), rigCaps.spectAmpMax); + } + else if (currentModeIndex == modeLSB) { + passbandIndicator->topLeft->setCoords(freq.MHzDouble - passBand - 0.0001, 0); + passbandIndicator->bottomRight->setCoords(freq.MHzDouble - 0.0001, rigCaps.spectAmpMax); + } + else if (currentModeIndex == modeUSB) { + passbandIndicator->topLeft->setCoords(freq.MHzDouble + 0.0001, 0); + passbandIndicator->bottomRight->setCoords(freq.MHzDouble + 0.0001 + passBand, rigCaps.spectAmpMax); + } + } if(underlayMode == underlayPeakHold) @@ -5259,6 +5291,24 @@ void wfmain::receiveLANGain(unsigned char level) processModLevel(inputLAN, level); } +void wfmain::receivePassband(quint8 pass) +{ + int calc; + if (currentModeIndex == modeAM) { + calc = 200 + (pass * 200); + } + else if (pass <= 10) + { + calc = 50 + (pass * 50); + } + else { + calc = 600 + ((pass - 10) * 100); + } + passBand = (double)(calc / 1000000.0); + + qInfo() << "Got Passband" << passBand << "(" << pass << ")"; +} + void wfmain::receiveMeter(meterKind inMeter, unsigned char level) { @@ -6562,6 +6612,8 @@ void wfmain::useColorPreset(colorPrefsType *cp) plot->yAxis->setTickPen(cp->axisColor); freqIndicatorLine->setPen(QPen(cp->tuningLine)); + //passbandIndicator->setPen(QPen(cp->tuningLine)); + //passbandIndicator->setBrush(QBrush(cp->tuningLine)); plot->graph(0)->setPen(QPen(cp->spectrumLine)); plot->graph(0)->setBrush(QBrush(cp->spectrumFill)); diff --git a/wfmain.h b/wfmain.h index e7e1ebf..2517afe 100644 --- a/wfmain.h +++ b/wfmain.h @@ -75,7 +75,7 @@ signals: void setRigID(unsigned char rigID); void setRTSforPTT(bool enabled); - // Power + void sendPowerOn(); void sendPowerOff(); @@ -98,6 +98,7 @@ signals: // Repeater: void getDuplexMode(); + void getPassband(); void getTone(); void getTSQL(); void getDTCS(); @@ -239,7 +240,7 @@ private slots: void receiveRITValue(int ritValHz); void receiveModInput(rigInput input, bool dataOn); //void receiveDuplexMode(duplexMode dm); - + void receivePassband(quint8 pass); // Levels: @@ -665,6 +666,7 @@ private: QCustomPlot *plot; // line plot QCustomPlot *wf; // waterfall image QCPItemLine * freqIndicatorLine; + QCPItemRect* passbandIndicator; void setAppTheme(bool isCustom); void prepareWf(); void prepareWf(unsigned int wfLength); @@ -779,6 +781,7 @@ private: double wfCeiling = 160; double oldPlotFloor = -1; double oldPlotCeiling = 999; + double passBand = 0.0; QVector wfimage; unsigned int wfLengthMax; @@ -800,7 +803,7 @@ private: cmdGetDataMode, cmdSetModeFilter, cmdSetDataModeOn, cmdSetDataModeOff, cmdGetRitEnabled, cmdGetRitValue, cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdSetRxRfGain, cmdGetAfGain, cmdSetAfGain, cmdGetSql, cmdSetSql, cmdGetIFShift, cmdSetIFShift, cmdGetTPBFInner, cmdSetTPBFInner, - cmdGetTPBFOuter, cmdSetTPBFOuter, cmdGetATUStatus, + cmdGetTPBFOuter, cmdSetTPBFOuter, cmdGetATUStatus, cmdGetPassband, cmdSetATU, cmdStartATU, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT, cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel, @@ -999,7 +1002,7 @@ private: udpServer* udp = Q_NULLPTR; rigCtlD* rigCtl = Q_NULLPTR; QThread* serverThread = Q_NULLPTR; - + void bandStackBtnClick(); bool waitingForBandStackRtn; char bandStkBand; @@ -1043,6 +1046,7 @@ Q_DECLARE_METATYPE(struct networkAudioLevels) Q_DECLARE_METATYPE(enum rigInput) Q_DECLARE_METATYPE(enum meterKind) Q_DECLARE_METATYPE(enum spectrumMode) +Q_DECLARE_METATYPE(enum mode_kind) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(rigstate*)