kopia lustrzana https://gitlab.com/eliggett/wfview
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
rodzic
77509aead6
commit
fe3d645711
|
@ -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())
|
||||
|
|
|
@ -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;
|
||||
|
|
27
wfmain.cpp
27
wfmain.cpp
|
@ -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);
|
||||
|
|
Ładowanie…
Reference in New Issue