diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index a59c37b8bb21bf2a355bd345c7ee64c56436c60c..2248f5bb96a151378bf7a472a219d22ce127be98 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -127,7 +127,7 @@ INCLUDEPATH += . \ thirdParty/qserialport/src # Include serial port library -include(src/lib/qextserialport/qextserialport.pri) +#include(src/lib/qextserialport/qextserialport.pri) # include qserial library include(thirdParty/qserialport/qgroundcontrol-qserialport.pri) @@ -207,7 +207,6 @@ HEADERS += src/MG.h \ src/comm/LinkManager.h \ src/comm/LinkInterface.h \ src/comm/SerialLinkInterface.h \ - src/comm/SerialInterface.h \ src/comm/SerialLink.h \ src/comm/SerialSimulationLink.h \ src/comm/ProtocolInterface.h \ diff --git a/src/comm/SerialInterface.h b/src/comm/SerialInterface.h index 630f93f0401663352abc5b85f1745b7b581cb016..9e334d27c22960ca78ad587cce4584acb3da2ead 100644 --- a/src/comm/SerialInterface.h +++ b/src/comm/SerialInterface.h @@ -33,7 +33,6 @@ This file is part of the QGROUNDCONTROL project #define SERIALINTERFACE_H #include -#include "qextserialport.h" #include #include @@ -138,67 +137,6 @@ public: virtual void setFlow(flowType flow) = 0; }; -class SerialQextserial : public SerialInterface -{ - Q_OBJECT -private: - QextSerialPort * _port; -signals: - void aboutToClose(); -public: - SerialQextserial(QString porthandle, QextSerialPort::QueryMode mode) : _port(NULL) { - _port = new QextSerialPort(porthandle, QextSerialPort::Polling); - QObject::connect(_port,SIGNAL(aboutToClose()),this,SIGNAL(aboutToClose())); - } - ~SerialQextserial() { - delete _port; - _port = NULL; - } - virtual bool isOpen() { - return _port->isOpen(); - } - virtual bool isWritable() { - return _port->isWritable(); - } - virtual qint64 bytesAvailable() { - return _port->bytesAvailable(); - } - virtual int write(const char * data, qint64 size) { - return _port->write(data,size); - } - virtual void read(char * data, qint64 numBytes) { - _port->read(data,numBytes); - } - virtual void flush() { - _port->flush(); - } - virtual void close() { - _port->close(); - } - virtual void open(QIODevice::OpenModeFlag flag) { - _port->open(flag); - } - virtual void setBaudRate(SerialInterface::baudRateType baudrate) { - _port->setBaudRate((BaudRateType)baudrate); - } - virtual void setParity(SerialInterface::parityType parity) { - _port->setParity((ParityType)parity); - } - virtual void setStopBits(SerialInterface::stopBitsType stopBits) { - _port->setStopBits((StopBitsType)stopBits); - } - virtual void setDataBits(SerialInterface::dataBitsType dataBits) { - _port->setDataBits((DataBitsType)dataBits); - } - virtual void setTimeout(qint64 timeout) { - _port->setTimeout(timeout); - } - virtual void setFlow(SerialInterface::flowType flow) { - // TODO implement - _port->setFlowControl((FlowType)flow); - } -}; - using namespace TNX; class SerialQserial : public SerialInterface diff --git a/src/comm/SerialLink.cc b/src/comm/SerialLink.cc index 9efe0f309b19ac0ff66fe809053dc993f7885d95..21e91563d1afd2d408a78e65dddcc014c7d06ebf 100644 --- a/src/comm/SerialLink.cc +++ b/src/comm/SerialLink.cc @@ -21,10 +21,12 @@ #include "windows.h" #endif +using namespace TNX; + //#define USE_QEXTSERIAL // this allows us to revert to old serial library during transition -SerialLink::SerialLink(QString portname, SerialInterface::baudRateType baudrate, SerialInterface::flowType flow, SerialInterface::parityType parity, - SerialInterface::dataBitsType dataBits, SerialInterface::stopBitsType stopBits) : +SerialLink::SerialLink(QString portname, int baudRate, bool hardwareFlowControl, bool parity, + int dataBits, int stopBits) : port(NULL) { // Setup settings @@ -40,12 +42,25 @@ SerialLink::SerialLink(QString portname, SerialInterface::baudRateType baudrate, // Set unique ID and add link to the list of links this->id = getNextLinkId(); - this->baudrate = baudrate; - this->flow = flow; - this->parity = parity; - this->dataBits = dataBits; - this->stopBits = stopBits; - this->timeout = 1; ///< The timeout controls how long the program flow should wait for new serial bytes. As we're polling, we don't want to wait at all. + setBaudRate(baudRate); + if (hardwareFlowControl) + { + portSettings.setFlowControl(QPortSettings::FLOW_HARDWARE); + } + else + { + portSettings.setFlowControl(QPortSettings::FLOW_OFF); + } + if (parity) + { + portSettings.setParity(QPortSettings::PAR_EVEN); + } + else + { + portSettings.setParity(QPortSettings::PAR_NONE); + } + setDataBits(dataBits); + setStopBits(stopBits); // Set the port name if (porthandle == "") @@ -224,7 +239,8 @@ bool SerialLink::disconnect() /* Block the thread until it returns from run() */ //#endif // dataMutex.lock(); - port->flush(); + port->flushInBuffer(); + port->flushOutBuffer(); port->close(); delete port; port = NULL; @@ -237,7 +253,7 @@ bool SerialLink::disconnect() emit disconnected(); emit connected(false); - return ! closed; + return closed; } else { // No port, so we're disconnected return true; @@ -252,12 +268,8 @@ bool SerialLink::disconnect() **/ bool SerialLink::connect() { - if (!isConnected()) { - qDebug() << "CONNECTING LINK: " << __FILE__ << __LINE__ << "with settings" << porthandle << baudrate << dataBits << parity << stopBits; - if (!this->isRunning()) { - this->start(LowPriority); - } - } + if (this->isRunning()) this->disconnect(); + this->start(LowPriority); return true; } @@ -275,27 +287,22 @@ bool SerialLink::hardwareConnect() port->close(); delete port; } -#ifdef USE_QEXTSERIAL - port = new SerialQextserial(porthandle, QextSerialPort::Polling); -#else - port = new SerialQserial(porthandle, QIODevice::ReadWrite); -#endif - QObject::connect(port, SIGNAL(aboutToClose()), this, SIGNAL(disconnected())); - port->open(QIODevice::ReadWrite); - port->setBaudRate(this->baudrate); - port->setParity(this->parity); - port->setStopBits(this->stopBits); - port->setDataBits(this->dataBits); - port->setTimeout(timeout); // Timeout of 0 ms, we don't want to wait for data, we just poll again next time - + port = new QSerialPort(porthandle, portSettings); + QObject::connect(port,SIGNAL(aboutToClose()),this,SIGNAL(disconnected())); + port->setCommTimeouts(QSerialPort::CtScheme_NonBlockingRead); connectionStartTime = MG::TIME::getGroundTimeNow(); + port->open(); + bool connectionUp = isConnected(); if(connectionUp) { emit connected(); emit connected(true); } + qDebug() << "CONNECTING LINK: " << __FILE__ << __LINE__ << "with settings" << port->portName() << getBaudRate() << getDataBits() << getParityType() << getStopBits(); + + writeSettings(); return connectionUp; @@ -336,80 +343,93 @@ void SerialLink::setName(QString name) qint64 SerialLink::getNominalDataRate() { qint64 dataRate = 0; - switch (baudrate) { - case SerialInterface::BAUD50: + switch (portSettings.baudRate()) { + case QPortSettings::BAUDR_50: dataRate = 50; break; - case SerialInterface::BAUD75: + case QPortSettings::BAUDR_75: dataRate = 75; break; - case SerialInterface::BAUD110: + case QPortSettings::BAUDR_110: dataRate = 110; break; - case SerialInterface::BAUD134: + case QPortSettings::BAUDR_134: dataRate = 134; break; - case SerialInterface::BAUD150: + case QPortSettings::BAUDR_150: dataRate = 150; break; - case SerialInterface::BAUD200: + case QPortSettings::BAUDR_200: dataRate = 200; break; - case SerialInterface::BAUD300: + case QPortSettings::BAUDR_300: dataRate = 300; break; - case SerialInterface::BAUD600: + case QPortSettings::BAUDR_600: dataRate = 600; break; - case SerialInterface::BAUD1200: + case QPortSettings::BAUDR_1200: dataRate = 1200; break; - case SerialInterface::BAUD1800: + case QPortSettings::BAUDR_1800: dataRate = 1800; break; - case SerialInterface::BAUD2400: + case QPortSettings::BAUDR_2400: dataRate = 2400; break; - case SerialInterface::BAUD4800: + case QPortSettings::BAUDR_4800: dataRate = 4800; break; - case SerialInterface::BAUD9600: + case QPortSettings::BAUDR_9600: dataRate = 9600; break; - case SerialInterface::BAUD14400: +#ifdef Q_OS_WIN + case QPortSettings::BAUDR_14400: dataRate = 14400; break; - case SerialInterface::BAUD19200: +#endif + case QPortSettings::BAUDR_19200: dataRate = 19200; break; - case SerialInterface::BAUD38400: + case QPortSettings::BAUDR_38400: dataRate = 38400; break; - case SerialInterface::BAUD56000: +#ifdef Q_OS_WIN + case QPortSettings::BAUDR_56000: dataRate = 56000; break; - case SerialInterface::BAUD57600: +#endif + case QPortSettings::BAUDR_57600: dataRate = 57600; break; - case SerialInterface::BAUD76800: +#ifdef Q_OS_WIN + case QPortSettings::BAUDR_76800: dataRate = 76800; break; - case SerialInterface::BAUD115200: +#endif + case QPortSettings::BAUDR_115200: dataRate = 115200; break; - case SerialInterface::BAUD128000: +#ifdef Q_OS_WIN + // Windows-specific high-end baudrates + case QPortSettings::BAUDR_128000: dataRate = 128000; break; - case SerialInterface::BAUD256000: + case QPortSettings::BAUDR_256000: dataRate = 256000; - // Windows-specific high-end baudrates - case SerialInterface::BAUD230400: + case QPortSettings::BAUDR_230400: dataRate = 230400; - case SerialInterface::BAUD460800: + case QPortSettings::BAUDR_460800: dataRate = 460800; - case SerialInterface::BAUD921600: +#endif + // All-OS high-speed + case QPortSettings::BAUDR_921600: dataRate = 921600; break; + case QPortSettings::BAUDR_UNKNOWN: + default: + // Do nothing + break; } return dataRate; } @@ -482,47 +502,47 @@ int SerialLink::getBaudRate() int SerialLink::getBaudRateType() { - return baudrate; + return portSettings.baudRate(); } int SerialLink::getFlowType() { - return flow; + return portSettings.flowControl(); } int SerialLink::getParityType() { - return parity; + return portSettings.parity(); } int SerialLink::getDataBitsType() { - return dataBits; + return portSettings.dataBits(); } int SerialLink::getStopBitsType() { - return stopBits; + return portSettings.stopBits(); } int SerialLink::getDataBits() { - int ret; - switch (dataBits) { - case SerialInterface::DATA_5: + int ret = -1; + switch (portSettings.dataBits()) { + case QPortSettings::DB_5: ret = 5; break; - case SerialInterface::DATA_6: + case QPortSettings::DB_6: ret = 6; break; - case SerialInterface::DATA_7: + case QPortSettings::DB_7: ret = 7; break; - case SerialInterface::DATA_8: + case QPortSettings::DB_8: ret = 8; break; default: - ret = 0; + ret = -1; break; } return ret; @@ -530,18 +550,18 @@ int SerialLink::getDataBits() int SerialLink::getStopBits() { - int ret; - switch (stopBits) { - case SerialInterface::STOP_1: - ret = 1; - break; - case SerialInterface::STOP_2: - ret = 2; - break; - default: - ret = 0; - break; - } + int ret = -1; + switch (portSettings.stopBits()) { + case QPortSettings::STOP_1: + ret = 1; + break; + case QPortSettings::STOP_2: + ret = 2; + break; + default: + ret = -1; + break; + } return ret; } @@ -578,96 +598,27 @@ bool SerialLink::setBaudRateType(int rateIndex) if(isConnected()) reconnect = true; disconnect(); - switch (rateIndex) { - case 0: - baudrate = SerialInterface::BAUD50; - break; - case 1: - baudrate = SerialInterface::BAUD75; - break; - case 2: - baudrate = SerialInterface::BAUD110; - break; - case 3: - baudrate = SerialInterface::BAUD134; - break; - case 4: - baudrate = SerialInterface::BAUD150; - break; - case 5: - baudrate = SerialInterface::BAUD200; - break; - case 6: - baudrate = SerialInterface::BAUD300; - break; - case 7: - baudrate = SerialInterface::BAUD600; - break; - case 8: - baudrate = SerialInterface::BAUD1200; - break; - case 9: - baudrate = SerialInterface::BAUD1800; - break; - case 10: - baudrate = SerialInterface::BAUD2400; - break; - case 11: - baudrate = SerialInterface::BAUD4800; - break; - case 12: - baudrate = SerialInterface::BAUD9600; - break; - case 13: - baudrate = SerialInterface::BAUD14400; - break; - case 14: - baudrate = SerialInterface::BAUD19200; - break; - case 15: - baudrate = SerialInterface::BAUD38400; - break; - case 16: - baudrate = SerialInterface::BAUD56000; - break; - case 17: - baudrate = SerialInterface::BAUD57600; - break; - case 18: - baudrate = SerialInterface::BAUD76800; - break; - case 19: - baudrate = SerialInterface::BAUD115200; - break; - case 20: - baudrate = SerialInterface::BAUD128000; - break; - case 21: - baudrate = SerialInterface::BAUD230400; - break; - case 22: - baudrate = SerialInterface::BAUD256000; - break; - case 23: - baudrate = SerialInterface::BAUD460800; - break; - case 24: - baudrate = SerialInterface::BAUD921600; - break; - default: - // If none of the above cases matches, there must be an error - accepted = false; - break; + if (rateIndex >= (int)QPortSettings::BAUDR_50 && rateIndex <= (int)QPortSettings::BAUDR_921600) + { + portSettings.setBaudRate((QPortSettings::BaudRate)rateIndex); } if(reconnect) connect(); return accepted; } - +bool SerialLink::setBaudRateString(const QString& rate) +{ + bool ok; + int intrate = rate.toInt(&ok); + if (!ok) return false; + return setBaudRate(intrate); +} bool SerialLink::setBaudRate(int rate) { + qDebug() << "BAUD RATE:" << rate; + bool reconnect = false; bool accepted = true; // This is changed if none of the data rates matches if(isConnected()) { @@ -677,79 +628,87 @@ bool SerialLink::setBaudRate(int rate) switch (rate) { case 50: - baudrate = SerialInterface::BAUD50; + portSettings.setBaudRate(QPortSettings::BAUDR_50); break; case 75: - baudrate = SerialInterface::BAUD75; + portSettings.setBaudRate(QPortSettings::BAUDR_75); break; case 110: - baudrate = SerialInterface::BAUD110; + portSettings.setBaudRate(QPortSettings::BAUDR_110); break; case 134: - baudrate = SerialInterface::BAUD134; + portSettings.setBaudRate(QPortSettings::BAUDR_134); break; case 150: - baudrate = SerialInterface::BAUD150; + portSettings.setBaudRate(QPortSettings::BAUDR_150); break; case 200: - baudrate = SerialInterface::BAUD200; + portSettings.setBaudRate(QPortSettings::BAUDR_200); break; case 300: - baudrate = SerialInterface::BAUD300; + portSettings.setBaudRate(QPortSettings::BAUDR_300); break; case 600: - baudrate = SerialInterface::BAUD600; + portSettings.setBaudRate(QPortSettings::BAUDR_600); break; case 1200: - baudrate = SerialInterface::BAUD1200; + portSettings.setBaudRate(QPortSettings::BAUDR_1200); break; case 1800: - baudrate = SerialInterface::BAUD1800; + portSettings.setBaudRate(QPortSettings::BAUDR_1800); break; case 2400: - baudrate = SerialInterface::BAUD2400; + portSettings.setBaudRate(QPortSettings::BAUDR_2400); break; case 4800: - baudrate = SerialInterface::BAUD4800; + portSettings.setBaudRate(QPortSettings::BAUDR_4800); break; case 9600: - baudrate = SerialInterface::BAUD9600; + portSettings.setBaudRate(QPortSettings::BAUDR_9600); break; +#ifdef Q_OS_WIN case 14400: - baudrate = SerialInterface::BAUD14400; + portSettings.setBaudRate(QPortSettings::BAUDR_14400); break; +#endif case 19200: - baudrate = SerialInterface::BAUD19200; + portSettings.setBaudRate(QPortSettings::BAUDR_19200); break; case 38400: - baudrate = SerialInterface::BAUD38400; + portSettings.setBaudRate(QPortSettings::BAUDR_38400); break; +#ifdef Q_OS_WIN case 56000: - baudrate = SerialInterface::BAUD56000; + portSettings.setBaudRate(QPortSettings::BAUDR_56000); break; +#endif case 57600: - baudrate = SerialInterface::BAUD57600; + portSettings.setBaudRate(QPortSettings::BAUDR_57600); break; +#ifdef Q_OS_WIN case 76800: - baudrate = SerialInterface::BAUD76800; + portSettings.setBaudRate(QPortSettings::BAUDR_76800); break; +#endif case 115200: - baudrate = SerialInterface::BAUD115200; + portSettings.setBaudRate(QPortSettings::BAUDR_115200); break; +#ifdef Q_OS_WIN case 128000: - baudrate = SerialInterface::BAUD128000; + portSettings.setBaudRate(QPortSettings::BAUDR_128000); break; case 230400: - baudrate = SerialInterface::BAUD230400; + portSettings.setBaudRate(QPortSettings::BAUDR_230400); break; case 256000: - baudrate = SerialInterface::BAUD256000; + portSettings.setBaudRate(QPortSettings::BAUDR_256000); break; case 460800: - baudrate = SerialInterface::BAUD460800; + portSettings.setBaudRate(QPortSettings::BAUDR_460800); break; +#endif case 921600: - baudrate = SerialInterface::BAUD921600; + portSettings.setBaudRate(QPortSettings::BAUDR_921600); break; default: // If none of the above cases matches, there must be an error @@ -770,14 +729,14 @@ bool SerialLink::setFlowType(int flow) disconnect(); switch (flow) { - case SerialInterface::FLOW_OFF: - this->flow = SerialInterface::FLOW_OFF; + case (int)QPortSettings::FLOW_OFF: + portSettings.setFlowControl(QPortSettings::FLOW_OFF); break; - case SerialInterface::FLOW_HARDWARE: - this->flow = SerialInterface::FLOW_HARDWARE; + case (int)QPortSettings::FLOW_HARDWARE: + portSettings.setFlowControl(QPortSettings::FLOW_HARDWARE); break; - case SerialInterface::FLOW_XONXOFF: - this->flow = SerialInterface::FLOW_XONXOFF; + case (int)QPortSettings::FLOW_XONXOFF: + portSettings.setFlowControl(QPortSettings::FLOW_XONXOFF); break; default: // If none of the above cases matches, there must be an error @@ -797,20 +756,17 @@ bool SerialLink::setParityType(int parity) disconnect(); switch (parity) { - case (int)PAR_NONE: - this->parity = SerialInterface::PAR_NONE; + case (int)QPortSettings::PAR_NONE: + portSettings.setParity(QPortSettings::PAR_NONE); break; - case (int)PAR_ODD: - this->parity = SerialInterface::PAR_ODD; + case (int)QPortSettings::PAR_ODD: + portSettings.setParity(QPortSettings::PAR_ODD); break; - case (int)PAR_EVEN: - this->parity = SerialInterface::PAR_EVEN; + case (int)QPortSettings::PAR_EVEN: + portSettings.setParity(QPortSettings::PAR_EVEN); break; - case (int)PAR_MARK: - this->parity = SerialInterface::PAR_MARK; - break; - case (int)PAR_SPACE: - this->parity = SerialInterface::PAR_SPACE; + case (int)QPortSettings::PAR_SPACE: + portSettings.setParity(QPortSettings::PAR_SPACE); break; default: // If none of the above cases matches, there must be an error @@ -825,6 +781,7 @@ bool SerialLink::setParityType(int parity) bool SerialLink::setDataBits(int dataBits) { + qDebug() << "Setting" << dataBits << "data bits"; bool reconnect = false; if (isConnected()) reconnect = true; bool accepted = true; @@ -832,16 +789,16 @@ bool SerialLink::setDataBits(int dataBits) switch (dataBits) { case 5: - this->dataBits = SerialInterface::DATA_5; + portSettings.setDataBits(QPortSettings::DB_5); break; case 6: - this->dataBits = SerialInterface::DATA_6; + portSettings.setDataBits(QPortSettings::DB_6); break; case 7: - this->dataBits = SerialInterface::DATA_7; + portSettings.setDataBits(QPortSettings::DB_7); break; case 8: - this->dataBits = SerialInterface::DATA_8; + portSettings.setDataBits(QPortSettings::DB_8); break; default: // If none of the above cases matches, there must be an error @@ -863,10 +820,10 @@ bool SerialLink::setStopBits(int stopBits) switch (stopBits) { case 1: - this->stopBits = SerialInterface::STOP_1; + portSettings.setStopBits(QPortSettings::STOP_1); break; case 2: - this->stopBits = SerialInterface::STOP_2; + portSettings.setStopBits(QPortSettings::STOP_2); break; default: // If none of the above cases matches, there must be an error @@ -886,8 +843,8 @@ bool SerialLink::setDataBitsType(int dataBits) if (isConnected()) reconnect = true; disconnect(); - if (dataBits >= (int)SerialInterface::DATA_5 && dataBits <= (int)SerialInterface::DATA_8) { - this->dataBits = (SerialInterface::dataBitsType) dataBits; + if (dataBits >= (int)QPortSettings::DB_5 && dataBits <= (int)QPortSettings::DB_8) { + portSettings.setDataBits((QPortSettings::DataBits) dataBits); if(reconnect) connect(); accepted = true; @@ -903,10 +860,10 @@ bool SerialLink::setStopBitsType(int stopBits) if(isConnected()) reconnect = true; disconnect(); - if (stopBits >= (int)SerialInterface::STOP_1 && dataBits <= (int)SerialInterface::STOP_2) { - SerialInterface::stopBitsType newBits = (SerialInterface::stopBitsType) stopBits; + if (stopBits >= (int)QPortSettings::STOP_1 && stopBits <= (int)QPortSettings::STOP_2) { + portSettings.setStopBits((QPortSettings::StopBits) stopBits); - port->setStopBits(newBits); + if(reconnect) connect(); accepted = true; } diff --git a/src/comm/SerialLink.h b/src/comm/SerialLink.h index 2a93244f4be55652d815dbd54b7b5d1de98db6c4..29c5a4b565e9c85dd5e72927a3c8392884982669 100644 --- a/src/comm/SerialLink.h +++ b/src/comm/SerialLink.h @@ -36,7 +36,7 @@ This file is part of the QGROUNDCONTROL project #include #include #include -#include "SerialInterface.h" +#include "qserialport.h" #include #include "SerialLinkInterface.h" #ifdef _WIN32 @@ -59,11 +59,11 @@ class SerialLink : public SerialLinkInterface public: SerialLink(QString portname = "", - SerialInterface::baudRateType baudrate=SerialInterface::BAUD57600, - SerialInterface::flowType flow=SerialInterface::FLOW_OFF, - SerialInterface::parityType parity=SerialInterface::PAR_NONE, - SerialInterface::dataBitsType dataBits=SerialInterface::DATA_8, - SerialInterface::stopBitsType stopBits=SerialInterface::STOP_1); + int baudrate=57600, + bool flow=false, + bool parity=false, + int dataBits=8, + int stopBits=1); ~SerialLink(); static const int poll_interval = SERIAL_POLL_INTERVAL; ///< Polling interval, defined in configuration.h @@ -116,6 +116,9 @@ public slots: bool setDataBits(int dataBits); bool setStopBits(int stopBits); + // Set string rate + bool setBaudRateString(const QString& rate); + // Set ENUM values bool setBaudRateType(int rateIndex); bool setFlowType(int flow); @@ -138,18 +141,14 @@ protected slots: void checkForBytes(); protected: - SerialInterface * port; + TNX::QSerialPort * port; + TNX::QPortSettings portSettings; #ifdef _WIN32 HANDLE winPort; DCB winPortSettings; #endif QString porthandle; QString name; - SerialInterface::baudRateType baudrate; - SerialInterface::flowType flow; - SerialInterface::parityType parity; - SerialInterface::dataBitsType dataBits; - SerialInterface::stopBitsType stopBits; int timeout; int id; diff --git a/src/ui/SerialConfigurationWindow.cc b/src/ui/SerialConfigurationWindow.cc index 23951c2b0857c24596a6d2fd8fc5abbc4578a0d9..6307fb041b1d4cb8fcc16ed162bbab4be581a839 100644 --- a/src/ui/SerialConfigurationWindow.cc +++ b/src/ui/SerialConfigurationWindow.cc @@ -243,6 +243,44 @@ SerialConfigurationWindow::SerialConfigurationWindow(LinkInterface* link, QWidge setupPortList(); + // Set up baud rates + ui.baudRate->addItem("115200", 115200); + + ui.baudRate->clear(); + ui.baudRate->addItem("50", 50); + ui.baudRate->addItem("70", 70); + ui.baudRate->addItem("110", 110); + ui.baudRate->addItem("134", 134); + ui.baudRate->addItem("150", 150); + ui.baudRate->addItem("200", 200); + ui.baudRate->addItem("300", 300); + ui.baudRate->addItem("600", 600); + ui.baudRate->addItem("1200", 1200); + ui.baudRate->addItem("1800", 1800); + ui.baudRate->addItem("2400", 2400); + ui.baudRate->addItem("4800", 4800); + ui.baudRate->addItem("9600", 9600); +#ifdef Q_OS_WIN + ui.baudRate->addItem("14400", 14400); +#endif + ui.baudRate->addItem("19200", 19200); + ui.baudRate->addItem("34800", 34800); +#ifdef Q_OS_WIN + ui.baudRate->addItem("56000", 56000); +#endif + ui.baudRate->addItem("57600", 57600); +#ifdef Q_OS_WIN + ui.baudRate->addItem("76800", 76800); +#endif + ui.baudRate->addItem("115200", 115200); +#ifdef Q_OS_WIN + ui.baudRate->addItem("128000", 128000); + ui.baudRate->addItem("230400", 230400); + ui.baudRate->addItem("256000", 256000); + ui.baudRate->addItem("460800", 460800); +#endif + ui.baudRate->addItem("921600", 921600); + connect(action, SIGNAL(triggered()), this, SLOT(configureCommunication())); // Make sure that a change in the link name will be reflected in the UI @@ -251,7 +289,7 @@ SerialConfigurationWindow::SerialConfigurationWindow(LinkInterface* link, QWidge // Connect the individual user interface inputs connect(ui.portName, SIGNAL(editTextChanged(QString)), this, SLOT(setPortName(QString))); connect(ui.portName, SIGNAL(currentIndexChanged(QString)), this, SLOT(setPortName(QString))); - connect(ui.baudRate, SIGNAL(activated(int)), this->link, SLOT(setBaudRateType(int))); + connect(ui.baudRate, SIGNAL(activated(QString)), this->link, SLOT(setBaudRateString(QString))); connect(ui.flowControlCheckBox, SIGNAL(toggled(bool)), this, SLOT(enableFlowControl(bool))); connect(ui.parNone, SIGNAL(toggled(bool)), this, SLOT(setParityNone(bool))); connect(ui.parOdd, SIGNAL(toggled(bool)), this, SLOT(setParityOdd(bool))); @@ -292,7 +330,7 @@ SerialConfigurationWindow::SerialConfigurationWindow(LinkInterface* link, QWidge enableFlowControl(false); } - ui.baudRate->setCurrentIndex(this->link->getBaudRateType()); + ui.baudRate->setCurrentIndex(ui.baudRate->findText(QString("%1").arg(this->link->getBaudRate()))); ui.dataBitsSpinBox->setValue(this->link->getDataBits()); ui.stopBitsSpinBox->setValue(this->link->getStopBits()); @@ -466,7 +504,7 @@ void SerialConfigurationWindow::setParityEven(bool accept) void SerialConfigurationWindow::setPortName(QString port) { -#ifdef _WIN32 +#ifdef Q_OS_WIN port = port.split("-").first(); #endif port = port.remove(" "); diff --git a/thirdParty/qserialport/include/QtSerialPort/qportsettings.h b/thirdParty/qserialport/include/QtSerialPort/qportsettings.h index 390a93e1fa4df2d37715d9c91e3a28695e101aee..810304f599612c9e875705ea1b8a5d98e6c5442d 100644 --- a/thirdParty/qserialport/include/QtSerialPort/qportsettings.h +++ b/thirdParty/qserialport/include/QtSerialPort/qportsettings.h @@ -99,13 +99,14 @@ public: BAUDR_460800, BAUDR_500000, BAUDR_576000, - BAUDR_921600, #endif #ifdef TNX_WINDOWS_SERIAL_PORT BAUDR_14400, BAUDR_56000, BAUDR_128000, + BAUDR_230400, BAUDR_256000, + BAUDR_460800, #endif // baud rates supported by all OSs BAUDR_110, @@ -118,7 +119,8 @@ public: BAUDR_19200, BAUDR_38400, BAUDR_57600, - BAUDR_115200 + BAUDR_115200, + BAUDR_921600 }; enum DataBits { @@ -184,13 +186,14 @@ public: case BAUDR_56000: baudRateInt_=56000; break; case BAUDR_128000: baudRateInt_=128000; break; case BAUDR_256000: baudRateInt_=256000; break; + case BAUDR_230400: baudRateInt_=230400; break; + case BAUDR_460800: baudRateInt_=460800; break; #endif #if defined(Q_OS_LINUX) case BAUDR_230400: baudRateInt_=230400; break; case BAUDR_460800: baudRateInt_=460800; break; case BAUDR_500000: baudRateInt_=500000; break; case BAUDR_576000: baudRateInt_=576000; break; - case BAUDR_921600: baudRateInt_=921600; break; #endif // baud rates supported by all platforms case BAUDR_110: baudRateInt_=110; break; @@ -204,6 +207,7 @@ public: case BAUDR_38400: baudRateInt_=38400; break; case BAUDR_57600: baudRateInt_=57600; break; case BAUDR_115200: baudRateInt_=115200; break; + case BAUDR_921600: baudRateInt_=921600; break; default: baudRateInt_ = 0; // unknown baudrate }