diff --git a/rigcommander.cpp b/rigcommander.cpp index 4ae8bab..0b954f4 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -149,7 +149,7 @@ void rigCommander::setup() lookingForRig = false; foundRig = false; - oldScopeMode = 3; + oldScopeMode = spectModeUnknown; pttAllowed = true; // This is for developing, set to false for "safe" debugging. Set to true for deployment. } @@ -326,7 +326,7 @@ void rigCommander::getScopeMode() { // center or fixed QByteArray payload; - payload.setRawData("\x27\x14", 2); + payload.setRawData("\x27\x14\x00", 3); prepDataAndSend(payload); } @@ -419,6 +419,14 @@ void rigCommander::setSpectrumCenteredMode(bool centerEnable) prepDataAndSend(specModePayload); } +void rigCommander::setSpectrumMode(spectrumMode spectMode) +{ + QByteArray specModePayload; + specModePayload.setRawData("\x27\x14\x00", 3); + specModePayload.append( static_cast(spectMode) ); + prepDataAndSend(specModePayload); +} + void rigCommander::getSpectrumRefLevel() { QByteArray payload; @@ -468,6 +476,13 @@ void rigCommander::getSpectrumCenterMode() prepDataAndSend(specModePayload); } +void rigCommander::getSpectrumMode() +{ + QByteArray specModePayload; + specModePayload.setRawData("\x27\x14", 2); + prepDataAndSend(specModePayload); +} + void rigCommander::setFrequency(double freq) { QByteArray freqPayload = makeFreqPayload(freq); @@ -1970,11 +1985,11 @@ void rigCommander::parseWFData() break; case 0x14: // fixed or center - emit haveSpectrumFixedMode((bool)payloadIn[2]); - qDebug(logRig()) << "received 0x14 command fix/center"; - printHex(payloadIn, false, true); + //emit haveSpectrumFixedMode((bool)payloadIn[2]); + emit haveSpectrumMode(static_cast((unsigned char)payloadIn[3])); // [1] 0x14 - // [2] 0x00 (center), 0x01 (fixed) + // [2] 0x00 + // [3] 0x00 (center), 0x01 (fixed), 0x02, 0x03 break; case 0x15: // read span in center mode @@ -2236,22 +2251,28 @@ void rigCommander::parseSpectrum() if ((sequence == 1) && (sequence < rigCaps.spectSeqMax)) { - unsigned char scopeMode = bcdHexToUChar(payloadIn[05]); // 0=center, 1=fixed + spectrumMode scopeMode = (spectrumMode)bcdHexToUChar(payloadIn[05]); // 0=center, 1=fixed if(scopeMode != oldScopeMode) { - //TODO: Figure out if this is the first spectrum, and if so, always emit. - emit haveSpectrumFixedMode(scopeMode==1); + //TODO: support the other two modes (firmware 1.40) + // Modes: + // 0x00 Center + // 0x01 Fixed + // 0x02 Scroll-C + // 0x03 Scroll-F + emit haveSpectrumMode(scopeMode); + emit haveSpectrumFixedMode(scopeMode==spectModeFixed); oldScopeMode = scopeMode; } // wave information spectrumLine.clear(); - // parseFrequency(endPosition); // overload does not emit! Return? Where? how... + // For Fixed, and both scroll modes, the following produces correct information: spectrumStartFreq = parseFrequency(payloadIn, 9); spectrumEndFreq = parseFrequency(payloadIn, 14); - if(scopeMode == 0) + if(scopeMode == spectModeCenter) { // "center" mode, start is actuall center, end is bandwidth. spectrumStartFreq -= spectrumEndFreq; diff --git a/rigcommander.h b/rigcommander.h index 75ab5ac..e27fa57 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -36,6 +36,14 @@ enum meterKind { meterCurrent }; +enum spectrumMode { + spectModeCenter=0x00, + spectModeFixed=0x01, + spectModeScrollC=0x02, + spectModeScrollF=0x03, + spectModeUnknown=0xff +}; + class rigCommander : public QObject { Q_OBJECT @@ -57,7 +65,9 @@ public slots: void disableSpectrumDisplay(); void setSpectrumBounds(double startFreq, double endFreq, unsigned char edgeNumber); void setSpectrumCenteredMode(bool centerEnable); // centered or band-wise + void setSpectrumMode(spectrumMode spectMode); void getSpectrumCenterMode(); + void getSpectrumMode(); void setSpectrumRefLevel(int level); void getSpectrumRefLevel(); void getSpectrumRefLevel(unsigned char mainSub); @@ -161,6 +171,7 @@ signals: void haveSpectrumBounds(); void haveScopeSpan(char span); void haveSpectrumFixedMode(bool fixedEnabled); + void haveSpectrumMode(spectrumMode spectmode); void haveScopeEdge(char edge); void haveSpectrumRefLevel(int level); @@ -260,7 +271,7 @@ private: quint8 spectSeqMax; quint16 spectAmpMax; quint16 spectLenMax; - unsigned char oldScopeMode; + spectrumMode oldScopeMode; bool usingNativeLAN; // indicates using OEM LAN connection (705,7610,9700,7850) bool lookingForRig; diff --git a/wfmain.cpp b/wfmain.cpp index 0d4c247..3123a46 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -171,6 +171,12 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent loadSettings(); // Look for saved preferences setTuningSteps(); // TODO: Combine into preferences + ui->spectrumModeCombo->addItem("Center", (spectrumMode)spectModeCenter); + ui->spectrumModeCombo->addItem("Fixed", (spectrumMode)spectModeFixed); + ui->spectrumModeCombo->addItem("Scroll-C", (spectrumMode)spectModeScrollC); + ui->spectrumModeCombo->addItem("Scroll-F", (spectrumMode)spectModeScrollF); + + // if setting for serial port is "auto" then... // if(prefs.serialPortRadio == QString("auto")) // { @@ -285,6 +291,7 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); + qRegisterMetaType(); connect(rig, SIGNAL(haveFrequency(double)), this, SLOT(receiveFreq(double))); connect(this, SIGNAL(getFrequency()), rig, SLOT(getFrequency())); @@ -315,8 +322,11 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent connect(rig, SIGNAL(haveSpectrumData(QByteArray, double, double)), this, SLOT(receiveSpectrumData(QByteArray, double, double))); connect(rig, SIGNAL(haveSpectrumFixedMode(bool)), this, SLOT(receiveSpectrumFixedMode(bool))); + connect(rig, SIGNAL(haveSpectrumMode(spectrumMode)), this, SLOT(receiveSpectrumMode(spectrumMode))); + connect(this, SIGNAL(setScopeMode(spectrumMode)), rig, SLOT(setSpectrumMode(spectrumMode))); + connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode())); + connect(this, SIGNAL(setFrequency(double)), rig, SLOT(setFrequency(double))); - connect(this, SIGNAL(setScopeCenterMode(bool)), rig, SLOT(setSpectrumCenteredMode(bool))); connect(this, SIGNAL(setScopeEdge(char)), rig, SLOT(setScopeEdge(char))); connect(this, SIGNAL(setScopeSpan(char)), rig, SLOT(setScopeSpan(char))); connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode())); @@ -1581,10 +1591,10 @@ void wfmain::runPeriodicCommands() emit getATUStatus(); break; case cmdScopeCenterMode: - emit setScopeCenterMode(true); + emit setScopeMode(spectModeCenter); break; case cmdScopeFixedMode: - emit setScopeCenterMode(false); + emit setScopeMode(spectModeFixed); break; case cmdGetPTT: emit getPTT(); @@ -1675,6 +1685,9 @@ void wfmain::runDelayedCommand() case cmdDispDisable: emit scopeDisplayDisable(); break; + case cmdGetSpectrumMode: + emit getScopeMode(); + break; case cmdSpecOn: emit spectOutputEnable(); break; @@ -1703,10 +1716,10 @@ void wfmain::runDelayedCommand() emit getATUStatus(); break; case cmdScopeCenterMode: - emit setScopeCenterMode(true); + emit setScopeMode(spectModeCenter); break; case cmdScopeFixedMode: - emit setScopeCenterMode(false); + emit setScopeMode(spectModeFixed); break; case cmdGetPTT: emit getPTT(); @@ -2000,11 +2013,24 @@ void wfmain::receiveSpectrumData(QByteArray spectrum, double startFreq, double e void wfmain::receiveSpectrumFixedMode(bool isFixed) { - ui->scopeCenterModeChk->blockSignals(true); - ui->scopeCenterModeChk->setChecked(!isFixed); - ui->scopeCenterModeChk->blockSignals(false); + qDebug() << __func__ << "Please remove this"; + (void)isFixed; } +void wfmain::receiveSpectrumMode(spectrumMode spectMode) +{ + for(int i=0; i < ui->spectrumModeCombo->count(); i++) + { + if(static_cast(ui->spectrumModeCombo->itemData(i).toInt()) == spectMode) + { + ui->spectrumModeCombo->blockSignals(true); + ui->spectrumModeCombo->setCurrentIndex(i); + ui->spectrumModeCombo->blockSignals(false); + } + } +} + + void wfmain::handlePlotDoubleClick(QMouseEvent *me) { double x; @@ -2314,9 +2340,9 @@ void wfmain::on_fCEbtn_clicked() freqTextSelected = false; } -void wfmain::on_scopeCenterModeChk_clicked(bool checked) +void wfmain::on_spectrumModeCombo_currentIndexChanged(int index) { - emit setScopeCenterMode(checked); + emit setScopeMode(static_cast(ui->spectrumModeCombo->itemData(index).toInt())); } void wfmain::on_fEnterBtn_clicked() @@ -2907,10 +2933,10 @@ void wfmain::on_toFixedBtn_clicked() { emit setScopeFixedEdge(oldLowerFreq, oldUpperFreq, ui->scopeEdgeCombo->currentIndex()+1); emit setScopeEdge(ui->scopeEdgeCombo->currentIndex()+1); - cmdOutQue.append(cmdScopeFixedMode); - delayedCommand->start(); + issueDelayedCommand(cmdScopeFixedMode); } + void wfmain::on_connectBtn_clicked() { this->rigStatus->setText(""); // Clear status @@ -3410,5 +3436,9 @@ void wfmain::on_debugBtn_clicked() // emit getMeters(amTransmitting); // emit getTSQL(); - ui->meterWidget->update(); + qDebug(logSystem()) << "Getting scope mode"; + emit getScopeMode(); + } + + diff --git a/wfmain.h b/wfmain.h index 82108c3..2e6f6c2 100644 --- a/wfmain.h +++ b/wfmain.h @@ -96,7 +96,7 @@ signals: void spectOutputDisable(); void scopeDisplayEnable(); void scopeDisplayDisable(); - void setScopeCenterMode(bool centerEnable); + void setScopeMode(spectrumMode spectMode); void setScopeSpan(char span); void setScopeEdge(char edge); void setScopeFixedEdge(double startFreq, double endFreq, unsigned char edgeNumber); @@ -156,6 +156,7 @@ private slots: void receiveMode(unsigned char mode, unsigned char filter); void receiveSpectrumData(QByteArray spectrum, double startFreq, double endFreq); void receiveSpectrumFixedMode(bool isFixed); + void receiveSpectrumMode(spectrumMode spectMode); void receivePTTstatus(bool pttOn); void receiveDataModeStatus(bool dataOn); void receiveBandStackReg(float freq, char mode, bool dataOn); // freq, mode, (filter,) datamode @@ -235,9 +236,6 @@ private slots: void on_fCEbtn_clicked(); - - void on_scopeCenterModeChk_clicked(bool checked); - void on_fEnterBtn_clicked(); void on_scopeBWCombo_currentIndexChanged(int index); @@ -377,6 +375,8 @@ private slots: void on_tuneLockChk_clicked(bool checked); + void on_spectrumModeCombo_currentIndexChanged(int index); + private: Ui::wfmain *ui; QSettings settings; @@ -475,7 +475,7 @@ private: double knobFreqMhz; enum cmds {cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdGetMode, cmdGetDataMode, cmdSetDataModeOn, cmdSetDataModeOff, cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdGetAfGain, - cmdGetSql, cmdGetATUStatus, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, + cmdGetSql, cmdGetATUStatus, cmdGetSpectrumMode, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdGetTxPower, cmdGetMicGain, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput, cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetPowerMeter, cmdGetALCMeter, cmdGetCompMeter}; @@ -616,6 +616,6 @@ Q_DECLARE_METATYPE(struct rigCapabilities) Q_DECLARE_METATYPE(enum rigInput) Q_DECLARE_METATYPE(enum duplexMode) Q_DECLARE_METATYPE(enum meterKind) - +Q_DECLARE_METATYPE(enum spectrumMode) #endif // WFMAIN_H diff --git a/wfmain.ui b/wfmain.ui index 0b895b2..524a72e 100644 --- a/wfmain.ui +++ b/wfmain.ui @@ -49,12 +49,15 @@ 0 - + - Center Mode + Spectrum Mode: + + +