kopia lustrzana https://gitlab.com/eliggett/wfview
Merge branch 'rigctl-enhancement'
commit
da9f60e0bc
125
rigcommander.cpp
125
rigcommander.cpp
|
@ -22,6 +22,7 @@
|
|||
|
||||
rigCommander::rigCommander()
|
||||
{
|
||||
state.set(SCOPEFUNC,true,false);
|
||||
}
|
||||
|
||||
rigCommander::~rigCommander()
|
||||
|
@ -1703,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)
|
||||
|
@ -1736,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;
|
||||
|
@ -2347,6 +2374,7 @@ void rigCommander::parseRegister21()
|
|||
break;
|
||||
ritHz = f.Hz*((payloadIn.at(4)=='\x01')?-1:1);
|
||||
emit haveRitFrequency(ritHz);
|
||||
state.set(RITVALUE, ritHz, false);
|
||||
break;
|
||||
case '\x01':
|
||||
// RIT on/off
|
||||
|
@ -2356,6 +2384,7 @@ void rigCommander::parseRegister21()
|
|||
} else {
|
||||
emit haveRitEnabled(false);
|
||||
}
|
||||
state.set(RITFUNC, (bool)payloadIn.at(02), false);
|
||||
break;
|
||||
case '\x02':
|
||||
// Delta TX setting on/off
|
||||
|
@ -2373,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()
|
||||
|
@ -2433,6 +2464,8 @@ void rigCommander::parseRegisters1A()
|
|||
case '\x07':
|
||||
// IP+ status
|
||||
break;
|
||||
case '\x09':
|
||||
state.set(MUTEFUNC, (quint8)payloadIn[2], false);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2505,13 +2538,13 @@ void rigCommander::parseRegister16()
|
|||
case '\x43':
|
||||
state.set(TSQLFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\44':
|
||||
case '\x44':
|
||||
state.set(COMPFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\45':
|
||||
case '\x45':
|
||||
state.set(MONFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\46':
|
||||
case '\x46':
|
||||
state.set(VOXFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\x47':
|
||||
|
@ -2529,9 +2562,12 @@ void rigCommander::parseRegister16()
|
|||
state.set(SBKINFUNC, false, false);
|
||||
}
|
||||
break;
|
||||
case '\48': // Manual Notch
|
||||
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;
|
||||
}
|
||||
|
@ -4469,6 +4505,87 @@ void rigCommander::stateUpdated()
|
|||
powerOff();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RITVALUE:
|
||||
if (i.value()._valid) {
|
||||
setRitValue(state.getInt32(RITVALUE));
|
||||
}
|
||||
getRitValue();
|
||||
break;
|
||||
case RITFUNC:
|
||||
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:
|
||||
case COMPMETER:
|
||||
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;
|
||||
|
|
|
@ -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);
|
||||
|
|
84
rigctld.cpp
84
rigctld.cpp
|
@ -144,7 +144,7 @@ void rigCtlClient::socketReadyRead()
|
|||
continue;
|
||||
}
|
||||
|
||||
qDebug(logRigCtlD()) << sessionId << "command received" << commands;
|
||||
//qDebug(logRigCtlD()) << sessionId << "command received" << commands;
|
||||
|
||||
// We have a full line so process command.
|
||||
|
||||
|
@ -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: "));
|
||||
|
@ -198,29 +199,42 @@ void rigCtlClient::socketReadyRead()
|
|||
response.append("1"); // rigctld protocol version
|
||||
response.append(QString("%1").arg(rigCaps.rigctlModel));
|
||||
response.append("0"); // Print something
|
||||
bandType lastBand;
|
||||
for (bandType band : rigCaps.bands)
|
||||
{
|
||||
response.append(generateFreqRange(band));
|
||||
if (band != lastBand)
|
||||
response.append(generateFreqRange(band));
|
||||
lastBand = band;
|
||||
}
|
||||
response.append("0 0 0 0 0 0 0");
|
||||
if (rigCaps.hasTransmit) {
|
||||
for (bandType band : rigCaps.bands)
|
||||
{
|
||||
response.append(generateFreqRange(band));
|
||||
{
|
||||
if (band != lastBand)
|
||||
response.append(generateFreqRange(band));
|
||||
lastBand = band;
|
||||
}
|
||||
}
|
||||
response.append("0 0 0 0 0 0 0");
|
||||
|
||||
response.append("0x1ff 1");
|
||||
response.append("0x1ff 0");
|
||||
response.append(QString("0x%1 1").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 10").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 100").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 1000").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 2500").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 5000").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 6125").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 8333").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 10000").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 12500").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 25000").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 100000").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 250000").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 1000000").arg(getRadioModes(), 0, 16));
|
||||
response.append("0 0");
|
||||
response.append("0x1e 2400");
|
||||
response.append("0x2 500");
|
||||
response.append("0x1 8000");
|
||||
response.append("0x1 2400");
|
||||
response.append("0x20 15000");
|
||||
response.append("0x20 8000");
|
||||
response.append("0x40 230000");
|
||||
response.append(QString("0x%1 1200").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 2400").arg(getRadioModes(), 0, 16));
|
||||
response.append(QString("0x%1 3000").arg(getRadioModes(), 0, 16));
|
||||
response.append("0 0");
|
||||
response.append("9900");
|
||||
response.append("9900");
|
||||
|
@ -283,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")
|
||||
|
@ -592,11 +619,12 @@ void rigCtlClient::socketReadyRead()
|
|||
if (longReply) {
|
||||
resp.append("RIT: ");
|
||||
}
|
||||
resp.append(QString("%1").arg(0));
|
||||
resp.append(QString("%1").arg(rigState->getInt32(RITVALUE)));
|
||||
response.append(resp);
|
||||
}
|
||||
}
|
||||
else if (command[0] == "J" || command[0] == "set_rit")
|
||||
{
|
||||
rigState->set(RITVALUE, command[1].toInt(),true);
|
||||
setCommand = true;
|
||||
}
|
||||
else if (command[0] == "y" || command[0] == "get_ant")
|
||||
|
@ -1074,12 +1102,11 @@ void rigCtlClient::socketReadyRead()
|
|||
if (str != "")
|
||||
sendData(QString("%1%2").arg(str).arg(sep));
|
||||
}
|
||||
|
||||
if (sep != "\n") {
|
||||
sendData(QString("\n"));
|
||||
}
|
||||
|
||||
sep = " ";
|
||||
sep = "\n";
|
||||
num = 0;
|
||||
|
||||
}
|
||||
|
@ -1100,7 +1127,7 @@ void rigCtlClient::closeSocket()
|
|||
|
||||
void rigCtlClient::sendData(QString data)
|
||||
{
|
||||
qDebug(logRigCtlD()) << "Sending:" << data;
|
||||
//qDebug(logRigCtlD()) << "Sending:" << data;
|
||||
if (socket != Q_NULLPTR && socket->isValid() && socket->isOpen())
|
||||
{
|
||||
socket->write(data.toLatin1());
|
||||
|
@ -1173,18 +1200,18 @@ QString rigCtlClient::getFilter(unsigned char mode, unsigned char filter) {
|
|||
QString rigCtlClient::getMode(unsigned char mode, bool datamode) {
|
||||
|
||||
QString ret;
|
||||
if (datamode) {
|
||||
ret="PKT";
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case 0:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("LSB");
|
||||
break;
|
||||
case 1:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("USB");
|
||||
break;
|
||||
case 2:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("AM");
|
||||
break;
|
||||
case 3:
|
||||
|
@ -1194,6 +1221,7 @@ QString rigCtlClient::getMode(unsigned char mode, bool datamode) {
|
|||
ret.append("RTTY");
|
||||
break;
|
||||
case 5:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("FM");
|
||||
break;
|
||||
case 6:
|
||||
|
@ -1206,12 +1234,15 @@ QString rigCtlClient::getMode(unsigned char mode, bool datamode) {
|
|||
ret.append("RTTYR");
|
||||
break;
|
||||
case 12:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("USB");
|
||||
break;
|
||||
case 17:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("LSB");
|
||||
break;
|
||||
case 22:
|
||||
if (datamode) { ret = "PKT"; }
|
||||
ret.append("FM");
|
||||
break;
|
||||
}
|
||||
|
@ -1351,7 +1382,7 @@ QString rigCtlClient::generateFreqRange(bandType band)
|
|||
QString ret = "";
|
||||
|
||||
if (lowFreq > 0 && highFreq > 0) {
|
||||
ret = QString("%1 %2 0x%3 %4 %5 0x%6 0x%7").arg(lowFreq).arg(highFreq).arg(getRadioModes(),0,16).arg(-1).arg(-1).arg(0x16000003,0,16).arg(getAntennas(),0,16);
|
||||
ret = QString("%1.000000 %2.000000 0x%3 %4 %5 0x%6 0x%7").arg(lowFreq).arg(highFreq).arg(getRadioModes(),0,16).arg(-1).arg(-1).arg(0x16000003,0,16).arg(getAntennas(),0,16);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -1376,13 +1407,18 @@ quint64 rigCtlClient::getRadioModes()
|
|||
QString curMode = mode.name;
|
||||
if (!strcmp(curMode.toLocal8Bit(), mode_str[i].str))
|
||||
{
|
||||
//qDebug(logRigCtlD()) << "Found mode:" << mode.name << mode_str[i].mode;
|
||||
modes |= mode_str[i].mode;
|
||||
}
|
||||
if (rigCaps.hasDataModes) {
|
||||
curMode = "PKT" + mode.name;
|
||||
if (!strcmp(curMode.toLocal8Bit(), mode_str[i].str))
|
||||
{
|
||||
modes |= mode_str[i].mode;
|
||||
if (mode.name == "LSB" || mode.name == "USB" || mode.name == "FM" || mode.name == "AM")
|
||||
{
|
||||
// qDebug(logRigCtlD()) << "Found data mode:" << mode.name << mode_str[i].mode;
|
||||
modes |= mode_str[i].mode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
12
rigstate.h
12
rigstate.h
|
@ -12,11 +12,11 @@
|
|||
#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,
|
||||
NBLEVEL, NBDEPTH, NBWIDTH, NRLEVEL, RIGINPUT, POWERONOFF,
|
||||
NBLEVEL, NBDEPTH, NBWIDTH, NRLEVEL, RIGINPUT, POWERONOFF, RITVALUE,
|
||||
RESUMEFUNC, TBURSTFUNC, TUNERFUNC, LOCKFUNC, SMETER, POWERMETER, SWRMETER, ALCMETER, COMPMETER, VOLTAGEMETER, CURRENTMETER
|
||||
};
|
||||
|
||||
|
@ -47,7 +47,7 @@ public:
|
|||
_mutex.unlock();
|
||||
}
|
||||
}
|
||||
void set(stateTypes s, quint32 x, bool u) {
|
||||
void set(stateTypes s, qint32 x, bool u) {
|
||||
if ((quint64)x != map[s]._value) {
|
||||
_mutex.lock();
|
||||
map[s]._value = (quint64)x;
|
||||
|
@ -110,9 +110,9 @@ public:
|
|||
}
|
||||
|
||||
bool getBool(stateTypes s) { return map[s]._value != 0; }
|
||||
quint8 getChar(stateTypes s) { return map[s]._value & 0xff; }
|
||||
quint16 getInt16(stateTypes s) { return map[s]._value != 0xffff; }
|
||||
quint32 getInt32(stateTypes s) { return map[s]._value != 0xffffffff; }
|
||||
quint8 getChar(stateTypes s) { return (quint8)map[s]._value; }
|
||||
quint16 getInt16(stateTypes s) { return (qint16)map[s]._value; }
|
||||
qint32 getInt32(stateTypes s) { return (qint32)map[s]._value; }
|
||||
quint64 getInt64(stateTypes s) { return map[s]._value; }
|
||||
duplexMode getDuplex(stateTypes s) { return(duplexMode)map[s]._value; }
|
||||
rigInput getInput(stateTypes s) { return(rigInput)map[s]._value; }
|
||||
|
|
Ładowanie…
Reference in New Issue