Add RIT function and other rigctl fixes

merge-requests/8/head
Phil Taylor 2021-12-07 12:32:51 +00:00
rodzic 81c9563f16
commit 247817077c
3 zmienionych plików z 82 dodań i 33 usunięć

Wyświetl plik

@ -675,6 +675,8 @@ void rigCommander::setRitValue(int ritValue)
bool isNegative = false; bool isNegative = false;
payload.setRawData("\x21\x00", 2); payload.setRawData("\x21\x00", 2);
qDebug() << "Sending RIT" << ritValue;
if(ritValue < 0) if(ritValue < 0)
{ {
isNegative = true; isNegative = true;
@ -694,6 +696,7 @@ void rigCommander::setRitValue(int ritValue)
payload.append(QByteArray(1,(char)isNegative)); payload.append(QByteArray(1,(char)isNegative));
prepDataAndSend(payload); prepDataAndSend(payload);
qDebug() << "Sending RIT" << ritValue;
} }
void rigCommander::setMode(mode_info m) void rigCommander::setMode(mode_info m)
@ -2347,6 +2350,7 @@ void rigCommander::parseRegister21()
break; break;
ritHz = f.Hz*((payloadIn.at(4)=='\x01')?-1:1); ritHz = f.Hz*((payloadIn.at(4)=='\x01')?-1:1);
emit haveRitFrequency(ritHz); emit haveRitFrequency(ritHz);
state.set(RITVALUE, ritHz, false);
break; break;
case '\x01': case '\x01':
// RIT on/off // RIT on/off
@ -2356,6 +2360,7 @@ void rigCommander::parseRegister21()
} else { } else {
emit haveRitEnabled(false); emit haveRitEnabled(false);
} }
state.set(RITFUNC, (bool)payloadIn.at(02), false);
break; break;
case '\x02': case '\x02':
// Delta TX setting on/off // Delta TX setting on/off
@ -2505,13 +2510,13 @@ void rigCommander::parseRegister16()
case '\x43': case '\x43':
state.set(TSQLFUNC, payloadIn.at(2) != 0, false); state.set(TSQLFUNC, payloadIn.at(2) != 0, false);
break; break;
case '\44': case '\x44':
state.set(COMPFUNC, payloadIn.at(2) != 0, false); state.set(COMPFUNC, payloadIn.at(2) != 0, false);
break; break;
case '\45': case '\x45':
state.set(MONFUNC, payloadIn.at(2) != 0, false); state.set(MONFUNC, payloadIn.at(2) != 0, false);
break; break;
case '\46': case '\x46':
state.set(VOXFUNC, payloadIn.at(2) != 0, false); state.set(VOXFUNC, payloadIn.at(2) != 0, false);
break; break;
case '\x47': case '\x47':
@ -2529,7 +2534,7 @@ void rigCommander::parseRegister16()
state.set(SBKINFUNC, false, false); state.set(SBKINFUNC, false, false);
} }
break; break;
case '\48': // Manual Notch case '\x48': // Manual Notch
state.set(MNFUNC, payloadIn.at(2) != 0, false); state.set(MNFUNC, payloadIn.at(2) != 0, false);
break; break;
default: default:
@ -4469,6 +4474,27 @@ void rigCommander::stateUpdated()
powerOff(); 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;
case SMETER:
case POWERMETER:
case ALCMETER:
case COMPMETER:
case VOLTAGEMETER:
case CURRENTMETER:
break;
} }
} }
++i; ++i;

Wyświetl plik

