diff --git a/src/Settings/AutoConnect.SettingsGroup.json b/src/Settings/AutoConnect.SettingsGroup.json index afce2047f2e95fc4a98a91fad72c13af54c61ccd..5abfc0dd5739375ad126de4f455a7e48c956db4e 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 fc1247f84c289394c062b872b0d92ec4882a86fe..ab6bf4e5743872c5aa79f22afa4dcc600095d319 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 83829fdfe15694428ac019d91e5391c8ad86d759..405cc8f23e58e8005b419ef4c8c1c7c84409382a 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 f08b83f9b10fd9af294a0a705913790817e44cd9..3bbe7249d18f64b5af29ef9e8f753152a4cc975a 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 a0810ba566b76994777a8cd12895cbfd78255963..fb650b25ec6a3114c3d6dec5f17a9b30e4da3a4e 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 a20efa26e47c1436d055e23096de416e8db7db68..6bdf5da845e7966049adf9db5037c940c7ccf073 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