From 06cf7dfa5864ccd3baf730dec51ca88a47eb17ae Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Fri, 18 Aug 2017 14:46:16 -0400 Subject: [PATCH] Added include and lib path for protobuf on maxOS (we need to make this automatic for all builds) Added AirMap settings (SettingsGroup) Added AirMap settings block to General Settings Create macros to deal with the tedious repetitions within SettingsGroup Removed old, hacked in setting for AirMapKey Remove a few of the tons of build warnings --- qgroundcontrol.pro | 12 ++++- qgroundcontrol.qrc | 1 + src/MissionManager/AirMapManager.cc | 21 ++++----- src/Settings/AirMap.SettingsGroup.json | 38 ++++++++++++++++ src/Settings/AirMapSettings.cc | 34 ++++++++++++++ src/Settings/AirMapSettings.h | 30 +++++++++++++ src/Settings/App.SettingsGroup.json | 5 --- src/Settings/AppSettings.cc | 11 ----- src/Settings/AppSettings.h | 6 +-- src/Settings/SettingsGroup.h | 28 ++++++++++++ src/Settings/SettingsManager.cc | 2 + src/Settings/SettingsManager.h | 4 ++ src/Vehicle/Vehicle.cc | 1 + src/ui/preferences/GeneralSettings.qml | 61 +++++++++++++++++++++++--- 14 files changed, 214 insertions(+), 40 deletions(-) create mode 100644 src/Settings/AirMap.SettingsGroup.json create mode 100644 src/Settings/AirMapSettings.cc create mode 100644 src/Settings/AirMapSettings.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index ac9ee5c42..3d8ebdc5f 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -564,6 +564,7 @@ HEADERS += \ src/QmlControls/RCChannelMonitorController.h \ src/QmlControls/ScreenToolsController.h \ src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h \ + src/Settings/AirMapSettings.h \ src/Settings/AppSettings.h \ src/Settings/AutoConnectSettings.h \ src/Settings/BrandImageSettings.h \ @@ -591,7 +592,15 @@ HEADERS += \ src/AnalyzeView/LogDownloadController.h \ libs/thirdParty/tiny-AES128-C/aes.h \ -# Protobuf +# Protobuf (AirMap) +# This should be optional. As is, QGC now requires protobuf to be installed. +MacBuild { + INCLUDEPATH += \ + /usr/local/opt/protobuf/include + LIBS += \ + -L/usr/local/opt/protobuf/lib +} + LIBS += -lprotobuf PROTOS = src/protobuf/airmap_telemetry.proto include(src/protobuf/proto_compile.pri) @@ -759,6 +768,7 @@ SOURCES += \ src/QmlControls/RCChannelMonitorController.cc \ src/QmlControls/ScreenToolsController.cc \ src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc \ + src/Settings/AirMapSettings.cc \ src/Settings/AppSettings.cc \ src/Settings/AutoConnectSettings.cc \ src/Settings/BrandImageSettings.cc \ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 5a743baf9..dff24a84f 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -190,6 +190,7 @@ src/MissionManager/MavCmdInfoRover.json src/MissionManager/MavCmdInfoSub.json src/MissionManager/MavCmdInfoVTOL.json + src/Settings/AirMap.SettingsGroup.json src/Settings/App.SettingsGroup.json src/Settings/AutoConnect.SettingsGroup.json src/Settings/FlightMap.SettingsGroup.json diff --git a/src/MissionManager/AirMapManager.cc b/src/MissionManager/AirMapManager.cc index e43d1debe..878e8f921 100644 --- a/src/MissionManager/AirMapManager.cc +++ b/src/MissionManager/AirMapManager.cc @@ -13,6 +13,7 @@ #include "JsonHelper.h" #include "SettingsManager.h" #include "AppSettings.h" +#include "AirMapSettings.h" #include "QGCQGeoCoordinate.h" #include "QGCApplication.h" @@ -344,7 +345,7 @@ void AirspaceRestrictionManager::updateROI(const QGeoCoordinate& center, double void AirspaceRestrictionManager::_parseAirspaceJson(QJsonParseError parseError, QJsonDocument airspaceDoc) { - + Q_UNUSED(parseError); QJsonObject rootObject = airspaceDoc.object(); switch(_state) { @@ -637,7 +638,7 @@ void AirMapFlightManager::_sendBriefingRequest() void AirMapFlightManager::_parseJson(QJsonParseError parseError, QJsonDocument doc) { - + Q_UNUSED(parseError); QJsonObject rootObject = doc.object(); switch(_state) { @@ -899,7 +900,7 @@ void AirMapTelemetry::_handleGlobalPositionInt(const mavlink_message_t& message) uint8_t* key = (uint8_t*)_key.data(); uint8_t iv[16]; - for (int i = 0; i < sizeof(iv); ++i) { + for (size_t i = 0; i < sizeof(iv); ++i) { iv[i] = (uint8_t)(qrand() & 0xff); // TODO: should use a secure random source } @@ -967,8 +968,8 @@ void AirMapTelemetry::_handleGlobalPositionInt(const mavlink_message_t& message) void AirMapTelemetry::_parseJson(QJsonParseError parseError, QJsonDocument doc) { + Q_UNUSED(parseError); QJsonObject rootObject = doc.object(); - switch(_state) { case State::StartCommunication: { @@ -1189,18 +1190,12 @@ void AirMapManager::_vehicleArmedChanged(bool armed) } } - void AirMapManager::setToolbox(QGCToolbox* toolbox) { QGCTool::setToolbox(toolbox); - - _networkingData.airmapAPIKey = toolbox->settingsManager()->appSettings()->airMapKey()->rawValueString(); - - // TODO: set login credentials from config - QString clientID = ""; - QString userName = ""; - QString password = ""; - _networkingData.login.setCredentials(clientID, userName, password); + AirMapSettings* ap = toolbox->settingsManager()->airMapSettings(); + _networkingData.airmapAPIKey = ap->apiKey()->rawValueString(); + _networkingData.login.setCredentials(ap->clientID()->rawValueString(), ap->userName()->rawValueString(), ap->password()->rawValueString()); } void AirMapManager::setROI(QGeoCoordinate& center, double radiusMeters) diff --git a/src/Settings/AirMap.SettingsGroup.json b/src/Settings/AirMap.SettingsGroup.json new file mode 100644 index 000000000..37d39bc74 --- /dev/null +++ b/src/Settings/AirMap.SettingsGroup.json @@ -0,0 +1,38 @@ +[ +{ + "name": "apiKey", + "shortDescription": "AirMap API Key", + "type": "string", + "defaultValue": "" +}, +{ + "name": "clientID", + "shortDescription": "AirMap Client ID", + "type": "string", + "defaultValue": "" +}, +{ + "name": "userName", + "shortDescription": "AirMap User Name", + "type": "string", + "defaultValue": "" +}, +{ + "name": "password", + "shortDescription": "AirMap Password", + "type": "string", + "defaultValue": "" +}, +{ + "name": "sitaUavReg", + "shortDescription": "AirMap SITA UAV Registration", + "type": "string", + "defaultValue": "" +}, +{ + "name": "sitaUserReg", + "shortDescription": "AirMap SITA User Registration", + "type": "string", + "defaultValue": "" +} +] diff --git a/src/Settings/AirMapSettings.cc b/src/Settings/AirMapSettings.cc new file mode 100644 index 000000000..8a49fbecd --- /dev/null +++ b/src/Settings/AirMapSettings.cc @@ -0,0 +1,34 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#include "AirMapSettings.h" +#include "QGCPalette.h" +#include "QGCApplication.h" + +#include +#include + +DECLARE_SETTINGGROUP(AirMap) +{ + INIT_SETTINGFACT(apiKey); + INIT_SETTINGFACT(clientID); + INIT_SETTINGFACT(userName); + INIT_SETTINGFACT(password); + INIT_SETTINGFACT(sitaUavReg); + INIT_SETTINGFACT(sitaUserReg); + QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); + qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "AirMapSettings", "Reference only"); +} + +DECLARE_SETTINGSFACT(AirMapSettings, apiKey) +DECLARE_SETTINGSFACT(AirMapSettings, clientID) +DECLARE_SETTINGSFACT(AirMapSettings, userName) +DECLARE_SETTINGSFACT(AirMapSettings, password) +DECLARE_SETTINGSFACT(AirMapSettings, sitaUavReg) +DECLARE_SETTINGSFACT(AirMapSettings, sitaUserReg) diff --git a/src/Settings/AirMapSettings.h b/src/Settings/AirMapSettings.h new file mode 100644 index 000000000..9466d3d4f --- /dev/null +++ b/src/Settings/AirMapSettings.h @@ -0,0 +1,30 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#pragma once + +#include "SettingsGroup.h" +#include "QGCMAVLink.h" + +class AirMapSettings : public SettingsGroup +{ + Q_OBJECT +public: + AirMapSettings(QObject* parent = NULL); + + DEFINE_SETTINGGROUP(AirMap) + + DEFINE_SETTINGFACT(apiKey) + DEFINE_SETTINGFACT(clientID) + DEFINE_SETTINGFACT(userName) + DEFINE_SETTINGFACT(password) + DEFINE_SETTINGFACT(sitaUavReg) + DEFINE_SETTINGFACT(sitaUserReg) + +}; diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json index 058b2d596..5b9bd15c2 100644 --- a/src/Settings/App.SettingsGroup.json +++ b/src/Settings/App.SettingsGroup.json @@ -176,10 +176,5 @@ "shortDescription": "Default firmware type for flashing", "type": "uint32", "defaultValue": 12 -}, -{ - "name": "AirMapKey", - "type": "string", - "defaultValue": "" } ] diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc index a7502969a..65068ef39 100644 --- a/src/Settings/AppSettings.cc +++ b/src/Settings/AppSettings.cc @@ -36,7 +36,6 @@ const char* AppSettings::autoLoadMissionsName = "AutoLoa const char* AppSettings::mapboxTokenName = "MapboxToken"; const char* AppSettings::esriTokenName = "EsriToken"; const char* AppSettings::defaultFirmwareTypeName = "DefaultFirmwareType"; -const char* AppSettings::airMapKeyName = "AirMapKey"; const char* AppSettings::parameterFileExtension = "params"; const char* AppSettings::planFileExtension = "plan"; @@ -76,7 +75,6 @@ AppSettings::AppSettings(QObject* parent) , _mapboxTokenFact(NULL) , _esriTokenFact(NULL) , _defaultFirmwareTypeFact(NULL) - , _airMapKeyFact(NULL) { QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only"); @@ -391,12 +389,3 @@ Fact* AppSettings::defaultFirmwareType(void) return _defaultFirmwareTypeFact; } -Fact* AppSettings::airMapKey(void) -{ - if (!_airMapKeyFact) { - _airMapKeyFact = _createSettingsFact(airMapKeyName); - } - - return _airMapKeyFact; -} - diff --git a/src/Settings/AppSettings.h b/src/Settings/AppSettings.h index 9cea8a7a2..5305f6d78 100644 --- a/src/Settings/AppSettings.h +++ b/src/Settings/AppSettings.h @@ -40,7 +40,6 @@ public: Q_PROPERTY(Fact* mapboxToken READ mapboxToken CONSTANT) Q_PROPERTY(Fact* esriToken READ esriToken CONSTANT) Q_PROPERTY(Fact* defaultFirmwareType READ defaultFirmwareType CONSTANT) - Q_PROPERTY(Fact* airMapKey READ airMapKey CONSTANT) Q_PROPERTY(QString missionSavePath READ missionSavePath NOTIFY savePathsChanged) Q_PROPERTY(QString parameterSavePath READ parameterSavePath NOTIFY savePathsChanged) @@ -76,13 +75,12 @@ public: Fact* mapboxToken (void); Fact* esriToken (void); Fact* defaultFirmwareType (void); - Fact* airMapKey (void); QString missionSavePath (void); QString parameterSavePath (void); QString telemetrySavePath (void); QString logSavePath (void); - QString videoSavePath (void); + QString videoSavePath (void); static MAV_AUTOPILOT offlineEditingFirmwareTypeFromFirmwareType(MAV_AUTOPILOT firmwareType); static MAV_TYPE offlineEditingVehicleTypeFromVehicleType(MAV_TYPE vehicleType); @@ -109,7 +107,6 @@ public: static const char* mapboxTokenName; static const char* esriTokenName; static const char* defaultFirmwareTypeName; - static const char* airMapKeyName; // Application wide file extensions static const char* parameterFileExtension; @@ -157,7 +154,6 @@ private: SettingsFact* _mapboxTokenFact; SettingsFact* _esriTokenFact; SettingsFact* _defaultFirmwareTypeFact; - SettingsFact* _airMapKeyFact; }; #endif diff --git a/src/Settings/SettingsGroup.h b/src/Settings/SettingsGroup.h index 048c0b113..7f0bfce02 100644 --- a/src/Settings/SettingsGroup.h +++ b/src/Settings/SettingsGroup.h @@ -17,6 +17,34 @@ #include +#define DEFINE_SETTINGGROUP(CLASS) \ + static const char* CLASS ## Settings ## GroupName; + +#define DECLARE_SETTINGGROUP(CLASS) \ + const char* CLASS ## Settings::CLASS ## Settings ## GroupName = #CLASS; \ + CLASS ## Settings::CLASS ## Settings(QObject* parent) \ + : SettingsGroup(CLASS ## Settings ## GroupName, QString() /* root settings group */, parent) + +#define DECLARE_SETTINGSFACT(CLASS, NAME) \ + const char* CLASS::NAME ## Name = #NAME; \ + Fact* CLASS::NAME(void) \ + { \ + if (!_ ## NAME ## Fact) { \ + _ ## NAME ## Fact = _createSettingsFact(NAME ## Name); \ + } \ + return _ ## NAME ## Fact; \ + } + +#define DEFINE_SETTINGFACT(NAME) \ + public: \ + Q_PROPERTY(Fact* NAME READ NAME CONSTANT) \ + Fact* NAME(); \ + static const char* NAME ## Name; \ + private: \ + SettingsFact* _ ## NAME ## Fact; + +#define INIT_SETTINGFACT(NAME) _ ## NAME ## Fact = NULL + /// Provides access to group of settings. The group is named and has a visible property associated with which can control whether the group /// is shows in the ui. class SettingsGroup : public QObject diff --git a/src/Settings/SettingsManager.cc b/src/Settings/SettingsManager.cc index 643bf2345..b7d6a127b 100644 --- a/src/Settings/SettingsManager.cc +++ b/src/Settings/SettingsManager.cc @@ -14,6 +14,7 @@ SettingsManager::SettingsManager(QGCApplication* app, QGCToolbox* toolbox) : QGCTool(app, toolbox) + , _airMapSettings (NULL) , _appSettings (NULL) , _unitsSettings (NULL) , _autoConnectSettings (NULL) @@ -40,4 +41,5 @@ void SettingsManager::setToolbox(QGCToolbox *toolbox) _rtkSettings = new RTKSettings(this); _guidedSettings = new GuidedSettings(this); _brandImageSettings = new BrandImageSettings(this); + _airMapSettings = new AirMapSettings(this); } diff --git a/src/Settings/SettingsManager.h b/src/Settings/SettingsManager.h index a69b7f6bc..bba1104e7 100644 --- a/src/Settings/SettingsManager.h +++ b/src/Settings/SettingsManager.h @@ -22,6 +22,7 @@ #include "RTKSettings.h" #include "GuidedSettings.h" #include "BrandImageSettings.h" +#include "AirMapSettings.h" #include @@ -33,6 +34,7 @@ class SettingsManager : public QGCTool public: SettingsManager(QGCApplication* app, QGCToolbox* toolbox); + Q_PROPERTY(QObject* airMapSettings READ airMapSettings CONSTANT) Q_PROPERTY(QObject* appSettings READ appSettings CONSTANT) Q_PROPERTY(QObject* unitsSettings READ unitsSettings CONSTANT) Q_PROPERTY(QObject* autoConnectSettings READ autoConnectSettings CONSTANT) @@ -45,6 +47,7 @@ public: // Override from QGCTool virtual void setToolbox(QGCToolbox *toolbox); + AirMapSettings* airMapSettings (void) { return _airMapSettings; } AppSettings* appSettings (void) { return _appSettings; } UnitsSettings* unitsSettings (void) { return _unitsSettings; } AutoConnectSettings* autoConnectSettings (void) { return _autoConnectSettings; } @@ -55,6 +58,7 @@ public: BrandImageSettings* brandImageSettings (void) { return _brandImageSettings; } private: + AirMapSettings* _airMapSettings; AppSettings* _appSettings; UnitsSettings* _unitsSettings; AutoConnectSettings* _autoConnectSettings; diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 3ebc22c63..84e03a7a3 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -2921,6 +2921,7 @@ void Vehicle::_vehicleParamLoaded(bool ready) void Vehicle::_trafficUpdate(QString traffic_id, QString vehicle_id, QGeoCoordinate location, float heading) { + Q_UNUSED(vehicle_id); // qDebug() << "traffic update:" << traffic_id << vehicle_id << heading << location; // TODO: filter based on minimum altitude? // TODO: remove a vehicle after a timeout? diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index f0814250f..9db781e4d 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -388,11 +388,6 @@ QGCView { } } } - - // FIXME: Hack - FactTextField { - fact: QGroundControl.settingsManager.appSettings.airMapKey - } } } @@ -492,6 +487,62 @@ QGCView { } } + //----------------------------------------------------------------- + //-- AirMap + Item { + width: _qgcView.width * 0.8 + height: unitLabel.height + anchors.margins: ScreenTools.defaultFontPixelWidth + anchors.horizontalCenter: parent.horizontalCenter + visible: QGroundControl.settingsManager.rtkSettings.visible + QGCLabel { + text: qsTr("AirMap") + font.family: ScreenTools.demiboldFontFamily + } + } + Rectangle { + height: airMapCol.height + (ScreenTools.defaultFontPixelHeight * 2) + width: _qgcView.width * 0.8 + color: qgcPal.windowShade + anchors.margins: ScreenTools.defaultFontPixelWidth + anchors.horizontalCenter: parent.horizontalCenter + visible: QGroundControl.settingsManager.airMapSettings.visible + Column { + id: airMapCol + spacing: ScreenTools.defaultFontPixelWidth + anchors.centerIn: parent + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel {text: qsTr("API Key:"); width: _labelWidth; anchors.verticalCenter: parent.verticalCenter } + FactTextField {fact: QGroundControl.settingsManager.airMapSettings.apiKey; width: _editFieldWidth; anchors.verticalCenter: parent.verticalCenter } + } + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel {text: qsTr("Client ID:"); width: _labelWidth; anchors.verticalCenter: parent.verticalCenter } + FactTextField {fact: QGroundControl.settingsManager.airMapSettings.clientID; width: _editFieldWidth; anchors.verticalCenter: parent.verticalCenter } + } + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel {text: qsTr("User Name:"); width: _labelWidth; anchors.verticalCenter: parent.verticalCenter } + FactTextField {fact: QGroundControl.settingsManager.airMapSettings.userName; width: _editFieldWidth; anchors.verticalCenter: parent.verticalCenter } + } + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel {text: qsTr("Password:"); width: _labelWidth; anchors.verticalCenter: parent.verticalCenter } + FactTextField {fact: QGroundControl.settingsManager.airMapSettings.password; width: _editFieldWidth; anchors.verticalCenter: parent.verticalCenter; echoMode: TextInput.Password } + } + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel {text: qsTr("SITA UAV Reg:"); width: _labelWidth; anchors.verticalCenter: parent.verticalCenter } + FactTextField {fact: QGroundControl.settingsManager.airMapSettings.sitaUavReg; width: _editFieldWidth; anchors.verticalCenter: parent.verticalCenter } + } + Row { + spacing: ScreenTools.defaultFontPixelWidth + QGCLabel {text: qsTr("SITA User Reg:"); width: _labelWidth; anchors.verticalCenter: parent.verticalCenter } + FactTextField {fact: QGroundControl.settingsManager.airMapSettings.sitaUserReg; width: _editFieldWidth; anchors.verticalCenter: parent.verticalCenter } + } + } + } //----------------------------------------------------------------- //-- Video Source Item { -- 2.22.0