@ -144,7 +144,7 @@ void rigCtlClient::socketReadyRead()
continue; continue;
} }
qDebug(logRigCtlD()) << sessionId << "command received" << commands; //qDebug(logRigCtlD()) << sessionId << "command received" << commands;
// We have a full line so process command. // We have a full line so process command.
@ -198,29 +198,42 @@ void rigCtlClient::socketReadyRead()
response.append("1"); // rigctld protocol version response.append("1"); // rigctld protocol version
response.append(QString("%1").arg(rigCaps.rigctlModel)); response.append(QString("%1").arg(rigCaps.rigctlModel));
response.append("0"); // Print something response.append("0"); // Print something
bandType lastBand;
for (bandType band : rigCaps.bands) 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("0 0 0 0 0 0 0");
if (rigCaps.hasTransmit) { if (rigCaps.hasTransmit) {
for (bandType band : rigCaps.bands) 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("0 0 0 0 0 0 0");
response.append("0x1ff 1"); response.append(QString("0x%1 1").arg(getRadioModes(), 0, 16));
response.append("0x1ff 0"); 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("0 0");
response.append("0x1e 2400"); response.append(QString("0x%1 1200").arg(getRadioModes(), 0, 16));
response.append("0x2 500"); response.append(QString("0x%1 2400").arg(getRadioModes(), 0, 16));
response.append("0x1 8000"); response.append(QString("0x%1 3000").arg(getRadioModes(), 0, 16));
response.append("0x1 2400");
response.append("0x20 15000");
response.append("0x20 8000");
response.append("0x40 230000");
response.append("0 0"); response.append("0 0");
response.append("9900"); response.append("9900");
response.append("9900"); response.append("9900");
@ -283,7 +296,7 @@ void rigCtlClient::socketReadyRead()
response.append("0x7fffffff"); response.append("0x7fffffff");
response.append("0x7fffffff"); response.append("0x7fffffff");
*/ */
response.append("done"); //response.append("done");
} }
else if (command[0] == "f" || command[0] == "get_freq") else if (command[0] == "f" || command[0] == "get_freq")
@ -592,11 +605,13 @@ void rigCtlClient::socketReadyRead()
if (longReply) { if (longReply) {
resp.append("RIT: "); resp.append("RIT: ");
} }
resp.append(QString("%1").arg(0)); resp.append(QString("%1").arg(rigState->getInt32(RITVALUE)));
response.append(resp); response.append(resp);
} }
else if (command[0] == "J" || command[0] == "set_rit") else if (command[0] == "J" || command[0] == "set_rit")
{ {
qDebug(logRigCtlD()) << "set_rit:" << command[1];
rigState->set(RITVALUE, command[1].toInt(),true);
setCommand = true; setCommand = true;
} }
else if (command[0] == "y" || command[0] == "get_ant") else if (command[0] == "y" || command[0] == "get_ant")
@ -1074,12 +1089,11 @@ void rigCtlClient::socketReadyRead()
if (str != "") if (str != "")
sendData(QString("%1%2").arg(str).arg(sep)); sendData(QString("%1%2").arg(str).arg(sep));
} }
if (sep != "\n") { if (sep != "\n") {
sendData(QString("\n")); sendData(QString("\n"));
} }
sep = " "; sep = "\n";
num = 0; num = 0;
} }
@ -1100,7 +1114,7 @@ void rigCtlClient::closeSocket()
void rigCtlClient::sendData(QString data) void rigCtlClient::sendData(QString data)
{ {
qDebug(logRigCtlD()) << "Sending:" << data; //qDebug(logRigCtlD()) << "Sending:" << data;
if (socket != Q_NULLPTR && socket->isValid() && socket->isOpen()) if (socket != Q_NULLPTR && socket->isValid() && socket->isOpen())
{ {
socket->write(data.toLatin1()); socket->write(data.toLatin1());
@ -1173,18 +1187,18 @@ QString rigCtlClient::getFilter(unsigned char mode, unsigned char filter) {
QString rigCtlClient::getMode(unsigned char mode, bool datamode) { QString rigCtlClient::getMode(unsigned char mode, bool datamode) {
QString ret; QString ret;
if (datamode) {
ret="PKT";
}
switch (mode) { switch (mode) {
case 0: case 0:
if (datamode) { ret = "PKT"; }
ret.append("LSB"); ret.append("LSB");
break; break;
case 1: case 1:
if (datamode) { ret = "PKT"; }
ret.append("USB"); ret.append("USB");
break; break;
case 2: case 2:
if (datamode) { ret = "PKT"; }
ret.append("AM"); ret.append("AM");
break; break;
case 3: case 3:
@ -1194,6 +1208,7 @@ QString rigCtlClient::getMode(unsigned char mode, bool datamode) {
ret.append("RTTY"); ret.append("RTTY");
break; break;
case 5: case 5:
if (datamode) { ret = "PKT"; }
ret.append("FM"); ret.append("FM");
break; break;
case 6: case 6:
@ -1206,12 +1221,15 @@ QString rigCtlClient::getMode(unsigned char mode, bool datamode) {
ret.append("RTTYR"); ret.append("RTTYR");
break; break;
case 12: case 12:
if (datamode) { ret = "PKT"; }
ret.append("USB"); ret.append("USB");
break; break;
case 17: case 17:
if (datamode) { ret = "PKT"; }
ret.append("LSB"); ret.append("LSB");
break; break;
case 22: case 22:
if (datamode) { ret = "PKT"; }
ret.append("FM"); ret.append("FM");
break; break;
} }
@ -1351,7 +1369,7 @@ QString rigCtlClient::generateFreqRange(bandType band)
QString ret = ""; QString ret = "";
if (lowFreq > 0 && highFreq > 0) { 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; return ret;
} }
@ -1376,13 +1394,18 @@ quint64 rigCtlClient::getRadioModes()
QString curMode = mode.name; QString curMode = mode.name;
if (!strcmp(curMode.toLocal8Bit(), mode_str[i].str)) if (!strcmp(curMode.toLocal8Bit(), mode_str[i].str))
{ {
//qDebug(logRigCtlD()) << "Found mode:" << mode.name << mode_str[i].mode;
modes |= mode_str[i].mode; modes |= mode_str[i].mode;
} }
if (rigCaps.hasDataModes) { if (rigCaps.hasDataModes) {
curMode = "PKT" + mode.name; curMode = "PKT" + mode.name;
if (!strcmp(curMode.toLocal8Bit(), mode_str[i].str)) 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;
}
} }
} }
} }

Wyświetl plik

@ -16,7 +16,7 @@ enum stateTypes { NONE, VFOAFREQ, VFOBFREQ, CURRENTVFO, PTT, MODE, FILTER, DUPLE
PREAMP, AGC, ATTENUATOR, MODINPUT, AFGAIN, RFGAIN, SQUELCH, TXPOWER, MICGAIN, COMPLEVEL, MONITORLEVEL, VOXGAIN, ANTIVOXGAIN, 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, 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, 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 RESUMEFUNC, TBURSTFUNC, TUNERFUNC, LOCKFUNC, SMETER, POWERMETER, SWRMETER, ALCMETER, COMPMETER, VOLTAGEMETER, CURRENTMETER
}; };
@ -47,7 +47,7 @@ public:
_mutex.unlock(); _mutex.unlock();
} }
} }
void set(stateTypes s, quint32 x, bool u) { void set(stateTypes s, qint32 x, bool u) {
if ((quint64)x != map[s]._value) { if ((quint64)x != map[s]._value) {
_mutex.lock(); _mutex.lock();
map[s]._value = (quint64)x; map[s]._value = (quint64)x;
@ -110,9 +110,9 @@ public:
} }
bool getBool(stateTypes s) { return map[s]._value != 0; } bool getBool(stateTypes s) { return map[s]._value != 0; }
quint8 getChar(stateTypes s) { return map[s]._value & 0xff; } quint8 getChar(stateTypes s) { return (quint8)map[s]._value; }
quint16 getInt16(stateTypes s) { return map[s]._value != 0xffff; } quint16 getInt16(stateTypes s) { return (qint16)map[s]._value; }
quint32 getInt32(stateTypes s) { return map[s]._value != 0xffffffff; } qint32 getInt32(stateTypes s) { return (qint32)map[s]._value; }
quint64 getInt64(stateTypes s) { return map[s]._value; } quint64 getInt64(stateTypes s) { return map[s]._value; }
duplexMode getDuplex(stateTypes s) { return(duplexMode)map[s]._value; } duplexMode getDuplex(stateTypes s) { return(duplexMode)map[s]._value; }
rigInput getInput(stateTypes s) { return(rigInput)map[s]._value; } rigInput getInput(stateTypes s) { return(rigInput)map[s]._value; }