diff --git a/commhandler.cpp b/commhandler.cpp index 7a48d87..165c90e 100644 --- a/commhandler.cpp +++ b/commhandler.cpp @@ -45,6 +45,7 @@ commHandler::commHandler(QString portName, quint32 baudRate) baudrate = baudRate; stopbits = 1; this->portName = portName; + this->PTTviaRTS = false; setupComm(); // basic parameters openPort(); @@ -162,6 +163,25 @@ void commHandler::receiveDataIn() } } +void commHandler::setRTS(bool rtsOn) +{ + bool success = port->setRequestToSend(rtsOn); + if(!success) + { + qInfo(logSerial()) << "Error, could not set RTS on port " << portName; + } +} + +bool commHandler::rtsStatus() +{ + return port->isRequestToSend(); +} + +void commHandler::setUseRTSforPTT(bool PTTviaRTS) +{ + this->PTTviaRTS = PTTviaRTS; +} + void commHandler::openPort() { bool success; diff --git a/commhandler.h b/commhandler.h index e7e5580..c76e23f 100644 --- a/commhandler.h +++ b/commhandler.h @@ -18,9 +18,14 @@ public: commHandler(); commHandler(QString portName, quint32 baudRate); bool serialError; + bool rtsStatus(); ~commHandler(); +public slots: + void setUseRTSforPTT(bool useRTS); + void setRTS(bool rtsOn); + private slots: void receiveDataIn(); // from physical port void receiveDataFromUserToRig(const QByteArray &data); @@ -38,6 +43,7 @@ private: void openPort(); void closePort(); + void sendDataOut(const QByteArray &writeData); // out to radio void debugMe(); void hexPrint(); @@ -63,6 +69,8 @@ private: bool havePt; QString ptDevSlave; + bool PTTviaRTS = false; + bool isConnected; // port opened mutable QMutex mutex; void printHex(const QByteArray &pdata, bool printVert, bool printHoriz); diff --git a/rigcommander.cpp b/rigcommander.cpp index c6e72e0..b57e285 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -63,6 +63,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu connect(ptty, SIGNAL(haveDataFromPort(QByteArray)), comm, SLOT(receiveDataFromUserToRig(QByteArray))); // data from the program to the comm port: connect(this, SIGNAL(dataForComm(QByteArray)), comm, SLOT(receiveDataFromUserToRig(QByteArray))); + connect(this, SIGNAL(toggleRTS(bool)), comm, SLOT(setRTS(bool))); // data from the rig to the ptty: connect(comm, SIGNAL(haveDataFromPort(QByteArray)), ptty, SLOT(receiveDataFromRigToPtty(QByteArray))); @@ -992,9 +993,14 @@ void rigCommander::getSatelliteMode() void rigCommander::getPTT() { - QByteArray payload; - payload.setRawData("\x1C\x00", 2); - prepDataAndSend(payload); + if(rigCaps.useRTSforPTT) + { + emit havePTTStatus(comm->rtsStatus()); + } else { + QByteArray payload; + payload.setRawData("\x1C\x00", 2); + prepDataAndSend(payload); + } } void rigCommander::getBandStackReg(char band, char regCode) @@ -1011,9 +1017,14 @@ void rigCommander::setPTT(bool pttOn) if(pttAllowed) { - QByteArray payload("\x1C\x00", 2); - payload.append((char)pttOn); - prepDataAndSend(payload); + if(rigCaps.useRTSforPTT) + { + emit toggleRTS(pttOn); + } else { + QByteArray payload("\x1C\x00", 2); + payload.append((char)pttOn); + prepDataAndSend(payload); + } rigState.ptt = pttOn; } } @@ -2908,6 +2919,7 @@ void rigCommander::determineRigCaps() rigCaps.hasTransmit = true; rigCaps.hasPTTCommand = true; + rigCaps.useRTSforPTT = false; // Common, reasonable defaults for most supported HF rigs: rigCaps.bsr[band160m] = 0x01; @@ -3321,6 +3333,7 @@ void rigCommander::determineRigCaps() rigCaps.hasFDcomms = false; rigCaps.hasATU = true; rigCaps.hasPTTCommand = false; + rigCaps.useRTSforPTT = true; rigCaps.hasDataModes = false; rigCaps.attenuators.push_back('\x20'); rigCaps.bands = standardHF; @@ -3341,6 +3354,7 @@ void rigCommander::determineRigCaps() rigCaps.hasFDcomms = false; rigCaps.hasATU = false; rigCaps.hasPTTCommand = false; + rigCaps.useRTSforPTT = true; rigCaps.hasIFShift = true; rigCaps.hasDataModes = false; rigCaps.attenuators.push_back('\x20'); @@ -3366,6 +3380,7 @@ void rigCommander::determineRigCaps() rigCaps.hasFDcomms = false; rigCaps.hasATU = false; rigCaps.hasPTTCommand = false; + rigCaps.useRTSforPTT = true; rigCaps.hasDataModes = false; rigCaps.hasIFShift = true; // untested rigCaps.attenuators.push_back('\x20'); diff --git a/rigcommander.h b/rigcommander.h index 1abc38f..bf02aad 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -322,6 +322,7 @@ signals: void haveSerialPortError(const QString port, const QString errorText); void haveStatusUpdate(const QString text); void dataForComm(const QByteArray &outData); + void toggleRTS(bool rtsOn); // UDP: void haveChangeLatency(quint16 value); diff --git a/rigidentities.h b/rigidentities.h index a87d9ec..cae1b75 100644 --- a/rigidentities.h +++ b/rigidentities.h @@ -118,6 +118,7 @@ struct rigCapabilities { bool hasTransmit; bool hasPTTCommand; + bool useRTSforPTT; bool hasAttenuator; bool hasPreamp; bool hasAntennaSel;