diff --git a/rigcommander.cpp b/rigcommander.cpp index 0cb373b..c2d486c 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -372,9 +372,15 @@ void rigCommander::setScopeEdge(char edge) } void rigCommander::getScopeSpan() +{ + getScopeSpan(false); +} + +void rigCommander::getScopeSpan(bool isSub) { QByteArray payload; payload.setRawData("\x27\x15", 2); + payload.append(static_cast(isSub)); prepDataAndSend(payload); } @@ -1013,7 +1019,9 @@ void rigCommander::parseCommand() // note: data already is trimmed of the beginning FE FE E0 94 stuff. #ifdef QT_DEBUG - if( (payloadIn[00] != '\x27') && (payloadIn[00] != '\x15') ) + bool isSpectrumData = payloadIn.startsWith(QByteArray().setRawData("\x27\x00", 2)); + + if( (!isSpectrumData) && (payloadIn[00] != '\x15') ) { // We do not log spectrum and meter data, // as they tend to clog up any useful logging. @@ -2257,7 +2265,8 @@ void rigCommander::parseDetailedRegisters1A05() void rigCommander::parseWFData() { - //float freqSpan = 0.0; + freqt freqSpan; + bool isSub; switch(payloadIn[1]) { case 0: @@ -2281,8 +2290,10 @@ void rigCommander::parseWFData() // read span in center mode // [1] 0x15 // [2] to [8] is span encoded as a frequency - //freqSpan = parseFrequency(payloadIn, 8); - //qDebug(logRig()) << "Received 0x15 center span data: for frequency " << freqSpan; + isSub = payloadIn.at(2)==0x01; + freqSpan = parseFrequency(payloadIn, 6); + emit haveScopeSpan(freqSpan, isSub); + qDebug(logRig()) << "Received 0x15 center span data: for frequency " << freqSpan.Hz; //printHex(payloadIn, false, true); break; case 0x16: @@ -2807,6 +2818,10 @@ freqt rigCommander::parseFrequency(QByteArray data, unsigned char lastPosition) //printHex(data, false, true); + // TODO: Check length of data array prior to reading +/- position + + // TODO: 64-bit value is incorrect, multiplying by wrong numbers. + float freq = 0.0; freqt freqs; diff --git a/rigcommander.h b/rigcommander.h index ecc6646..aa6db7c 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -67,7 +67,9 @@ public slots: void getSpectrumRefLevel(); void getSpectrumRefLevel(unsigned char mainSub); void setScopeSpan(char span); + void getScopeSpan(bool isSub); void getScopeSpan(); + void setScopeEdge(char edge); void getScopeEdge(); void getScopeMode(); @@ -215,7 +217,7 @@ signals: // Spectrum: void haveSpectrumData(QByteArray spectrum, double startFreq, double endFreq); // pass along data to UI void haveSpectrumBounds(); - void haveScopeSpan(char span); + void haveScopeSpan(freqt span, bool isSub); void haveSpectrumMode(spectrumMode spectmode); void haveScopeEdge(char edge); void haveSpectrumRefLevel(int level); diff --git a/wfmain.cpp b/wfmain.cpp index 3f99016..2b7d193 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -399,9 +399,10 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent connect(this, SIGNAL(setFrequency(freqt)), rig, SLOT(setFrequency(freqt))); 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())); + //connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode())); connect(this, SIGNAL(getScopeEdge()), rig, SLOT(getScopeEdge())); connect(this, SIGNAL(getScopeSpan()), rig, SLOT(getScopeSpan())); + connect(rig, SIGNAL(haveScopeSpan(freqt,bool)), this, SLOT(receiveSpectrumSpan(freqt,bool))); connect(this, SIGNAL(setScopeFixedEdge(double,double,unsigned char)), rig, SLOT(setSpectrumBounds(double,double,unsigned char))); connect(this, SIGNAL(setMode(unsigned char, unsigned char)), rig, SLOT(setMode(unsigned char, unsigned char))); @@ -1498,6 +1499,9 @@ void wfmain:: getInitialRigState() cmdOutQue.append(cmdGetPreamp); } + cmdOutQue.append(cmdGetSpectrumMode); + cmdOutQue.append(cmdGetSpectrumSpan); + cmdOutQue.append(cmdNone); cmdOutQue.append(cmdStartRegularPolling); @@ -1853,6 +1857,9 @@ void wfmain::runDelayedCommand() case cmdGetSpectrumMode: emit getScopeMode(); break; + case cmdGetSpectrumSpan: + emit getScopeSpan(); + break; case cmdSpecOn: emit spectOutputEnable(); break; @@ -3694,6 +3701,44 @@ void wfmain::receiveAttenuator(unsigned char att) ui->attSelCombo->setCurrentIndex(attindex); } +void wfmain::receiveSpectrumSpan(freqt freqspan, bool isSub) +{ + if(!isSub) + { + switch((int)(freqspan.MHzDouble * 1000000.0)) + { + case(2500): + ui->scopeBWCombo->setCurrentIndex(0); + break; + case(5000): + ui->scopeBWCombo->setCurrentIndex(1); + break; + case(10000): + ui->scopeBWCombo->setCurrentIndex(2); + break; + case(25000): + ui->scopeBWCombo->setCurrentIndex(3); + break; + case(50000): + ui->scopeBWCombo->setCurrentIndex(4); + break; + case(100000): + ui->scopeBWCombo->setCurrentIndex(5); + break; + case(250000): + ui->scopeBWCombo->setCurrentIndex(6); + break; + case(500000): + ui->scopeBWCombo->setCurrentIndex(7); + break; + default: + qDebug(logSystem()) << __func__ << "Could not match: " << freqspan.MHzDouble << " to anything like: " << (int)(freqspan.MHzDouble*1E6); + break; + } + + } +} + // --- DEBUG FUNCTION --- void wfmain::on_debugBtn_clicked() { @@ -3709,5 +3754,5 @@ void wfmain::on_debugBtn_clicked() // emit getTSQL(); qDebug(logSystem()) << "Getting scope mode"; - emit getScopeMode(); + emit getScopeMode(); // center or fixed } diff --git a/wfmain.h b/wfmain.h index 7d409c1..bef0feb 100644 --- a/wfmain.h +++ b/wfmain.h @@ -171,6 +171,7 @@ private slots: void receiveMode(unsigned char mode, unsigned char filter); void receiveSpectrumData(QByteArray spectrum, double startFreq, double endFreq); void receiveSpectrumMode(spectrumMode spectMode); + void receiveSpectrumSpan(freqt freqspan, bool isSub); void receivePTTstatus(bool pttOn); void receiveDataModeStatus(bool dataOn); void receiveBandStackReg(float freq, char mode, bool dataOn); // freq, mode, (filter,) datamode @@ -501,7 +502,7 @@ private: enum cmds {cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdGetMode, cmdGetDataMode, cmdSetDataModeOn, cmdSetDataModeOff, cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdGetAfGain, - cmdGetSql, cmdGetATUStatus, cmdGetSpectrumMode, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, + cmdGetSql, cmdGetATUStatus, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdGetTxPower, cmdGetMicGain, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput, cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetPowerMeter, cmdGetALCMeter, cmdGetCompMeter,