Commit 32fc12c5 authored by DonLakeFlyer's avatar DonLakeFlyer

Allow UDP auto connect to be controlled through settings

parent d1c2f3fb
...@@ -40,5 +40,23 @@ ...@@ -40,5 +40,23 @@
"longDescription": "If this option is enabled GroundControl will automatically connect to a LibrePilot board which is connected via USB.", "longDescription": "If this option is enabled GroundControl will automatically connect to a LibrePilot board which is connected via USB.",
"type": "bool", "type": "bool",
"defaultValue": true "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
} }
] ]
...@@ -21,17 +21,23 @@ const char* AutoConnectSettings:: autoConnectSiKRadioSettingsName = "Autocon ...@@ -21,17 +21,23 @@ const char* AutoConnectSettings:: autoConnectSiKRadioSettingsName = "Autocon
const char* AutoConnectSettings:: autoConnectPX4FlowSettingsName = "AutoconnectPX4Flow"; const char* AutoConnectSettings:: autoConnectPX4FlowSettingsName = "AutoconnectPX4Flow";
const char* AutoConnectSettings:: autoConnectRTKGPSSettingsName = "AutoconnectRTKGPS"; const char* AutoConnectSettings:: autoConnectRTKGPSSettingsName = "AutoconnectRTKGPS";
const char* AutoConnectSettings:: autoConnectLibrePilotSettingsName = "AutoconnectLibrePilot"; 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"; const char* AutoConnectSettings::autoConnectSettingsGroupName = "AutoConnect";
AutoConnectSettings::AutoConnectSettings(QObject* parent) AutoConnectSettings::AutoConnectSettings(QObject* parent)
: SettingsGroup(autoConnectSettingsGroupName, _settingsGroup, parent) : SettingsGroup (autoConnectSettingsGroupName, _settingsGroup, parent)
, _autoConnectUDPFact(NULL) , _autoConnectUDPFact (NULL)
, _autoConnectPixhawkFact(NULL) , _autoConnectPixhawkFact (NULL)
, _autoConnectSiKRadioFact(NULL) , _autoConnectSiKRadioFact (NULL)
, _autoConnectPX4FlowFact(NULL) , _autoConnectPX4FlowFact (NULL)
, _autoConnectRTKGPSFact(NULL) , _autoConnectRTKGPSFact (NULL)
, _autoConnectLibrePilotFact(NULL) , _autoConnectLibrePilotFact(NULL)
, _udpListenPortFact (NULL)
, _udpTargetHostIPFact (NULL)
, _udpTargetHostPortFact (NULL)
{ {
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
qmlRegisterUncreatableType<AutoConnectSettings>("QGroundControl.SettingsManager", 1, 0, "AutoConnectSettings", "Reference only"); qmlRegisterUncreatableType<AutoConnectSettings>("QGroundControl.SettingsManager", 1, 0, "AutoConnectSettings", "Reference only");
...@@ -90,3 +96,30 @@ Fact* AutoConnectSettings::autoConnectLibrePilot(void) ...@@ -90,3 +96,30 @@ Fact* AutoConnectSettings::autoConnectLibrePilot(void)
return _autoConnectLibrePilotFact; 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;
}
...@@ -25,6 +25,9 @@ public: ...@@ -25,6 +25,9 @@ public:
Q_PROPERTY(Fact* autoConnectPX4Flow READ autoConnectPX4Flow CONSTANT) Q_PROPERTY(Fact* autoConnectPX4Flow READ autoConnectPX4Flow CONSTANT)
Q_PROPERTY(Fact* autoConnectRTKGPS READ autoConnectRTKGPS CONSTANT) Q_PROPERTY(Fact* autoConnectRTKGPS READ autoConnectRTKGPS CONSTANT)
Q_PROPERTY(Fact* autoConnectLibrePilot READ autoConnectLibrePilot 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* autoConnectUDP (void);
Fact* autoConnectPixhawk (void); Fact* autoConnectPixhawk (void);
...@@ -32,6 +35,9 @@ public: ...@@ -32,6 +35,9 @@ public:
Fact* autoConnectPX4Flow (void); Fact* autoConnectPX4Flow (void);
Fact* autoConnectRTKGPS (void); Fact* autoConnectRTKGPS (void);
Fact* autoConnectLibrePilot (void); Fact* autoConnectLibrePilot (void);
Fact* udpListenPort (void);
Fact* udpTargetHostIP (void);
Fact* udpTargetHostPort (void);
static const char* autoConnectSettingsGroupName; static const char* autoConnectSettingsGroupName;
...@@ -41,6 +47,9 @@ public: ...@@ -41,6 +47,9 @@ public:
static const char* autoConnectPX4FlowSettingsName; static const char* autoConnectPX4FlowSettingsName;
static const char* autoConnectRTKGPSSettingsName; static const char* autoConnectRTKGPSSettingsName;
static const char* autoConnectLibrePilotSettingsName; static const char* autoConnectLibrePilotSettingsName;
static const char* udpListenPortName;
static const char* udpTargetHostIPName;
static const char* udpTargetHostPortName;
private: private:
SettingsFact* _autoConnectUDPFact; SettingsFact* _autoConnectUDPFact;
...@@ -49,6 +58,9 @@ private: ...@@ -49,6 +58,9 @@ private:
SettingsFact* _autoConnectPX4FlowFact; SettingsFact* _autoConnectPX4FlowFact;
SettingsFact* _autoConnectRTKGPSFact; SettingsFact* _autoConnectRTKGPSFact;
SettingsFact* _autoConnectLibrePilotFact; SettingsFact* _autoConnectLibrePilotFact;
SettingsFact* _udpListenPortFact;
SettingsFact* _udpTargetHostIPFact;
SettingsFact* _udpTargetHostPortFact;
static const char* _settingsGroup; static const char* _settingsGroup;
}; };
......
...@@ -459,8 +459,8 @@ void LinkManager::_updateAutoConnectLinks(void) ...@@ -459,8 +459,8 @@ void LinkManager::_updateAutoConnectLinks(void)
} }
if (!foundUDP && _autoConnectSettings->autoConnectUDP()->rawValue().toBool()) { if (!foundUDP && _autoConnectSettings->autoConnectUDP()->rawValue().toBool()) {
qCDebug(LinkManagerLog) << "New auto-connect UDP port added"; qCDebug(LinkManagerLog) << "New auto-connect UDP port added";
// Default UDPConfiguration is set up for autoconnect
UDPConfiguration* udpConfig = new UDPConfiguration(_defaultUPDLinkName); UDPConfiguration* udpConfig = new UDPConfiguration(_defaultUPDLinkName);
udpConfig->setLocalPort(QGC_UDP_LOCAL_PORT);
udpConfig->setDynamic(true); udpConfig->setDynamic(true);
SharedLinkConfigurationPointer config = addConfiguration(udpConfig); SharedLinkConfigurationPointer config = addConfiguration(udpConfig);
createConnectedLink(config); createConnectedLink(config);
......
...@@ -23,10 +23,13 @@ ...@@ -23,10 +23,13 @@
#include <QNetworkProxy> #include <QNetworkProxy>
#include <QNetworkInterface> #include <QNetworkInterface>
#include <iostream> #include <iostream>
#include <QHostInfo>
#include "UDPLink.h" #include "UDPLink.h"
#include "QGC.h" #include "QGC.h"
#include <QHostInfo> #include "QGCApplication.h"
#include "SettingsManager.h"
#include "AutoConnectSettings.h"
#define REMOVE_GONE_HOSTS 0 #define REMOVE_GONE_HOSTS 0
...@@ -329,7 +332,12 @@ void UDPLink::_deregisterZeroconf() ...@@ -329,7 +332,12 @@ void UDPLink::_deregisterZeroconf()
UDPConfiguration::UDPConfiguration(const QString& name) : LinkConfiguration(name) 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) UDPConfiguration::UDPConfiguration(UDPConfiguration* source) : LinkConfiguration(source)
...@@ -499,11 +507,13 @@ void UDPConfiguration::saveSettings(QSettings& settings, const QString& root) ...@@ -499,11 +507,13 @@ void UDPConfiguration::saveSettings(QSettings& settings, const QString& root)
void UDPConfiguration::loadSettings(QSettings& settings, const QString& root) void UDPConfiguration::loadSettings(QSettings& settings, const QString& root)
{ {
AutoConnectSettings* acSettings = qgcApp()->toolbox()->settingsManager()->autoConnectSettings();
_confMutex.lock(); _confMutex.lock();
_hosts.clear(); _hosts.clear();
_confMutex.unlock(); _confMutex.unlock();
settings.beginGroup(root); 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(); int hostCount = settings.value("hostCount", 0).toInt();
for(int i = 0; i < hostCount; i++) { for(int i = 0; i < hostCount; i++) {
QString hkey = QString("host%1").arg(i); QString hkey = QString("host%1").arg(i);
......
...@@ -34,9 +34,6 @@ ...@@ -34,9 +34,6 @@
#include "QGCConfig.h" #include "QGCConfig.h"
#include "LinkManager.h" #include "LinkManager.h"
#define QGC_UDP_LOCAL_PORT 14550
#define QGC_UDP_TARGET_PORT 14555
class UDPConfiguration : public LinkConfiguration class UDPConfiguration : public LinkConfiguration
{ {
Q_OBJECT Q_OBJECT
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment