From 84261a49cc76675e5de178a1e030c1803d7ba143 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Sat, 7 Aug 2021 13:34:47 +0100 Subject: [PATCH] Add split/duplex support --- rigcommander.cpp | 7 ++-- rigcommander.h | 6 ++-- rigctld.cpp | 88 ++++++++++++++++++++++++++++++++++++++++-------- rigctld.h | 3 ++ wfmain.cpp | 2 ++ 5 files changed, 88 insertions(+), 18 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index 86e8030..30de59b 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -26,7 +26,7 @@ rigCommander::rigCommander() rigState.mode = 0; rigState.ptt = 0; rigState.currentVfo = 0; - rigState.splitEnabled = 0; + rigState.duplex = dmSplitOff; } rigCommander::~rigCommander() @@ -1220,6 +1220,7 @@ void rigCommander::parseCommand() break; case '\x0F': emit haveDuplexMode((duplexMode)(unsigned char)payloadIn[1]); + rigState.duplex = (duplexMode)(unsigned char)payloadIn[1]; break; case '\x11': emit haveAttenuator((unsigned char)payloadIn.at(1)); @@ -1227,6 +1228,8 @@ void rigCommander::parseCommand() break; case '\x12': emit haveAntenna((unsigned char)payloadIn.at(1), (bool)payloadIn.at(2)); + rigState.antenna = (unsigned char)payloadIn.at(1); + rigState.rxAntenna = (bool)payloadIn.at(2); break; case '\x14': // read levels @@ -2291,7 +2294,7 @@ void rigCommander::parsePTT() // PTT on emit havePTTStatus(true); } - rigState.ptt = (unsigned char)payloadIn[2]; + rigState.ptt = (bool)payloadIn[2]; } diff --git a/rigcommander.h b/rigcommander.h index 7259777..1539aa3 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -63,11 +63,13 @@ struct rigStateStruct { freqt vfoAFreq; freqt vfoBFreq; unsigned char currentVfo; - unsigned char ptt; + bool ptt; unsigned char mode; unsigned char filter; - unsigned char splitEnabled; + duplexMode duplex; bool datamode; + unsigned char antenna; + bool rxAntenna; // Tones quint16 ctcss; quint16 tsql; diff --git a/rigctld.cpp b/rigctld.cpp index d9cd891..29b7f64 100644 --- a/rigctld.cpp +++ b/rigctld.cpp @@ -205,6 +205,14 @@ void rigCtlClient::socketReadyRead() } response.append(attens); + response.append("0xffffffffffffffff"); + response.append("0xffffffffffffffff"); + response.append("0xfffffffff7ffffff"); + response.append("0xfffffff083ffffff"); + response.append("0xffffffffffffffff"); + response.append("0xffffffffffffffbf"); + + /* response.append("0x3effffff"); response.append("0x3effffff"); response.append("0x7fffffff"); @@ -212,7 +220,7 @@ void rigCtlClient::socketReadyRead() response.append("0x7fffffff"); response.append("0x7fffffff"); response.append("done"); - + */ } else if (command[0] == "f" || command[0] == "get_freq") @@ -339,10 +347,10 @@ void rigCtlClient::socketReadyRead() else if (command[0] == "s" || command[0] == "get_split_vfo") { if (longReply) { - response.append(QString("Split: %1").arg(rigState->splitEnabled)); + response.append(QString("Split: %1").arg(rigState->duplex)); } else { - response.append(QString("%1").arg(rigState->splitEnabled)); + response.append(QString("%1").arg(rigState->duplex)); } QString resp; @@ -364,10 +372,12 @@ void rigCtlClient::socketReadyRead() setCommand = true; if (command[1] == "1") { - emit parent->setSplit(1); + emit parent->setDuplexMode(dmSplitOn); + rigState->duplex = dmSplitOn; } else { - emit parent->setSplit(0); + emit parent->setDuplexMode(dmSplitOff); + rigState->duplex = dmSplitOff; } } else if (command[0] == "\xf3" || command[0] == "get_vfo_info") @@ -383,7 +393,7 @@ void rigCtlClient::socketReadyRead() } response.append(QString("Mode: %1").arg(getMode(rigState->mode, rigState->datamode))); response.append(QString("Width: %1").arg(getFilter(rigState->mode, rigState->filter))); - response.append(QString("Split: %1").arg(rigState->splitEnabled)); + response.append(QString("Split: %1").arg(rigState->duplex)); response.append(QString("SatMode: %1").arg(0)); // Need to get satmode } else { @@ -483,18 +493,42 @@ void rigCtlClient::socketReadyRead() { setCommand = true; } + else if (command[0] == "y" || command[0] == "get_ant") + { + qInfo(logRigCtlD()) << "get_ant:"; + + if (command.length() > 1) { + if (longReply) { + response.append(QString("AntCurr: %1").arg(getAntName((unsigned char)command[1].toInt()))); + response.append(QString("Option: %1").arg(0)); + response.append(QString("AntTx: %1").arg(getAntName(rigState->antenna))); + response.append(QString("AntRx: %1").arg(getAntName(rigState->antenna))); + } + else { + response.append(QString("%1").arg(getAntName((unsigned char)command[1].toInt()))); + response.append(QString("%1").arg(0)); + response.append(QString("%1").arg(getAntName(rigState->antenna))); + response.append(QString("%1").arg(getAntName(rigState->antenna))); + } + } + } + else if (command[0] == "Y" || command[0] == "set_ant") + { + qInfo(logRigCtlD()) << "set_ant:"; + setCommand = true; + } else if (command[0] == "z" || command[0] == "get_xit") { - QString resp; - if (longReply) { - resp.append("XIT: "); - } - resp.append(QString("%1").arg(0)); - response.append(resp); + QString resp; + if (longReply) { + resp.append("XIT: "); + } + resp.append(QString("%1").arg(0)); + response.append(resp); } else if (command[0] == "Z" || command[0] == "set_xit") { - setCommand = true; + setCommand = true; } else if (command.length() > 1 && (command[0] == "l" || command[0] == "get_level")) { @@ -956,11 +990,20 @@ 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(0xf,0,16); + 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); } return ret; } +unsigned char rigCtlClient::getAntennas() +{ + unsigned char ant=0; + for (unsigned char i : rigCaps.antennas) + { + ant |= 1<