diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro
index 9d95909a76994342dec5de2003f3b9112626031b..0e69320ad956150e3ca84854e771b4cd476121f1 100644
--- a/qgroundcontrol.pro
+++ b/qgroundcontrol.pro
@@ -554,6 +554,7 @@ HEADERS+= \
src/AutoPilotPlugins/APM/APMRadioComponent.h \
src/AutoPilotPlugins/APM/APMFlightModesComponent.h \
src/AutoPilotPlugins/APM/APMFlightModesComponentController.h \
+ src/AutoPilotPlugins/APM/APMSafetyComponent.h \
src/AutoPilotPlugins/APM/APMSensorsComponent.h \
src/AutoPilotPlugins/APM/APMSensorsComponentController.h \
src/AutoPilotPlugins/Common/RadioComponentController.h \
@@ -603,6 +604,7 @@ SOURCES += \
src/AutoPilotPlugins/APM/APMRadioComponent.cc \
src/AutoPilotPlugins/APM/APMFlightModesComponent.cc \
src/AutoPilotPlugins/APM/APMFlightModesComponentController.cc \
+ src/AutoPilotPlugins/APM/APMSafetyComponent.cc \
src/AutoPilotPlugins/APM/APMSensorsComponent.cc \
src/AutoPilotPlugins/APM/APMSensorsComponentController.cc \
src/AutoPilotPlugins/Common/RadioComponentController.cc \
diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index d48a6f478bd352fc5d2c99173dff4e441430c2ca..adfbf599b233a150918fa5ff6df89ad1ad7cc586 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -105,7 +105,14 @@
src/QmlControls/QmlTest.qml
src/AutoPilotPlugins/Common/RadioComponent.qml
src/AutoPilotPlugins/PX4/PX4RadioComponentSummary.qml
+ src/AutoPilotPlugins/APM/APMNotSupported.qml
src/AutoPilotPlugins/APM/APMRadioComponentSummary.qml
+ src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml
+ src/AutoPilotPlugins/APM/APMSafetyComponentPlane.qml
+ src/AutoPilotPlugins/APM/APMSafetyComponentRover.qml
+ src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml
+ src/AutoPilotPlugins/APM/APMSafetyComponentSummaryPlane.qml
+ src/AutoPilotPlugins/APM/APMSafetyComponentSummaryRover.qml
src/AutoPilotPlugins/PX4/SafetyComponent.qml
src/AutoPilotPlugins/PX4/SafetyComponentSummary.qml
src/AutoPilotPlugins/PX4/SensorsComponent.qml
diff --git a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc
index 93d9fe19ee755fa589e35ee0786ca7c183e8dac9..13bbce599dd244475a12a4fb1fbd62bd131a990e 100644
--- a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc
+++ b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc
@@ -34,6 +34,8 @@ APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent)
, _airframeComponent(NULL)
, _flightModesComponent(NULL)
, _radioComponent(NULL)
+ , _safetyComponent(NULL)
+ , _sensorsComponent(NULL)
{
Q_ASSERT(vehicle);
}
@@ -80,6 +82,14 @@ const QVariantList& APMAutoPilotPlugin::vehicleComponents(void)
} else {
qWarning() << "new APMSensorsComponent failed";
}
+
+ _safetyComponent = new APMSafetyComponent(_vehicle, this);
+ if (_safetyComponent) {
+ _safetyComponent->setupTriggerSignals();
+ _components.append(QVariant::fromValue((VehicleComponent*)_safetyComponent));
+ } else {
+ qWarning() << "new APMSafetyComponent failed";
+ }
} else {
qWarning() << "Call to vehicleCompenents prior to parametersReady";
}
diff --git a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h
index 93b564812dfdf835e03b932276a1f95d65053bb8..41f081c56a6e22ca890014d891cb54804d4d9706 100644
--- a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h
+++ b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h
@@ -29,6 +29,7 @@
#include "APMAirframeComponent.h"
#include "APMFlightModesComponent.h"
#include "APMRadioComponent.h"
+#include "APMSafetyComponent.h"
#include "APMSensorsComponent.h"
/// This is the APM specific implementation of the AutoPilot class.
@@ -46,6 +47,7 @@ public:
APMAirframeComponent* airframeComponent (void) { return _airframeComponent; }
APMFlightModesComponent* flightModesComponent(void) { return _flightModesComponent; }
APMRadioComponent* radioComponent (void) { return _radioComponent; }
+ APMSafetyComponent* safetyComponent (void) { return _safetyComponent; }
APMSensorsComponent* sensorsComponent (void) { return _sensorsComponent; }
public slots:
@@ -59,6 +61,7 @@ private:
APMAirframeComponent* _airframeComponent;
APMFlightModesComponent* _flightModesComponent;
APMRadioComponent* _radioComponent;
+ APMSafetyComponent* _safetyComponent;
APMSensorsComponent* _sensorsComponent;
};
diff --git a/src/AutoPilotPlugins/APM/APMNotSupported.qml b/src/AutoPilotPlugins/APM/APMNotSupported.qml
new file mode 100644
index 0000000000000000000000000000000000000000..ace3b3a1d446a0f7f015bec81cb86672bca4e9aa
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMNotSupported.qml
@@ -0,0 +1,33 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2015 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+import QtQuick 2.5
+
+import QGroundControl.Controls 1.0
+
+QGCLabel {
+ anchors.fill: parent
+ text: "Not supported"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponent.cc b/src/AutoPilotPlugins/APM/APMSafetyComponent.cc
new file mode 100644
index 0000000000000000000000000000000000000000..4d18ab7610db73b729282901cfcf98feae4384ac
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponent.cc
@@ -0,0 +1,149 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2014 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+/// @file
+/// @author Don Gagne
+
+#include "APMSafetyComponent.h"
+#include "QGCQmlWidgetHolder.h"
+#include "APMAutoPilotPlugin.h"
+
+APMSafetyComponent::APMSafetyComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent)
+ : APMComponent(vehicle, autopilot, parent)
+ , _name(tr("Safety"))
+{
+}
+
+QString APMSafetyComponent::name(void) const
+{
+ return _name;
+}
+
+QString APMSafetyComponent::description(void) const
+{
+ return tr("The Safety Component is used to setup triggers for Return to Land as well as the settings for Return to Land itself.");
+}
+
+QString APMSafetyComponent::iconResource(void) const
+{
+ return "/qmlimages/SafetyComponentIcon.png";
+}
+
+bool APMSafetyComponent::requiresSetup(void) const
+{
+ return false;
+}
+
+bool APMSafetyComponent::setupComplete(void) const
+{
+ // FIXME: What aboout invalid settings?
+ return true;
+}
+
+QString APMSafetyComponent::setupStateDescription(void) const
+{
+ const char* stateDescription;
+
+ if (requiresSetup()) {
+ stateDescription = "Requires setup";
+ } else {
+ stateDescription = "Setup complete";
+ }
+ return QString(stateDescription);
+}
+
+QStringList APMSafetyComponent::setupCompleteChangedTriggerList(void) const
+{
+ return QStringList();
+}
+
+QStringList APMSafetyComponent::paramFilterList(void) const
+{
+ return QStringList();
+}
+
+QUrl APMSafetyComponent::setupSource(void) const
+{
+ QString qmlFile;
+
+ switch (_vehicle->vehicleType()) {
+ case MAV_TYPE_FIXED_WING:
+ qmlFile = "qrc:/qml/APMSafetyComponentPlane.qml";
+ break;
+ case MAV_TYPE_QUADROTOR:
+ case MAV_TYPE_COAXIAL:
+ case MAV_TYPE_HELICOPTER:
+ case MAV_TYPE_HEXAROTOR:
+ case MAV_TYPE_OCTOROTOR:
+ case MAV_TYPE_TRICOPTER:
+ qmlFile = "qrc:/qml/APMSafetyComponentCopter.qml";
+ break;
+ case MAV_TYPE_GROUND_ROVER:
+ qmlFile = "qrc:/qml/APMSafetyComponentRover.qml";
+ break;
+ default:
+ qmlFile = "qrc:/qml/APMNotSupported.qml";
+ break;
+ }
+
+ return QUrl::fromUserInput(qmlFile);
+}
+
+QUrl APMSafetyComponent::summaryQmlSource(void) const
+{
+ QString qmlFile;
+
+ switch (_vehicle->vehicleType()) {
+ case MAV_TYPE_FIXED_WING:
+ qmlFile = "qrc:/qml/APMSafetyComponentSummaryPlane.qml";
+ break;
+ case MAV_TYPE_QUADROTOR:
+ case MAV_TYPE_COAXIAL:
+ case MAV_TYPE_HELICOPTER:
+ case MAV_TYPE_HEXAROTOR:
+ case MAV_TYPE_OCTOROTOR:
+ case MAV_TYPE_TRICOPTER:
+ qmlFile = "qrc:/qml/APMSafetyComponentSummaryCopter.qml";
+ break;
+ case MAV_TYPE_GROUND_ROVER:
+ qmlFile = "qrc:/qml/APMSafetyComponentSummaryRover.qml";
+ break;
+ default:
+ qmlFile = "qrc:/qml/APMNotSupported.qml";
+ break;
+ }
+
+ return QUrl::fromUserInput(qmlFile);
+}
+
+QString APMSafetyComponent::prerequisiteSetup(void) const
+{
+ APMAutoPilotPlugin* plugin = dynamic_cast(_autopilot);
+ Q_ASSERT(plugin);
+
+ if (!plugin->airframeComponent()->setupComplete()) {
+ return plugin->airframeComponent()->name();
+ }
+
+ return QString();
+}
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponent.h b/src/AutoPilotPlugins/APM/APMSafetyComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..bb8ed68d8b42c0b0e6419ba53b90fc741a6eea5b
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponent.h
@@ -0,0 +1,56 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2014 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+#ifndef APMSafetyComponent_H
+#define APMSafetyComponent_H
+
+#include "APMComponent.h"
+
+class APMSafetyComponent : public APMComponent
+{
+ Q_OBJECT
+
+public:
+ APMSafetyComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent = NULL);
+
+ // Virtuals from PX4Component
+ virtual QStringList setupCompleteChangedTriggerList(void) const;
+
+ // Virtuals from VehicleComponent
+ virtual QString name(void) const;
+ virtual QString description(void) const;
+ virtual QString iconResource(void) const;
+ virtual bool requiresSetup(void) const;
+ virtual bool setupComplete(void) const;
+ virtual QString setupStateDescription(void) const;
+ virtual QUrl setupSource(void) const;
+ virtual QStringList paramFilterList(void) const;
+ virtual QUrl summaryQmlSource(void) const;
+ virtual QString prerequisiteSetup(void) const;
+
+private:
+ const QString _name;
+ QVariantList _summaryItems;
+};
+
+#endif
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml
new file mode 100644
index 0000000000000000000000000000000000000000..a7267ba06aca4855da43446c958719bd7e34604d
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml
@@ -0,0 +1,193 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2015 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+import QtQuick 2.5
+import QtQuick.Controls 1.2
+import QtGraphicalEffects 1.0
+
+import QGroundControl.FactSystem 1.0
+import QGroundControl.FactControls 1.0
+import QGroundControl.Palette 1.0
+import QGroundControl.Controls 1.0
+import QGroundControl.ScreenTools 1.0
+
+QGCView {
+ id: _safetyView
+ viewPanel: panel
+ anchors.fill: parent
+
+ FactPanelController { id: controller; factPanel: panel }
+
+ QGCPalette { id: palette; colorGroupEnabled: enabled }
+
+ property Fact _landSpeedFact: controller.getParameterFact(-1, "LAND_SPEED")
+ property Fact _rtlAltFact: controller.getParameterFact(-1, "RTL_ALT")
+ property Fact _rtlLoitTimeFact: controller.getParameterFact(-1, "RTL_LOIT_TIME")
+ property Fact _rtlAltFinalFact: controller.getParameterFact(-1, "RTL_ALT_FINAL")
+
+ property real _margins: ScreenTools.defaultFontPixelHeight
+
+ ExclusiveGroup { id: landLoiterRadioGroup }
+ ExclusiveGroup { id: returnAltRadioGroup }
+
+ QGCViewPanel {
+ id: panel
+ anchors.fill: parent
+
+ Flickable {
+ clip: true
+ anchors.fill: parent
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.VerticalFlick
+
+ QGCLabel {
+ id: rtlLabel
+ text: "Return Home Settings"
+ font.weight: Font.DemiBold
+ }
+
+ Rectangle {
+ anchors.topMargin: _margins / 2
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: rtlLabel.bottom
+ height: rltAltFinalField.y + rltAltFinalField.height + _margins
+ color: palette.windowShade
+
+ Image {
+ id: icon
+ anchors.margins: _margins
+ anchors.left: parent.left
+ anchors.top: parent.top
+ height: ScreenTools.defaultFontPixelWidth * 20
+ width: ScreenTools.defaultFontPixelWidth * 20
+ mipmap: true
+ fillMode: Image.PreserveAspectFit
+ visible: false
+ source: "/qmlimages/ReturnToHomeAltitude.svg"
+ }
+
+ ColorOverlay {
+ anchors.fill: icon
+ source: icon
+ color: palette.text
+ }
+
+ QGCRadioButton {
+ id: returnAtCurrentRadio
+ anchors.leftMargin: _margins
+ anchors.left: icon.right
+ anchors.top: icon.top
+ text: "Return at current altitude"
+ checked: _rtlAltFact.value == 0
+ exclusiveGroup: returnAltRadioGroup
+
+ onClicked: _rtlAltFact.value = 0
+ }
+
+ QGCRadioButton {
+ id: returnAltRadio
+ anchors.topMargin: _margins
+ anchors.left: returnAtCurrentRadio.left
+ anchors.top: returnAtCurrentRadio.bottom
+ text: "Return at specified altitude:"
+ exclusiveGroup: returnAltRadioGroup
+ checked: _rtlAltFact.value != 0
+
+ onClicked: _rtlAltFact.value = 1500
+ }
+
+ FactTextField {
+ id: rltAltField
+ anchors.leftMargin: _margins
+ anchors.left: returnAltRadio.right
+ anchors.baseline: returnAltRadio.baseline
+ fact: _rtlAltFact
+ showUnits: true
+ enabled: returnAltRadio.checked
+ }
+
+ QGCCheckBox {
+ id: homeLoiterCheckbox
+ anchors.left: returnAtCurrentRadio.left
+ anchors.baseline: landDelayField.baseline
+ checked: _rtlLoitTimeFact.value > 0
+ text: "Loiter above Home for:"
+
+ onClicked: _rtlLoitTimeFact.value = checked ? 60 : 0
+ }
+
+ FactTextField {
+ id: landDelayField
+ anchors.topMargin: _margins * 1.5
+ anchors.left: rltAltField.left
+ anchors.top: rltAltField.bottom
+ fact: _rtlLoitTimeFact
+ showUnits: true
+ enabled: homeLoiterCheckbox.checked === true
+ }
+
+ QGCRadioButton {
+ id: landRadio
+ anchors.left: returnAtCurrentRadio.left
+ anchors.baseline: landSpeedField.baseline
+ text: "Land with descent speed:"
+ checked: _rtlAltFinalFact.value == 0
+ exclusiveGroup: landLoiterRadioGroup
+
+ onClicked: _rtlAltFinalFact.value = 0
+ }
+
+ FactTextField {
+ id: landSpeedField
+ anchors.topMargin: _margins * 1.5
+ anchors.top: landDelayField.bottom
+ anchors.left: rltAltField.left
+ fact: _landSpeedFact
+ showUnits: true
+ enabled: landRadio.checked
+ }
+
+ QGCRadioButton {
+ id: finalLoiterRadio
+ anchors.left: returnAtCurrentRadio.left
+ anchors.baseline: rltAltFinalField.baseline
+ text: "Final loiter altitude:"
+ exclusiveGroup: landLoiterRadioGroup
+
+ onClicked: _rtlAltFinalFact.value = _rtlAltFact.value
+ }
+
+ FactTextField {
+ id: rltAltFinalField
+ anchors.topMargin: _margins / 2
+ anchors.left: rltAltField.left
+ anchors.top: landSpeedField.bottom
+ fact: _rtlAltFinalFact
+ enabled: finalLoiterRadio.checked
+ showUnits: true
+ }
+ } // Rectangle - RTL Settings
+ } // Flickable
+ } // QGCViewPanel
+} // QGCView
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentPlane.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentPlane.qml
new file mode 100644
index 0000000000000000000000000000000000000000..ace3b3a1d446a0f7f015bec81cb86672bca4e9aa
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponentPlane.qml
@@ -0,0 +1,33 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2015 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+import QtQuick 2.5
+
+import QGroundControl.Controls 1.0
+
+QGCLabel {
+ anchors.fill: parent
+ text: "Not supported"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentRover.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentRover.qml
new file mode 100644
index 0000000000000000000000000000000000000000..ace3b3a1d446a0f7f015bec81cb86672bca4e9aa
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponentRover.qml
@@ -0,0 +1,33 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2015 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+import QtQuick 2.5
+
+import QGroundControl.Controls 1.0
+
+QGCLabel {
+ anchors.fill: parent
+ text: "Not supported"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml
new file mode 100644
index 0000000000000000000000000000000000000000..c99126de2554272caf6d0600a2fae61a2b8c67c6
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml
@@ -0,0 +1,46 @@
+import QtQuick 2.2
+import QtQuick.Controls 1.2
+
+import QGroundControl.FactSystem 1.0
+import QGroundControl.FactControls 1.0
+import QGroundControl.Controls 1.0
+import QGroundControl.Palette 1.0
+
+FactPanel {
+ id: panel
+ anchors.fill: parent
+ color: qgcPal.windowShadeDark
+
+ QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
+ FactPanelController { id: controller; factPanel: panel }
+
+ property Fact _rtlAltFact: controller.getParameterFact(-1, "RTL_ALT")
+ property Fact _rtlLoitTimeFact: controller.getParameterFact(-1, "RTL_LOIT_TIME")
+ property Fact _rtlAltFinalFact: controller.getParameterFact(-1, "RTL_ALT_FINAL")
+ property Fact _landSpeedFact: controller.getParameterFact(-1, "LAND_SPEED")
+
+ Column {
+ anchors.fill: parent
+ anchors.margins: 8
+
+ VehicleSummaryRow {
+ labelText: "RTL min alt:"
+ valueText: _rtlAltFact.value == 0 ? "current" : _rtlAltFact.valueString
+ }
+
+ VehicleSummaryRow {
+ labelText: "RTL loiter time:"
+ valueText: _rtlLoitTimeFact.valueString
+ }
+
+ VehicleSummaryRow {
+ labelText: "RTL final alt:"
+ valueText: _rtlAltFinalFact.value == 0 ? "Land" : _rtlAltFinalFact.valueString
+ }
+
+ VehicleSummaryRow {
+ labelText: "Descent speed:"
+ valueText: _landSpeedFact.valueString
+ }
+ }
+}
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryPlane.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryPlane.qml
new file mode 100644
index 0000000000000000000000000000000000000000..ace3b3a1d446a0f7f015bec81cb86672bca4e9aa
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryPlane.qml
@@ -0,0 +1,33 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2015 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+import QtQuick 2.5
+
+import QGroundControl.Controls 1.0
+
+QGCLabel {
+ anchors.fill: parent
+ text: "Not supported"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryRover.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryRover.qml
new file mode 100644
index 0000000000000000000000000000000000000000..ace3b3a1d446a0f7f015bec81cb86672bca4e9aa
--- /dev/null
+++ b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryRover.qml
@@ -0,0 +1,33 @@
+/*=====================================================================
+
+ QGroundControl Open Source Ground Control Station
+
+ (c) 2009 - 2015 QGROUNDCONTROL PROJECT
+
+ This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+ ======================================================================*/
+
+import QtQuick 2.5
+
+import QGroundControl.Controls 1.0
+
+QGCLabel {
+ anchors.fill: parent
+ text: "Not supported"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}