diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 0197b2ce9fd8fd17da62f058cbbf91f36dd3b94b..6e79009583e3f314c0f2318eee03d661422e4686 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -596,6 +596,7 @@ HEADERS += \ src/QmlControls/RCChannelMonitorController.h \ src/QmlControls/ScreenToolsController.h \ src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h \ + src/Settings/APMMavlinkStreamRateSettings.h \ src/Settings/AppSettings.h \ src/Settings/AutoConnectSettings.h \ src/Settings/BrandImageSettings.h \ @@ -799,6 +800,7 @@ SOURCES += \ src/QmlControls/RCChannelMonitorController.cc \ src/QmlControls/ScreenToolsController.cc \ src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc \ + src/Settings/APMMavlinkStreamRateSettings.cc \ src/Settings/AppSettings.cc \ src/Settings/AutoConnectSettings.cc \ src/Settings/BrandImageSettings.cc \ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index e51d4ac77084d4af3bd03de92be6ef60c9696d3d..b811f360d4917c9f150c198e73a2c3c590b6ad3a 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -210,6 +210,7 @@ src/FlightDisplay/VirtualJoystick.qml + src/Settings/APMMavlinkStreamRate.SettingsGroup.json src/MissionManager/CameraCalc.FactMetaData.json src/MissionManager/CameraSpec.FactMetaData.json src/MissionManager/CorridorScan.SettingsGroup.json diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index 68119e7ffcf0ba468f1dff1e788b441d3f50428e..c9b52dc2ba2f042c44a51fea0907b83d70a5ebd6 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -19,6 +19,7 @@ #include "QGCFileDownload.h" #include "SettingsManager.h" #include "AppSettings.h" +#include "APMMavlinkStreamRateSettings.h" #include @@ -614,13 +615,30 @@ void APMFirmwarePlugin::_adjustCalibrationMessageSeverity(mavlink_message_t* mes void APMFirmwarePlugin::initializeStreamRates(Vehicle* vehicle) { - vehicle->requestDataStream(MAV_DATA_STREAM_RAW_SENSORS, 2); - vehicle->requestDataStream(MAV_DATA_STREAM_EXTENDED_STATUS, 2); - vehicle->requestDataStream(MAV_DATA_STREAM_RC_CHANNELS, 2); - vehicle->requestDataStream(MAV_DATA_STREAM_POSITION, 3); - vehicle->requestDataStream(MAV_DATA_STREAM_EXTRA1, 10); - vehicle->requestDataStream(MAV_DATA_STREAM_EXTRA2, 10); - vehicle->requestDataStream(MAV_DATA_STREAM_EXTRA3, 3); + APMMavlinkStreamRateSettings* streamRates = qgcApp()->toolbox()->settingsManager()->apmMavlinkStreamRateSettings(); + + struct StreamInfo_s { + MAV_DATA_STREAM mavStream; + int streamRate; + }; + + StreamInfo_s rgStreamInfo[] = { + { MAV_DATA_STREAM_RAW_SENSORS, streamRates->streamRateRawSensors()->rawValue().toInt() }, + { MAV_DATA_STREAM_EXTENDED_STATUS, streamRates->streamRateExtendedStatus()->rawValue().toInt() }, + { MAV_DATA_STREAM_RC_CHANNELS, streamRates->streamRateRCChannels()->rawValue().toInt() }, + { MAV_DATA_STREAM_POSITION, streamRates->streamRatePosition()->rawValue().toInt() }, + { MAV_DATA_STREAM_EXTRA1, streamRates->streamRateExtra1()->rawValue().toInt() }, + { MAV_DATA_STREAM_EXTRA2, streamRates->streamRateExtra2()->rawValue().toInt() }, + { MAV_DATA_STREAM_EXTRA3, streamRates->streamRateExtra3()->rawValue().toInt() }, + }; + + for (size_t i=0; i= 0) { + vehicle->requestDataStream(streamInfo.mavStream, static_cast(streamInfo.streamRate)); + } + } } @@ -733,22 +751,16 @@ QString APMFirmwarePlugin::missionCommandOverrides(MAV_TYPE vehicleType) const switch (vehicleType) { case MAV_TYPE_GENERIC: return QStringLiteral(":/json/APM/MavCmdInfoCommon.json"); - break; case MAV_TYPE_FIXED_WING: return QStringLiteral(":/json/APM/MavCmdInfoFixedWing.json"); - break; case MAV_TYPE_QUADROTOR: return QStringLiteral(":/json/APM/MavCmdInfoMultiRotor.json"); - break; case MAV_TYPE_VTOL_QUADROTOR: return QStringLiteral(":/json/APM/MavCmdInfoVTOL.json"); - break; case MAV_TYPE_SUBMARINE: return QStringLiteral(":/json/APM/MavCmdInfoSub.json"); - break; case MAV_TYPE_GROUND_ROVER: return QStringLiteral(":/json/APM/MavCmdInfoRover.json"); - break; default: qWarning() << "APMFirmwarePlugin::missionCommandOverrides called with bad MAV_TYPE:" << vehicleType; return QString(); diff --git a/src/QmlControls/QGroundControlQmlGlobal.cc b/src/QmlControls/QGroundControlQmlGlobal.cc index 2f892c185d8e2be0fdfb5256c6c6f62a88c0f2f4..b223793fd3501293d02dd2e2289e7656cd8e49f5 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.cc +++ b/src/QmlControls/QGroundControlQmlGlobal.cc @@ -178,6 +178,15 @@ int QGroundControlQmlGlobal::supportedFirmwareCount() return _firmwarePluginManager->supportedFirmwareTypes().count(); } +bool QGroundControlQmlGlobal::px4ProFirmwareSupported() +{ + return _firmwarePluginManager->supportedFirmwareTypes().contains(MAV_AUTOPILOT_PX4); +} + +bool QGroundControlQmlGlobal::apmFirmwareSupported() +{ + return _firmwarePluginManager->supportedFirmwareTypes().contains(MAV_AUTOPILOT_ARDUPILOTMEGA); +} bool QGroundControlQmlGlobal::linesIntersect(QPointF line1A, QPointF line1B, QPointF line2A, QPointF line2B) { diff --git a/src/QmlControls/QGroundControlQmlGlobal.h b/src/QmlControls/QGroundControlQmlGlobal.h index e49ace26cf725b6131f8fabe2def0869a9a3e803..26c3631e564200356b488dd0344c509f0fad6995 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.h +++ b/src/QmlControls/QGroundControlQmlGlobal.h @@ -70,6 +70,8 @@ public: Q_PROPERTY(bool taisyncSupported READ taisyncSupported CONSTANT) Q_PROPERTY(int supportedFirmwareCount READ supportedFirmwareCount CONSTANT) + Q_PROPERTY(bool px4ProFirmwareSupported READ px4ProFirmwareSupported CONSTANT) + Q_PROPERTY(int apmFirmwareSupported READ apmFirmwareSupported CONSTANT) Q_PROPERTY(qreal zOrderTopMost READ zOrderTopMost CONSTANT) ///< z order for top most items, toolbar, main window sub view Q_PROPERTY(qreal zOrderWidgets READ zOrderWidgets CONSTANT) ///< z order value to widgets, for example: zoom controls, hud widgetss @@ -180,6 +182,8 @@ public: int mavlinkSystemID () { return _toolbox->mavlinkProtocol()->getSystemId(); } int supportedFirmwareCount (); + bool px4ProFirmwareSupported (); + bool apmFirmwareSupported (); bool skipSetupPage () { return _skipSetupPage; } void setSkipSetupPage (bool skip); diff --git a/src/Settings/APMMavlinkStreamRate.SettingsGroup.json b/src/Settings/APMMavlinkStreamRate.SettingsGroup.json new file mode 100644 index 0000000000000000000000000000000000000000..954b079dc269972e80b104a1f93782ddabcde55c --- /dev/null +++ b/src/Settings/APMMavlinkStreamRate.SettingsGroup.json @@ -0,0 +1,64 @@ +{ + "QGC.MetaData.Defines": { + "StreamRateEnumStrings": "Controlled By Vehicle,0 hz,1 hz,2 hz,3 hz,4 hz,5 hz,6 hz,7 hz,8 hz,9 hz,10 hz,50 hz,100 hz", + "StreamRateEnumValues": "-1,0,1,2,3,4,5,6,7,8,9,10,50,100" + }, + "QGC.MetaData.Facts": [ + { + "name": "streamRateRawSensors", + "shortDescription": "Stream rate for MAVLink Raw Sensors telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 2 + }, + { + "name": "streamRateExtendedStatus", + "shortDescription": "Stream rate for MAVLink Extended Status telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 2 + }, + { + "name": "streamRateRCChannels", + "shortDescription": "Stream rate for MAVLink RC Channels telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 2 + }, + { + "name": "streamRatePosition", + "shortDescription": "Stream rate for MAVLink Position telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 3 + }, + { + "name": "streamRateExtra1", + "shortDescription": "Stream rate for MAVLink Extra1 telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 10 + }, + { + "name": "streamRateExtra2", + "shortDescription": "Stream rate for MAVLink Extra2 telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 10 + }, + { + "name": "streamRateExtra3", + "shortDescription": "Stream rate for MAVLink Extra3 telemetry stream.", + "type": "int32", + "enumStrings": "QGC.MetaData.Defines.StreamRateEnumStrings", + "enumValues": "QGC.MetaData.Defines.StreamRateEnumValues", + "defaultValue": 3 + } + ] +} diff --git a/src/Settings/APMMavlinkStreamRateSettings.cc b/src/Settings/APMMavlinkStreamRateSettings.cc new file mode 100644 index 0000000000000000000000000000000000000000..7516a60d33684a065005b9bf1a493d28296122b3 --- /dev/null +++ b/src/Settings/APMMavlinkStreamRateSettings.cc @@ -0,0 +1,83 @@ +/**************************************************************************** + * + * (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 "APMMavlinkStreamRateSettings.h" +#include "QGCApplication.h" + +#include +#include + +DECLARE_SETTINGGROUP(APMMavlinkStreamRate, "APMMavlinkStreamRate") +{ + QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); + qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "APMMavlinkStreamRateSettings", "Reference only"); + + connect(streamRateRawSensors(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRateRawSensors); + connect(streamRateExtendedStatus(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRateExtendedStatus); + connect(streamRateRCChannels(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRateRCChannels); + connect(streamRatePosition(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRatePosition); + connect(streamRateExtra1(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRateExtra1); + connect(streamRateExtra2(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRateExtra2); + connect(streamRateExtra3(), &Fact::rawValueChanged, this, &APMMavlinkStreamRateSettings::_updateStreamRateExtra3); +} + +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRateRawSensors) +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRateExtendedStatus) +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRateRCChannels) +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRatePosition) +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRateExtra1) +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRateExtra2) +DECLARE_SETTINGSFACT(APMMavlinkStreamRateSettings, streamRateExtra3) + +void APMMavlinkStreamRateSettings::_updateStreamRateWorker(MAV_DATA_STREAM mavStream, QVariant rateVar) +{ + Vehicle* activeVehicle = qgcApp()->toolbox()->multiVehicleManager()->activeVehicle(); + + if (activeVehicle) { + int streamRate = rateVar.toInt(); + if (streamRate >= 0) { + activeVehicle->requestDataStream(mavStream, static_cast(streamRate)); + } + } +} + +void APMMavlinkStreamRateSettings::_updateStreamRateRawSensors(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_RAW_SENSORS, value); +} + +void APMMavlinkStreamRateSettings::_updateStreamRateExtendedStatus(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_EXTENDED_STATUS, value); +} + +void APMMavlinkStreamRateSettings::_updateStreamRateRCChannels(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_RC_CHANNELS, value); +} + +void APMMavlinkStreamRateSettings::_updateStreamRatePosition(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_POSITION, value); +} + +void APMMavlinkStreamRateSettings::_updateStreamRateExtra1(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_EXTRA1, value); +} + +void APMMavlinkStreamRateSettings::_updateStreamRateExtra2(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_EXTRA2, value); +} + +void APMMavlinkStreamRateSettings::_updateStreamRateExtra3(QVariant value) +{ + _updateStreamRateWorker(MAV_DATA_STREAM_EXTRA3, value); +} diff --git a/src/Settings/APMMavlinkStreamRateSettings.h b/src/Settings/APMMavlinkStreamRateSettings.h new file mode 100644 index 0000000000000000000000000000000000000000..bb95ecbde683bc18c5885a15e37b7ad503b185c3 --- /dev/null +++ b/src/Settings/APMMavlinkStreamRateSettings.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * (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 APMMavlinkStreamRateSettings : public SettingsGroup +{ + Q_OBJECT + +public: + APMMavlinkStreamRateSettings(QObject* parent = nullptr); + + DEFINE_SETTING_NAME_GROUP() + + DEFINE_SETTINGFACT(streamRateRawSensors) + DEFINE_SETTINGFACT(streamRateExtendedStatus) + DEFINE_SETTINGFACT(streamRateRCChannels) + DEFINE_SETTINGFACT(streamRatePosition) + DEFINE_SETTINGFACT(streamRateExtra1) + DEFINE_SETTINGFACT(streamRateExtra2) + DEFINE_SETTINGFACT(streamRateExtra3) + +private slots: + void _updateStreamRateRawSensors (QVariant value); + void _updateStreamRateExtendedStatus(QVariant value); + void _updateStreamRateRCChannels (QVariant value); + void _updateStreamRatePosition (QVariant value); + void _updateStreamRateExtra1 (QVariant value); + void _updateStreamRateExtra2 (QVariant value); + void _updateStreamRateExtra3 (QVariant value); + +private: + void _updateStreamRateWorker(MAV_DATA_STREAM mavStream, QVariant rateVar); +}; diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json index 82917802eefa4c16ec51154684416e7123089391..67ef154dcca8ff523e4b7d9289ebcb46ca263397 100644 --- a/src/Settings/App.SettingsGroup.json +++ b/src/Settings/App.SettingsGroup.json @@ -201,10 +201,11 @@ "defaultValue": 0 }, { - "name": "apmStartMavlinkStreams", - "shortDescription": "Request start of MAVLink telemetry streams (ArduPilot only)", - "type": "bool", - "defaultValue": true + "name": "apmStartMavlinkStreams", + "shortDescription": "Request start of MAVLink telemetry streams (ArduPilot only)", + "type": "bool", + "defaultValue": true, + "qgcRebootRequired": true }, { "name": "enableTaisync", diff --git a/src/Settings/SettingsManager.cc b/src/Settings/SettingsManager.cc index a6393d47c1fcb10f2a3392069d00578785ed68ce..70a44ecc5bf34b08ab999116b71f509146497ef4 100644 --- a/src/Settings/SettingsManager.cc +++ b/src/Settings/SettingsManager.cc @@ -17,15 +17,16 @@ SettingsManager::SettingsManager(QGCApplication* app, QGCToolbox* toolbox) #if defined(QGC_AIRMAP_ENABLED) , _airMapSettings (nullptr) #endif - , _appSettings (nullptr) - , _unitsSettings (nullptr) - , _autoConnectSettings (nullptr) - , _videoSettings (nullptr) - , _flightMapSettings (nullptr) - , _rtkSettings (nullptr) - , _flyViewSettings (nullptr) - , _planViewSettings (nullptr) - , _brandImageSettings (nullptr) + , _appSettings (nullptr) + , _unitsSettings (nullptr) + , _autoConnectSettings (nullptr) + , _videoSettings (nullptr) + , _flightMapSettings (nullptr) + , _rtkSettings (nullptr) + , _flyViewSettings (nullptr) + , _planViewSettings (nullptr) + , _brandImageSettings (nullptr) + , _apmMavlinkStreamRateSettings (nullptr) { } @@ -36,16 +37,17 @@ void SettingsManager::setToolbox(QGCToolbox *toolbox) QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "SettingsManager", "Reference only"); - _unitsSettings = new UnitsSettings (this); // Must be first since AppSettings references it - _appSettings = new AppSettings (this); - _autoConnectSettings = new AutoConnectSettings (this); - _videoSettings = new VideoSettings (this); - _flightMapSettings = new FlightMapSettings (this); - _rtkSettings = new RTKSettings (this); - _flyViewSettings = new FlyViewSettings (this); - _planViewSettings = new PlanViewSettings (this); - _brandImageSettings = new BrandImageSettings (this); + _unitsSettings = new UnitsSettings (this); // Must be first since AppSettings references it + _appSettings = new AppSettings (this); + _autoConnectSettings = new AutoConnectSettings (this); + _videoSettings = new VideoSettings (this); + _flightMapSettings = new FlightMapSettings (this); + _rtkSettings = new RTKSettings (this); + _flyViewSettings = new FlyViewSettings (this); + _planViewSettings = new PlanViewSettings (this); + _brandImageSettings = new BrandImageSettings (this); + _apmMavlinkStreamRateSettings = new APMMavlinkStreamRateSettings (this); #if defined(QGC_AIRMAP_ENABLED) - _airMapSettings = new AirMapSettings (this); + _airMapSettings = new AirMapSettings (this); #endif } diff --git a/src/Settings/SettingsManager.h b/src/Settings/SettingsManager.h index 11fdacf48274a41facc9ca0bd800bf863135ea46..47d63b3ef9aa9479d56c14e00c0a7ee04c1de84a 100644 --- a/src/Settings/SettingsManager.h +++ b/src/Settings/SettingsManager.h @@ -23,6 +23,7 @@ #include "FlyViewSettings.h" #include "PlanViewSettings.h" #include "BrandImageSettings.h" +#include "APMMavlinkStreamRateSettings.h" #if defined(QGC_AIRMAP_ENABLED) #include "AirMapSettings.h" #endif @@ -37,17 +38,18 @@ public: SettingsManager(QGCApplication* app, QGCToolbox* toolbox); #if defined(QGC_AIRMAP_ENABLED) - Q_PROPERTY(QObject* airMapSettings READ airMapSettings CONSTANT) + Q_PROPERTY(QObject* airMapSettings READ airMapSettings CONSTANT) #endif - Q_PROPERTY(QObject* appSettings READ appSettings CONSTANT) - Q_PROPERTY(QObject* unitsSettings READ unitsSettings CONSTANT) - Q_PROPERTY(QObject* autoConnectSettings READ autoConnectSettings CONSTANT) - Q_PROPERTY(QObject* videoSettings READ videoSettings CONSTANT) - Q_PROPERTY(QObject* flightMapSettings READ flightMapSettings CONSTANT) - Q_PROPERTY(QObject* rtkSettings READ rtkSettings CONSTANT) - Q_PROPERTY(QObject* flyViewSettings READ flyViewSettings CONSTANT) - Q_PROPERTY(QObject* planViewSettings READ planViewSettings CONSTANT) - Q_PROPERTY(QObject* brandImageSettings READ brandImageSettings CONSTANT) + Q_PROPERTY(QObject* appSettings READ appSettings CONSTANT) + Q_PROPERTY(QObject* unitsSettings READ unitsSettings CONSTANT) + Q_PROPERTY(QObject* autoConnectSettings READ autoConnectSettings CONSTANT) + Q_PROPERTY(QObject* videoSettings READ videoSettings CONSTANT) + Q_PROPERTY(QObject* flightMapSettings READ flightMapSettings CONSTANT) + Q_PROPERTY(QObject* rtkSettings READ rtkSettings CONSTANT) + Q_PROPERTY(QObject* flyViewSettings READ flyViewSettings CONSTANT) + Q_PROPERTY(QObject* planViewSettings READ planViewSettings CONSTANT) + Q_PROPERTY(QObject* brandImageSettings READ brandImageSettings CONSTANT) + Q_PROPERTY(QObject* apmMavlinkStreamRateSettings READ apmMavlinkStreamRateSettings CONSTANT) // Override from QGCTool virtual void setToolbox(QGCToolbox *toolbox); @@ -55,29 +57,31 @@ public: #if defined(QGC_AIRMAP_ENABLED) AirMapSettings* airMapSettings (void) { return _airMapSettings; } #endif - AppSettings* appSettings (void) { return _appSettings; } - UnitsSettings* unitsSettings (void) { return _unitsSettings; } - AutoConnectSettings* autoConnectSettings (void) { return _autoConnectSettings; } - VideoSettings* videoSettings (void) { return _videoSettings; } - FlightMapSettings* flightMapSettings (void) { return _flightMapSettings; } - RTKSettings* rtkSettings (void) { return _rtkSettings; } - FlyViewSettings* flyViewSettings (void) { return _flyViewSettings; } - PlanViewSettings* planViewSettings (void) { return _planViewSettings; } - BrandImageSettings* brandImageSettings (void) { return _brandImageSettings; } + AppSettings* appSettings (void) { return _appSettings; } + UnitsSettings* unitsSettings (void) { return _unitsSettings; } + AutoConnectSettings* autoConnectSettings (void) { return _autoConnectSettings; } + VideoSettings* videoSettings (void) { return _videoSettings; } + FlightMapSettings* flightMapSettings (void) { return _flightMapSettings; } + RTKSettings* rtkSettings (void) { return _rtkSettings; } + FlyViewSettings* flyViewSettings (void) { return _flyViewSettings; } + PlanViewSettings* planViewSettings (void) { return _planViewSettings; } + BrandImageSettings* brandImageSettings (void) { return _brandImageSettings; } + APMMavlinkStreamRateSettings* apmMavlinkStreamRateSettings(void) { return _apmMavlinkStreamRateSettings; } private: #if defined(QGC_AIRMAP_ENABLED) AirMapSettings* _airMapSettings; #endif - AppSettings* _appSettings; - UnitsSettings* _unitsSettings; - AutoConnectSettings* _autoConnectSettings; - VideoSettings* _videoSettings; - FlightMapSettings* _flightMapSettings; - RTKSettings* _rtkSettings; - FlyViewSettings* _flyViewSettings; - PlanViewSettings* _planViewSettings; - BrandImageSettings* _brandImageSettings; + AppSettings* _appSettings; + UnitsSettings* _unitsSettings; + AutoConnectSettings* _autoConnectSettings; + VideoSettings* _videoSettings; + FlightMapSettings* _flightMapSettings; + RTKSettings* _rtkSettings; + FlyViewSettings* _flyViewSettings; + PlanViewSettings* _planViewSettings; + BrandImageSettings* _brandImageSettings; + APMMavlinkStreamRateSettings* _apmMavlinkStreamRateSettings; }; #endif diff --git a/src/ui/preferences/MavlinkSettings.qml b/src/ui/preferences/MavlinkSettings.qml index b154d6ba180e6eb32aee9c182b8af7c782e74586..2db2cc1d958272481712c9e77bb06b7396424a59 100644 --- a/src/ui/preferences/MavlinkSettings.qml +++ b/src/ui/preferences/MavlinkSettings.qml @@ -12,6 +12,7 @@ import QtQuick 2.3 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.4 import QtQuick.Dialogs 1.2 +import QtQuick.Layouts 1.2 import QGroundControl 1.0 import QGroundControl.FactSystem 1.0 @@ -33,6 +34,7 @@ Rectangle { property bool _uploadedSelected: false property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var _showMavlinkLog: QGroundControl.corePlugin.options.showMavlinkLogOptions + property bool _showAPMStreamRates: QGroundControl.apmFirmwareSupported && QGroundControl.settingsManager.apmMavlinkStreamRateSettings.visible QGCPalette { id: qgcPal } @@ -143,11 +145,6 @@ Rectangle { } } - FactCheckBox { - text: fact.shortDescription - fact: QGroundControl.settingsManager.appSettings.apmStartMavlinkStreams - } - QGCCheckBox { text: qsTr("Only accept MAVs with same protocol version") checked: QGroundControl.isVersionCheckEnabled @@ -158,6 +155,97 @@ Rectangle { } } //----------------------------------------------------------------- + //-- Stream Rates + Item { + id: apmStreamRatesLabel + width: __mavlinkRoot.width * 0.8 + height: streamRatesLabel.height + anchors.margins: ScreenTools.defaultFontPixelWidth + anchors.horizontalCenter: parent.horizontalCenter + visible: _showAPMStreamRates + QGCLabel { + id: streamRatesLabel + text: qsTr("Telemetry Stream Rates (ArduPilot Only)") + font.family: ScreenTools.demiboldFontFamily + } + } + Rectangle { + height: streamRatesColumn.height + (ScreenTools.defaultFontPixelHeight * 2) + width: __mavlinkRoot.width * 0.8 + color: qgcPal.windowShade + anchors.margins: ScreenTools.defaultFontPixelWidth + anchors.horizontalCenter: parent.horizontalCenter + visible: _showAPMStreamRates + + ColumnLayout { + id: streamRatesColumn + spacing: ScreenTools.defaultFontPixelHeight / 2 + anchors.centerIn: parent + + property bool allStreamsControlledByVehicle: !QGroundControl.settingsManager.appSettings.apmStartMavlinkStreams.rawValue + + QGCCheckBox { + text: qsTr("All Streams Controlled By Vehicle Settings") + checked: streamRatesColumn.allStreamsControlledByVehicle + onClicked: QGroundControl.settingsManager.appSettings.apmStartMavlinkStreams.rawValue = !checked + } + + GridLayout { + columns: 2 + enabled: !streamRatesColumn.allStreamsControlledByVehicle + + QGCLabel { text: qsTr("Raw Sensors") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRateRawSensors + indexModel: false + Layout.preferredWidth: _valueWidth + } + + QGCLabel { text: qsTr("Extended Status") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRateExtendedStatus + indexModel: false + Layout.preferredWidth: _valueWidth + } + + QGCLabel { text: qsTr("RC Channel") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRateRCChannels + indexModel: false + Layout.preferredWidth: _valueWidth + } + + QGCLabel { text: qsTr("Position") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRatePosition + indexModel: false + Layout.preferredWidth: _valueWidth + } + + QGCLabel { text: qsTr("Extra 1") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRateExtra1 + indexModel: false + Layout.preferredWidth: _valueWidth + } + + QGCLabel { text: qsTr("Extra 2") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRateExtra2 + indexModel: false + Layout.preferredWidth: _valueWidth + } + + QGCLabel { text: qsTr("Extra 3") } + FactComboBox { + fact: QGroundControl.settingsManager.apmMavlinkStreamRateSettings.streamRateExtra3 + indexModel: false + Layout.preferredWidth: _valueWidth + } + } + } + } + //----------------------------------------------------------------- //-- Mavlink Status Item { width: __mavlinkRoot.width * 0.8 @@ -253,7 +341,7 @@ Rectangle { visible: _showMavlinkLog QGCLabel { id: mavlogLabel - text: qsTr("MAVLink 2.0 Logging (PX4 Firmware Only)") + text: qsTr("MAVLink 2.0 Logging (PX4 Pro Only)") font.family: ScreenTools.demiboldFontFamily } } @@ -315,7 +403,7 @@ Rectangle { visible: _showMavlinkLog QGCLabel { id: logLabel - text: qsTr("MAVLink 2.0 Log Uploads (PX4 Firmware Only)") + text: qsTr("MAVLink 2.0 Log Uploads (PX4 Pro Only)") font.family: ScreenTools.demiboldFontFamily } }