From 32fc12c51bfb7e6da9b07638e98f7dd8a9556a48 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Mon, 12 Jun 2017 13:14:20 -0700 Subject: [PATCH] Allow UDP auto connect to be controlled through settings --- src/Settings/AutoConnect.SettingsGroup.json | 18 +++++++++ src/Settings/AutoConnectSettings.cc | 45 ++++++++++++++++++--- src/Settings/AutoConnectSettings.h | 12 ++++++ src/comm/LinkManager.cc | 2 +- src/comm/UDPLink.cc | 16 ++++++-- src/comm/UDPLink.h | 3 -- 6 files changed, 83 insertions(+), 13 deletions(-) diff --git a/src/Settings/AutoConnect.SettingsGroup.json b/src/Settings/AutoConnect.SettingsGroup.json index afce2047f..5abfc0dd5 100644 --- a/src/Settings/AutoConnect.SettingsGroup.json +++ b/src/Settings/AutoConnect.SettingsGroup.json @@ -40,5 +40,23 @@ "longDescription": "If this option is enabled GroundControl will automatically connect to a LibrePilot board which is connected via USB.", "type": "bool", "defaultValue": true +}, +{ + "name": "AutoconnectUDPListenPort", + "shortDescription": "UDP port for autoconnect", + "type": "uint32", + "defaultValue": 14550 +}, +{ + "name": "AutoconnectUDPTargetHostIP", + "shortDescription": "UDP target host IP for autoconnect", + "type": "string", + "defaultValue": "" +}, +{ + "name": "AutoconnectUDPTargetHostPort", + "shortDescription": "UDP target host port for autoconnect", + "type": "uint32", + "defaultValue": 14550 } ] diff --git a/src/Settings/AutoConnectSettings.cc b/src/Settings/AutoConnectSettings.cc index fc1247f84..ab6bf4e57 100644 --- a/src/Settings/AutoConnectSettings.cc +++ b/src/Settings/AutoConnectSettings.cc @@ -21,17 +21,23 @@ const char* AutoConnectSettings:: autoConnectSiKRadioSettingsName = "Autocon const char* AutoConnectSettings:: autoConnectPX4FlowSettingsName = "AutoconnectPX4Flow"; const char* AutoConnectSettings:: autoConnectRTKGPSSettingsName = "AutoconnectRTKGPS"; const char* AutoConnectSettings:: autoConnectLibrePilotSettingsName = "AutoconnectLibrePilot"; +const char* AutoConnectSettings:: udpListenPortName = "AutoconnectUDPListenPort"; +const char* AutoConnectSettings:: udpTargetHostIPName = "AutoconnectUDPTargetHostIP"; +const char* AutoConnectSettings:: udpTargetHostPortName = "AutoconnectUDPTargetHostPort"; const char* AutoConnectSettings::autoConnectSettingsGroupName = "AutoConnect"; AutoConnectSettings::AutoConnectSettings(QObject* parent) - : SettingsGroup(autoConnectSettingsGroupName, _settingsGroup, parent) - , _autoConnectUDPFact(NULL) - , _autoConnectPixhawkFact(NULL) - , _autoConnectSiKRadioFact(NULL) - , _autoConnectPX4FlowFact(NULL) - , _autoConnectRTKGPSFact(NULL) + : SettingsGroup (autoConnectSettingsGroupName, _settingsGroup, parent) + , _autoConnectUDPFact (NULL) + , _autoConnectPixhawkFact (NULL) + , _autoConnectSiKRadioFact (NULL) + , _autoConnectPX4FlowFact (NULL) + , _autoConnectRTKGPSFact (NULL) , _autoConnectLibrePilotFact(NULL) + , _udpListenPortFact (NULL) + , _udpTargetHostIPFact (NULL) + , _udpTargetHostPortFact (NULL) { QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "AutoConnectSettings", "Reference only"); @@ -90,3 +96,30 @@ Fact* AutoConnectSettings::autoConnectLibrePilot(void) return _autoConnectLibrePilotFact; } + +Fact* AutoConnectSettings::udpListenPort(void) +{ + if (!_udpListenPortFact) { + _udpListenPortFact = _createSettingsFact(udpListenPortName); + } + + return _udpListenPortFact; +} + +Fact* AutoConnectSettings::udpTargetHostIP(void) +{ + if (!_udpTargetHostIPFact) { + _udpTargetHostIPFact = _createSettingsFact(udpTargetHostIPName); + } + + return _udpTargetHostIPFact; +} + +Fact* AutoConnectSettings::udpTargetHostPort(void) +{ + if (!_udpTargetHostPortFact) { + _udpTargetHostPortFact = _createSettingsFact(udpTargetHostPortName); + } + + return _udpTargetHostPortFact; +} diff --git a/src/Settings/AutoConnectSettings.h b/src/Settings/AutoConnectSettings.h index 83829fdfe..405cc8f23 100644 --- a/src/Settings/AutoConnectSettings.h +++ b/src/Settings/AutoConnectSettings.h @@ -25,6 +25,9 @@ public: Q_PROPERTY(Fact* autoConnectPX4Flow READ autoConnectPX4Flow CONSTANT) Q_PROPERTY(Fact* autoConnectRTKGPS READ autoConnectRTKGPS CONSTANT) Q_PROPERTY(Fact* autoConnectLibrePilot READ autoConnectLibrePilot CONSTANT) + Q_PROPERTY(Fact* udpListenPort READ udpListenPort CONSTANT) ///< Port to listen on for UDP autoconnect + Q_PROPERTY(Fact* udpTargetHostIP READ udpTargetHostIP CONSTANT) ///< Target host IP for UDP autoconnect, empty string for none + Q_PROPERTY(Fact* udpTargetHostPort READ udpTargetHostPort CONSTANT) ///< Target host post for UDP autoconnect Fact* autoConnectUDP (void); Fact* autoConnectPixhawk (void); @@ -32,6 +35,9 @@ public: Fact* autoConnectPX4Flow (void); Fact* autoConnectRTKGPS (void); Fact* autoConnectLibrePilot (void); + Fact* udpListenPort (void); + Fact* udpTargetHostIP (void); + Fact* udpTargetHostPort (void); static const char* autoConnectSettingsGroupName; @@ -41,6 +47,9 @@ public: static const char* autoConnectPX4FlowSettingsName; static const char* autoConnectRTKGPSSettingsName; static const char* autoConnectLibrePilotSettingsName; + static const char* udpListenPortName; + static const char* udpTargetHostIPName; + static const char* udpTargetHostPortName; private: SettingsFact* _autoConnectUDPFact; @@ -49,6 +58,9 @@ private: SettingsFact* _autoConnectPX4FlowFact; SettingsFact* _autoConnectRTKGPSFact; SettingsFact* _autoConnectLibrePilotFact; + SettingsFact* _udpListenPortFact; + SettingsFact* _udpTargetHostIPFact; + SettingsFact* _udpTargetHostPortFact; static const char* _settingsGroup; }; diff --git a/src/comm/LinkManager.cc b/src/comm/LinkManager.cc index f08b83f9b..3bbe7249d 100644 --- a/src/comm/LinkManager.cc +++ b/src/comm/LinkManager.cc @@ -459,8 +459,8 @@ void LinkManager::_updateAutoConnectLinks(void) } if (!foundUDP && _autoConnectSettings->autoConnectUDP()->rawValue().toBool()) { qCDebug(LinkManagerLog) << "New auto-connect UDP port added"; + // Default UDPConfiguration is set up for autoconnect UDPConfiguration* udpConfig = new UDPConfiguration(_defaultUPDLinkName); - udpConfig->setLocalPort(QGC_UDP_LOCAL_PORT); udpConfig->setDynamic(true); SharedLinkConfigurationPointer config = addConfiguration(udpConfig); createConnectedLink(config); diff --git a/src/comm/UDPLink.cc b/src/comm/UDPLink.cc index a0810ba56..fb650b25e 100644 --- a/src/comm/UDPLink.cc +++ b/src/comm/UDPLink.cc @@ -23,10 +23,13 @@ #include #include #include +#include #include "UDPLink.h" #include "QGC.h" -#include +#include "QGCApplication.h" +#include "SettingsManager.h" +#include "AutoConnectSettings.h" #define REMOVE_GONE_HOSTS 0 @@ -329,7 +332,12 @@ void UDPLink::_deregisterZeroconf() UDPConfiguration::UDPConfiguration(const QString& name) : LinkConfiguration(name) { - _localPort = QGC_UDP_LOCAL_PORT; + AutoConnectSettings* settings = qgcApp()->toolbox()->settingsManager()->autoConnectSettings(); + _localPort = settings->udpListenPort()->rawValue().toInt(); + QString targetHostIP = settings->udpTargetHostIP()->rawValue().toString(); + if (!targetHostIP.isEmpty()) { + addHost(targetHostIP, settings->udpTargetHostPort()->rawValue().toInt()); + } } UDPConfiguration::UDPConfiguration(UDPConfiguration* source) : LinkConfiguration(source) @@ -499,11 +507,13 @@ void UDPConfiguration::saveSettings(QSettings& settings, const QString& root) void UDPConfiguration::loadSettings(QSettings& settings, const QString& root) { + AutoConnectSettings* acSettings = qgcApp()->toolbox()->settingsManager()->autoConnectSettings(); + _confMutex.lock(); _hosts.clear(); _confMutex.unlock(); settings.beginGroup(root); - _localPort = (quint16)settings.value("port", QGC_UDP_LOCAL_PORT).toUInt(); + _localPort = (quint16)settings.value("port", acSettings->udpListenPort()->rawValue().toInt()).toUInt(); int hostCount = settings.value("hostCount", 0).toInt(); for(int i = 0; i < hostCount; i++) { QString hkey = QString("host%1").arg(i); diff --git a/src/comm/UDPLink.h b/src/comm/UDPLink.h index a20efa26e..6bdf5da84 100644 --- a/src/comm/UDPLink.h +++ b/src/comm/UDPLink.h @@ -34,9 +34,6 @@ #include "QGCConfig.h" #include "LinkManager.h" -#define QGC_UDP_LOCAL_PORT 14550 -#define QGC_UDP_TARGET_PORT 14555 - class UDPConfiguration : public LinkConfiguration { Q_OBJECT -- 2.22.0