diff --git a/.gitignore b/.gitignore index 03e3788fe9716cf58b6b9bc0846c18524b10e33c..a294f37fbb6c921c73026f59b96db667fc64190a 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,7 @@ user_config.pri *.cproject *.sln *.suo + +thirdParty/qserialport-build-desktop/ +thirdParty/qserialport/bin/ +thirdParty/qserialport/lib/ diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 8d36b6cade1f0998893b995ceba066fff00c2ef0..a59c37b8bb21bf2a355bd345c7ee64c56436c60c 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -58,36 +58,47 @@ exists(user_config.pri) { } INCLUDEPATH += $$BASEDIR/../mavlink/include/common +INCLUDEPATH += $$BASEDIR/../mavlink/include +INCLUDEPATH += $$BASEDIR/thirdParty/mavlink/include/common +INCLUDEPATH += $$BASEDIR/thirdParty/mavlink/include contains(MAVLINK_CONF, pixhawk) { # Remove the default set - it is included anyway INCLUDEPATH -= $$BASEDIR/../mavlink/include/common + INCLUDEPATH -= $$BASEDIR/thirdParty/mavlink/include/common # PIXHAWK SPECIAL MESSAGES INCLUDEPATH += $$BASEDIR/../mavlink/include/pixhawk + INCLUDEPATH += $$BASEDIR/thirdParty/mavlink/include/pixhawk DEFINES += QGC_USE_PIXHAWK_MESSAGES } contains(MAVLINK_CONF, slugs) { # Remove the default set - it is included anyway INCLUDEPATH -= $$BASEDIR/../mavlink/include/common + INCLUDEPATH -= $$BASEDIR/thirdParty/mavlink/include/common # SLUGS SPECIAL MESSAGES INCLUDEPATH += $$BASEDIR/../mavlink/include/slugs + INCLUDEPATH += $$BASEDIR/thirdParty/mavlink/include/slugs DEFINES += QGC_USE_SLUGS_MESSAGES } contains(MAVLINK_CONF, ualberta) { # Remove the default set - it is included anyway INCLUDEPATH -= $$BASEDIR/../mavlink/include/common + INCLUDEPATH -= $$BASEDIR/thirdParty/mavlink/include/common # UALBERTA SPECIAL MESSAGES INCLUDEPATH += $$BASEDIR/../mavlink/include/ualberta + INCLUDEPATH += $$BASEDIR/thirdParty/mavlink/include/ualberta DEFINES += QGC_USE_UALBERTA_MESSAGES } contains(MAVLINK_CONF, ardupilotmega) { # Remove the default set - it is included anyway INCLUDEPATH -= $$BASEDIR/../mavlink/include/common + INCLUDEPATH -= $$BASEDIR/thirdParty/mavlink/include/common # UALBERTA SPECIAL MESSAGES INCLUDEPATH += $$BASEDIR/../mavlink/include/ardupilotmega + INCLUDEPATH += $$BASEDIR/thirdParty/mavlink/include/ardupilotmega DEFINES += QGC_USE_ARDUPILOTMEGA_MESSAGES } @@ -97,13 +108,6 @@ contains(MAVLINK_CONF, ardupilotmega) { # done by the plugins above include(qgroundcontrol.pri) -# QWT plot and QExtSerial depend on paths set by qgroundcontrol.pri -# Include serial port library -include(src/lib/qextserialport/qextserialport.pri) - -# include qserial library -include(thirdParty/qserial/qserialport.prf) - # Include QWT plotting library include(src/lib/qwt/qwt.pri) DEPENDPATH += . \ @@ -111,11 +115,22 @@ DEPENDPATH += . \ lib/QMapControl/src \ lib/opmapcontrol \ lib/opmapcontrol/src \ - plugins + plugins \ + thirdParty/qserialport/include \ + thirdParty/qserialport/include/QtSerialPort \ + thirdParty/qserialport INCLUDEPATH += . \ lib/QMapControl \ lib/opmapcontrol \ - $$BASEDIR/../mavlink/include + thirdParty/qserialport/include \ + thirdParty/qserialport/include/QtSerialPort \ + thirdParty/qserialport/src + +# Include serial port library +include(src/lib/qextserialport/qextserialport.pri) +# include qserial library +include(thirdParty/qserialport/qgroundcontrol-qserialport.pri) + # ../mavlink/include \ # MAVLink/include \ diff --git a/src/comm/SerialInterface.h b/src/comm/SerialInterface.h index 4eb3ca80c1e39c48cde9daec77ec335ccf961a35..630f93f0401663352abc5b85f1745b7b581cb016 100644 --- a/src/comm/SerialInterface.h +++ b/src/comm/SerialInterface.h @@ -49,7 +49,8 @@ signals: public: - enum baudRateType { + enum baudRateType + { BAUD50, //POSIX ONLY BAUD75, //POSIX ONLY BAUD110, @@ -77,14 +78,16 @@ public: BAUD921600 // WINDOWS ONLY }; - enum dataBitsType { + enum dataBitsType + { DATA_5, DATA_6, DATA_7, DATA_8 }; - enum parityType { + enum parityType + { PAR_NONE, PAR_ODD, PAR_EVEN, @@ -92,13 +95,15 @@ public: PAR_SPACE }; - enum stopBitsType { + enum stopBitsType + { STOP_1, STOP_1_5, //WINDOWS ONLY STOP_2 }; - enum flowType { + enum flowType + { FLOW_OFF, FLOW_HARDWARE, FLOW_XONXOFF @@ -107,7 +112,8 @@ public: /** * structure to contain port settings */ - struct portSettings { + struct portSettings + { baudRateType BaudRate; dataBitsType DataBits; parityType Parity; @@ -186,10 +192,11 @@ public: } virtual void setTimeout(qint64 timeout) { _port->setTimeout(timeout); - }; + } virtual void setFlow(SerialInterface::flowType flow) { // TODO implement - }; + _port->setFlowControl((FlowType)flow); + } }; using namespace TNX; @@ -262,11 +269,11 @@ public: virtual void setTimeout(qint64 timeout) { // TODO implement //_port->setTimeout(timeout); - }; + } virtual void setFlow(SerialInterface::flowType flow) { // TODO map settings.setFlowControl(QPortSettings::FLOW_OFF); - }; + } }; #endif // SERIALINTERFACE_H diff --git a/src/comm/SerialLink.cc b/src/comm/SerialLink.cc index d729b2d09e8715cedab2a2a5c9b2c8e60030ce6a..bffdddcaec4e161fb428f7bf907ee52ec95d97ec 100644 --- a/src/comm/SerialLink.cc +++ b/src/comm/SerialLink.cc @@ -48,32 +48,14 @@ SerialLink::SerialLink(QString portname, SerialInterface::baudRateType baudrate, 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. // Set the port name - if (porthandle == "") { - // name = tr("serial link ") + QString::number(getId()) + tr(" (unconfigured)"); + if (porthandle == "") + { name = tr("Serial Link ") + QString::number(getId()); - } else { - name = portname.trimmed(); } - -#ifdef _WIN3232 - // Windows 32bit & 64bit serial connection - winPort = CreateFile(porthandle, - GENERIC_READ | GENERIC_WRITE, - 0, - 0, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - 0); - if(winPort==INVALID_HANDLE_VALUE) { - if(GetLastError()==ERROR_FILE_NOT_FOUND) { - //serial port does not exist. Inform user. - } - //some other error occurred. Inform user. + else + { + name = portname.trimmed(); } -#else - -#endif - loadSettings(); } diff --git a/src/comm/UDPLink.cc b/src/comm/UDPLink.cc index a091beb480b52fbc34d96ba10d070108de0b78c7..a49d18b17c5199dcb640913fe2cb7540d8eec2d8 100644 --- a/src/comm/UDPLink.cc +++ b/src/comm/UDPLink.cc @@ -85,29 +85,32 @@ void UDPLink::setPort(int port) */ void UDPLink::addHost(const QString& host) { - qDebug() << "UDP:" << "ADDING HOST:" << host; - if (host.contains(":")) { - qDebug() << "HOST: " << host.split(":").first(); - QHostInfo info = QHostInfo::fromName(host.split(":").first()); - // Add host - QList hostAddresses = info.addresses(); - QHostAddress address; - for (int i = 0; i < hostAddresses.size(); i++) { - // Exclude loopback IPv4 and all IPv6 addresses - if (!hostAddresses.at(i).toString().contains(":")) { - address = hostAddresses.at(i); + if (host != "") + { + qDebug() << "UDP:" << "ADDING HOST:" << host; + if (host.contains(":")) { + qDebug() << "HOST: " << host.split(":").first(); + QHostInfo info = QHostInfo::fromName(host.split(":").first()); + // Add host + QList hostAddresses = info.addresses(); + QHostAddress address; + for (int i = 0; i < hostAddresses.size(); i++) { + // Exclude loopback IPv4 and all IPv6 addresses + if (!hostAddresses.at(i).toString().contains(":")) { + address = hostAddresses.at(i); + } } + hosts.append(address); + qDebug() << "Address:" << address.toString(); + // Set port according to user input + ports.append(host.split(":").last().toInt()); + } else { + QHostInfo info = QHostInfo::fromName(host); + // Add host + hosts.append(info.addresses().first()); + // Set port according to default (this port) + ports.append(port); } - hosts.append(address); - qDebug() << "Address:" << address.toString(); - // Set port according to user input - ports.append(host.split(":").last().toInt()); - } else { - QHostInfo info = QHostInfo::fromName(host); - // Add host - hosts.append(info.addresses().first()); - // Set port according to default (this port) - ports.append(port); } } diff --git a/thirdParty/qserialport/qgroundcontrol-qserialport.pri b/thirdParty/qserialport/qgroundcontrol-qserialport.pri new file mode 100644 index 0000000000000000000000000000000000000000..122d0b1864b80e6d8f66d1b105341d63fa93d817 --- /dev/null +++ b/thirdParty/qserialport/qgroundcontrol-qserialport.pri @@ -0,0 +1,47 @@ +###################################################################### +# Automatically generated by qmake (2.01a) Sa. Apr 2 10:42:30 2011 +###################################################################### + +DEPENDPATH += . \ + include/QtSerialPort \ + src/common \ + src/posix \ + src/win32 +INCLUDEPATH += include \ + include/QtSerialPort \ + src/posix \ + src/win32 + +# Input +HEADERS += include/QtSerialPort/qportsettings.h \ + include/QtSerialPort/qserialport.h \ + include/QtSerialPort/qserialport_export.h \ + include/QtSerialPort/qserialportnative.h + +macx|linux-g++|linux-g++-64 { +HEADERS += src/posix/termioshelper.h +} + +win32-msvc2008|win32-g++ { +HEADERS += src/win32/commdcbhelper.h \ + src/win32/qwincommevtnotifier.h \ + src/win32/wincommevtbreaker.h \ + src/win32/commdcbhelper.h \ + src/win32/qwincommevtnotifier.h \ + src/win32/wincommevtbreaker.h +} + +SOURCES += src/common/qportsettings.cpp \ + src/common/qserialport.cpp + +macx|linux-g++|linux-g++-64 { +SOURCES += src/posix/qserialportnative_posix.cpp \ + src/posix/termioshelper.cpp +} + +win32-msvc2008|win32-g++ { +SOURCES += src/win32/commdcbhelper.cpp \ + src/win32/qserialportnative_win32.cpp \ + src/win32/qwincommevtnotifier.cpp \ + src/win32/wincommevtbreaker.cpp +}