Added PTT "snooping" to the commHandler, such that radios needing RTS

set for PTT will work. Includes replying to PTT queries with the RTS
status. There is currently no UI to manually select radios that need
RTS.
merge-requests/7/head
Elliott Liggett 2021-11-06 22:49:10 -07:00
rodzic 77509aead6
commit fe3d645711
3 zmienionych plików z 84 dodań i 24 usunięć

Wyświetl plik

@ -20,6 +20,7 @@ commHandler::commHandler()
baudrate = 115200;
stopbits = 1;
portName = "/dev/ttyUSB0";
this->PTTviaRTS = false;
setupComm(); // basic parameters
openPort();
@ -81,6 +82,59 @@ void commHandler::sendDataOut(const QByteArray &writeData)
mutex.lock();
qint64 bytesWritten;
if(PTTviaRTS)
{
// Size: 1 2 3 4 5 6 7 8
//index: 0 1 2 3 4 5 6 7
//Query: FE FE TO FROM 0x1C 0x00 0xFD
//PTT On: FE FE TO FROM 0x1C 0x00 0x01 0xFD
//PTT Off: FE FE TO FROM 0x1C 0x00 0x00 0xFD
if(writeData.endsWith(QByteArrayLiteral("\x1C\x00\xFD")))
{
// Query
qDebug(logSerial()) << "Looks like PTT Query";
bool pttOn = this->rtsStatus();
QByteArray pttreturncmd = QByteArray("\xFE\xFE");
pttreturncmd.append(writeData.at(3));
pttreturncmd.append(writeData.at(2));
pttreturncmd.append(QByteArray("\x1C\x00", 2));
pttreturncmd.append((char)pttOn);
pttreturncmd.append("\xFD");
qDebug(logSerial()) << "Sending fake PTT query result: " << (bool)pttOn;
printHex(pttreturncmd, false, true);
emit haveDataFromPort(pttreturncmd);
mutex.unlock();
return;
} else if(writeData.endsWith(QByteArrayLiteral("\x1C\x00\x01\xFD")))
{
// PTT ON
qDebug(logSerial()) << "Looks like PTT ON";
setRTS(true);
mutex.unlock();
return;
} else if(writeData.endsWith(QByteArrayLiteral("\x1C\x00\x00\xFD")))
{
// PTT OFF
qDebug(logSerial()) << "Looks like PTT OFF";
setRTS(false);
mutex.unlock();
return;
} else if (writeData.length() > 6)
{
if(writeData.at(4) == 0x1c )
{
qDebug(logSerial()) << "Potential 0x1C PTT command did not match. Has length " << writeData.length() << " and contains:";
printHex(writeData, false, true);
}
}
}
bytesWritten = port->write(writeData);
if(bytesWritten != (qint64)writeData.size())

Wyświetl plik

@ -993,14 +993,14 @@ void rigCommander::getSatelliteMode()
void rigCommander::getPTT()
{
if(rigCaps.useRTSforPTT)
{
emit havePTTStatus(comm->rtsStatus());
} else {
//if(rigCaps.useRTSforPTT && !usingNativeLAN)
//{
// emit havePTTStatus(comm->rtsStatus());
//} else {
QByteArray payload;
payload.setRawData("\x1C\x00", 2);
prepDataAndSend(payload);
}
//}
}
void rigCommander::getBandStackReg(char band, char regCode)
@ -1017,14 +1017,9 @@ void rigCommander::setPTT(bool pttOn)
if(pttAllowed)
{
if(rigCaps.useRTSforPTT)
{
emit toggleRTS(pttOn);
} else {
QByteArray payload("\x1C\x00", 2);
payload.append((char)pttOn);
prepDataAndSend(payload);
}
QByteArray payload("\x1C\x00", 2);
payload.append((char)pttOn);
prepDataAndSend(payload);
rigState.ptt = pttOn;
}
}
@ -2340,6 +2335,8 @@ void rigCommander::parseRegister21()
longfreq = payloadIn.mid(2,2);
longfreq.append(QByteArray(3,'\x00'));
f = parseFrequency(longfreq, 3);
if(payloadIn.length() < 5)
break;
ritHz = f.Hz*((payloadIn.at(4)=='\x01')?-1:1);
emit haveRitFrequency(ritHz);
break;
@ -3508,6 +3505,10 @@ void rigCommander::determineRigCaps()
}
haveRigCaps = true;
if(!usingNativeLAN)
comm->setUseRTSforPTT(rigCaps.useRTSforPTT);
if(lookingForRig)
{
lookingForRig = false;

Wyświetl plik

@ -2614,10 +2614,12 @@ void wfmain::doCmd(cmds cmd)
emit getSpectrumRefLevel();
break;
case cmdGetATUStatus:
emit getATUStatus();
if(rigCaps.hasATU)
emit getATUStatus();
break;
case cmdStartATU:
emit startATU();
if(rigCaps.hasATU)
emit startATU();
break;
case cmdGetAttenuator:
emit getAttenuator();
@ -2635,10 +2637,7 @@ void wfmain::doCmd(cmds cmd)
emit setScopeMode(spectModeFixed);
break;
case cmdGetPTT:
if(rigCaps.hasPTTCommand)
{
emit getPTT();
}
emit getPTT();
break;
case cmdGetTxRxMeter:
if(amTransmitting)
@ -3094,12 +3093,16 @@ void wfmain::initPeriodicCommands()
insertSlowPeriodicCommand(cmdGetFreq, 128);
insertSlowPeriodicCommand(cmdGetMode, 128);
insertSlowPeriodicCommand(cmdGetPTT, 128);
if(rigCaps.hasTransmit)
insertSlowPeriodicCommand(cmdGetPTT, 128);
insertSlowPeriodicCommand(cmdGetTxPower, 128);
insertSlowPeriodicCommand(cmdGetRxGain, 128);
insertSlowPeriodicCommand(cmdGetAttenuator, 128);
insertSlowPeriodicCommand(cmdGetPTT, 128);
insertSlowPeriodicCommand(cmdGetPreamp, 128);
if(rigCaps.hasAttenuator)
insertSlowPeriodicCommand(cmdGetAttenuator, 128);
if(rigCaps.hasTransmit)
insertSlowPeriodicCommand(cmdGetPTT, 128);
if(rigCaps.hasPreamp)
insertSlowPeriodicCommand(cmdGetPreamp, 128);
if (rigCaps.hasRXAntenna) {
insertSlowPeriodicCommand(cmdGetAntenna, 128);
}
@ -5437,7 +5440,9 @@ void wfmain::on_moreControlsBtn_clicked()
void wfmain::on_debugBtn_clicked()
{
qInfo(logSystem()) << "Debug button pressed.";
trxadj->show();
// issueDelayedCommand(cmdGetRigID);
emit getRigCIV();
//trxadj->show();
//setRadioTimeDatePrep();
//wf->setInteraction(QCP::iRangeZoom, true);
//wf->setInteraction(QCP::iRangeDrag, true);