diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml index f6475d47deb8a3e789282c42796c97a34f0b3882..6688eb6d66b332cfa6d81a250cf1d49fecea61f7 100644 --- a/src/FlightDisplay/FlightDisplayViewWidgets.qml +++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml @@ -218,6 +218,7 @@ Item { readonly property int confirmGoTo: 8 readonly property int confirmRetask: 9 readonly property int confirmOrbit: 10 + readonly property int confirmAbort: 11 property int confirmActionCode property real _showMargin: _margins @@ -265,6 +266,9 @@ Item { //-- Center on current flight map position and orbit with a 50m radius (velocity/direction controlled by the RC) //_activeVehicle.guidedModeOrbit(QGroundControl.flightMapPosition, 50.0) break; + case confirmAbort: + _activeVehicle.abortLanding(50) // hardcoded value for climbOutAltitude that is currently ignored + break; default: console.warn(qsTr("Internal error: unknown confirmActionCode"), confirmActionCode) } @@ -316,6 +320,9 @@ Item { case confirmOrbit: guidedModeConfirm.confirmText = qsTr("enter orbit mode") break; + case confirmAbort: + guidedModeConfirm.confirmText = qsTr("abort landing") + break; } _guidedModeBar.visible = false guidedModeConfirm.visible = true @@ -383,6 +390,13 @@ Item { onClicked: _guidedModeBar.confirmAction(_guidedModeBar.confirmOrbit) } + QGCButton { + pointSize: _guidedModeBar._fontPointSize + text: qsTr("Abort") + visible: _activeVehicle && _activeVehicle.flying && _activeVehicle.fixedWing + onClicked: _guidedModeBar.confirmAction(_guidedModeBar.confirmAbort) + } + } // Row } // Column } // Rectangle - Guided mode buttons diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 0ad9378c59588aa1b07642d204c7a410ec484a8e..24671d2534b53d6736cf2fb3a6a29c7f0f6500de 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -1897,6 +1897,14 @@ void Vehicle::pauseVehicle(void) _firmwarePlugin->pauseVehicle(this); } +void Vehicle::abortLanding(double climbOutAltitude) +{ + sendMavCommand(defaultComponentId(), + MAV_CMD_DO_GO_AROUND, + true, // show error if fails + climbOutAltitude); +} + bool Vehicle::guidedMode(void) const { return _firmwarePlugin->isGuidedMode(this); diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 8a8fea4fcdb079f20708f5a654ce4db4f70a2791..2963c1b587b848453e13cc6bdaaef534593f7699 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -364,6 +364,9 @@ public: /// Command vehicle to kill all motors no matter what state Q_INVOKABLE void emergencyStop(void); + /// Command vehicle to abort landing + Q_INVOKABLE void abortLanding(double climbOutAltitude); + /// Alter the current mission item on the vehicle Q_INVOKABLE void setCurrentMissionSequence(int seq);