From 60118169e1026456abd0633003dbd7d1bde37344 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Tue, 7 Dec 2021 14:52:47 +0000 Subject: [PATCH] Properly handle different rigctld client versions --- rigcommander.cpp | 109 +++++++++++++++++++++++++++++++++++++++++++---- rigcommander.h | 4 ++ rigctld.cpp | 17 +++++++- rigctld.h | 1 + rigstate.h | 2 +- 5 files changed, 121 insertions(+), 12 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index 99e63db..da5e894 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -22,6 +22,7 @@ rigCommander::rigCommander() { + state.set(SCOPEFUNC,true,false); } rigCommander::~rigCommander() @@ -675,8 +676,6 @@ void rigCommander::setRitValue(int ritValue) bool isNegative = false; payload.setRawData("\x21\x00", 2); - qDebug() << "Sending RIT" << ritValue; - if(ritValue < 0) { isNegative = true; @@ -696,7 +695,6 @@ void rigCommander::setRitValue(int ritValue) payload.append(QByteArray(1,(char)isNegative)); prepDataAndSend(payload); - qDebug() << "Sending RIT" << ritValue; } void rigCommander::setMode(mode_info m) @@ -1706,6 +1704,20 @@ void rigCommander::setModInputLevel(rigInput input, unsigned char level) } } +void rigCommander::setAfMute(bool gainOn) +{ + QByteArray payload("\x1a\x09"); + payload.append((quint8)gainOn); + prepDataAndSend(payload); +} + +void rigCommander::setDialLock(bool lockOn) +{ + QByteArray payload("\x16\x50"); + payload.append((quint8)lockOn); + prepDataAndSend(payload); +} + void rigCommander::getModInputLevel(rigInput input) { switch(input) @@ -1739,6 +1751,18 @@ void rigCommander::getModInputLevel(rigInput input) } } +void rigCommander::getAfMute() +{ + QByteArray payload("\x1a\x09"); + prepDataAndSend(payload); +} + +void rigCommander::getDialLock() +{ + QByteArray payload("\x16\x50"); + prepDataAndSend(payload); +} + QByteArray rigCommander::getUSBAddr() { QByteArray payload; @@ -2378,6 +2402,8 @@ void rigCommander::parseATU() // [1]: 0x01 // [2]: 0 = off, 0x01 = on, 0x02 = tuning in-progress emit haveATUStatus((unsigned char) payloadIn[2]); + // This is a bool so any non-zero will mean enabled. + state.set(TUNERFUNC, (bool)payloadIn[2], false); } void rigCommander::parsePTT() @@ -2438,6 +2464,8 @@ void rigCommander::parseRegisters1A() case '\x07': // IP+ status break; + case '\x09': + state.set(MUTEFUNC, (quint8)payloadIn[2], false); default: break; } @@ -2537,6 +2565,9 @@ void rigCommander::parseRegister16() case '\x48': // Manual Notch state.set(MNFUNC, payloadIn.at(2) != 0, false); break; + case '\x50': // Dial lock + state.set(LOCKFUNC, payloadIn.at(2) != 0, false); + break; default: break; } @@ -4482,12 +4513,12 @@ void rigCommander::stateUpdated() getRitValue(); break; case RITFUNC: - if (i.value()._valid) { - setRitEnable(state.getBool(RITFUNC)); - } - getRitEnabled(); - break; - + if (i.value()._valid) { + setRitEnable(state.getBool(RITFUNC)); + } + getRitEnabled(); + break; + // All meters can only be updated from the rig end. case SMETER: case POWERMETER: case ALCMETER: @@ -4495,6 +4526,66 @@ void rigCommander::stateUpdated() case VOLTAGEMETER: case CURRENTMETER: break; + case AGC: + break; + case MODINPUT: + break; + case FAGCFUNC: + break; + case AIPFUNC: + break; + case APFFUNC: + break; + case RFFUNC: // Should this set RF output power to 0? + break; + case AROFUNC: + break; + case MUTEFUNC: + if (i.value()._valid) { + setAfMute(state.getBool(MUTEFUNC)); + } + getAfMute(); + break; + case VSCFUNC: + break; + case REVFUNC: + break; + case SQLFUNC: + break; + case ABMFUNC: + break; + case BCFUNC: + break; + case MBCFUNC: + break; + case AFCFUNC: + break; + case SATMODEFUNC: + break; + case NBLEVEL: + break; + case NBDEPTH: + break; + case NBWIDTH: + break; + case NRLEVEL: + break; + case RESUMEFUNC: + break; + case TBURSTFUNC: + break; + case TUNERFUNC: + if (i.value()._valid) { + setATU(state.getBool(TUNERFUNC)); + } + getATUStatus(); + break; + case LOCKFUNC: + if (i.value()._valid) { + setDialLock(state.getBool(LOCKFUNC)); + } + getDialLock(); + break; } } ++i; diff --git a/rigcommander.h b/rigcommander.h index afef8b9..b1248a9 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -184,6 +184,8 @@ public slots: void getACCGain(unsigned char ab); void getModInput(bool dataOn); void getModInputLevel(rigInput input); + void getAfMute(); + void getDialLock(); // Set Levels: void setSquelch(unsigned char level); @@ -204,6 +206,8 @@ public slots: void setAntiVoxGain(unsigned char gain); void setModInput(rigInput input, bool dataOn); void setModInputLevel(rigInput input, unsigned char level); + void setAfMute(bool muteOn); + void setDialLock(bool lockOn); // NB, NR, IP+: void setIPP(bool enabled); diff --git a/rigctld.cpp b/rigctld.cpp index b2222cf..daf779d 100644 --- a/rigctld.cpp +++ b/rigctld.cpp @@ -185,6 +185,7 @@ void rigCtlClient::socketReadyRead() if (command[0] == 0xf0 || command[0] == "chk_vfo") { + chkVfoEecuted = true; QString resp; if (longReply) { resp.append(QString("ChkVFO: ")); @@ -296,7 +297,20 @@ void rigCtlClient::socketReadyRead() response.append("0x7fffffff"); response.append("0x7fffffff"); */ - //response.append("done"); + if (chkVfoEecuted) { + response.append(QString("vfo_ops=0x%1").arg(255, 0, 16)); + response.append(QString("ptt_type=0x%1").arg(rigCaps.hasTransmit, 0, 16)); + response.append(QString("has_set_vfo=0x%1").arg(1, 0, 16)); + response.append(QString("has_get_vfo=0x%1").arg(1, 0, 16)); + response.append(QString("has_set_freq=0x%1").arg(1, 0, 16)); + response.append(QString("has_get_freq=0x%1").arg(1, 0, 16)); + response.append(QString("has_set_conf=0x%1").arg(1, 0, 16)); + response.append(QString("has_get_conf=0x%1").arg(1, 0, 16)); + response.append(QString("has_power2mW=0x%1").arg(1, 0, 16)); + response.append(QString("has_mW2power=0x%1").arg(1, 0, 16)); + response.append(QString("timeout=0x%1").arg(1000, 0, 16)); + response.append("done"); + } } else if (command[0] == "f" || command[0] == "get_freq") @@ -610,7 +624,6 @@ void rigCtlClient::socketReadyRead() } else if (command[0] == "J" || command[0] == "set_rit") { - qDebug(logRigCtlD()) << "set_rit:" << command[1]; rigState->set(RITVALUE, command[1].toInt(),true); setCommand = true; } diff --git a/rigctld.h b/rigctld.h index 1132abf..d86818d 100644 --- a/rigctld.h +++ b/rigctld.h @@ -402,6 +402,7 @@ private: rigCapabilities rigCaps; rigstate* rigState = Q_NULLPTR; rigCtlD* parent; + bool chkVfoEecuted=false; QString getMode(unsigned char mode, bool datamode); unsigned char getMode(QString modeString); QString getFilter(unsigned char mode, unsigned char filter); diff --git a/rigstate.h b/rigstate.h index 154088f..8722f9e 100644 --- a/rigstate.h +++ b/rigstate.h @@ -12,7 +12,7 @@ #include "rigidentities.h" // Meters at the end as they are ALWAYS updated from the rig! -enum stateTypes { NONE, VFOAFREQ, VFOBFREQ, CURRENTVFO, PTT, MODE, FILTER, DUPLEX, DATAMODE, ANTENNA, RXANTENNA, CTCSS, TSQL, DTCS, CSQL, +enum stateTypes { VFOAFREQ, VFOBFREQ, CURRENTVFO, PTT, MODE, FILTER, DUPLEX, DATAMODE, ANTENNA, RXANTENNA, CTCSS, TSQL, DTCS, CSQL, PREAMP, AGC, ATTENUATOR, MODINPUT, AFGAIN, RFGAIN, SQUELCH, TXPOWER, MICGAIN, COMPLEVEL, MONITORLEVEL, VOXGAIN, ANTIVOXGAIN, FAGCFUNC, NBFUNC, COMPFUNC, VOXFUNC, TONEFUNC, TSQLFUNC, SBKINFUNC, FBKINFUNC, ANFFUNC, NRFUNC, AIPFUNC, APFFUNC, MONFUNC, MNFUNC,RFFUNC, AROFUNC, MUTEFUNC, VSCFUNC, REVFUNC, SQLFUNC, ABMFUNC, BCFUNC, MBCFUNC, RITFUNC, AFCFUNC, SATMODEFUNC, SCOPEFUNC,