Commit 6a92cbc4 authored by DonLakeFlyer's avatar DonLakeFlyer

parent b9e053e1
...@@ -897,9 +897,9 @@ void APMFirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoord ...@@ -897,9 +897,9 @@ void APMFirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoord
vehicle->missionManager()->writeArduPilotGuidedMissionItem(coordWithAltitude, false /* altChangeOnly */); vehicle->missionManager()->writeArduPilotGuidedMissionItem(coordWithAltitude, false /* altChangeOnly */);
} }
void APMFirmwarePlugin::guidedModeRTL(Vehicle* vehicle) void APMFirmwarePlugin::guidedModeRTL(Vehicle* vehicle, bool smartRTL)
{ {
_setFlightModeAndValidate(vehicle, rtlFlightMode()); _setFlightModeAndValidate(vehicle, smartRTL ? smartRTLFlightMode() : rtlFlightMode());
} }
void APMFirmwarePlugin::guidedModeChangeAltitude(Vehicle* vehicle, double altitudeChange) void APMFirmwarePlugin::guidedModeChangeAltitude(Vehicle* vehicle, double altitudeChange)
......
...@@ -86,9 +86,10 @@ public: ...@@ -86,9 +86,10 @@ public:
bool isGuidedMode (const Vehicle* vehicle) const override; bool isGuidedMode (const Vehicle* vehicle) const override;
QString gotoFlightMode (void) const override { return QStringLiteral("Guided"); } QString gotoFlightMode (void) const override { return QStringLiteral("Guided"); }
QString rtlFlightMode (void) const override { return QString("RTL"); } QString rtlFlightMode (void) const override { return QString("RTL"); }
QString smartRTLFlightMode (void) const override { return QString("Smart RTL"); }
QString missionFlightMode (void) const override { return QString("Auto"); } QString missionFlightMode (void) const override { return QString("Auto"); }
void pauseVehicle (Vehicle* vehicle) override; void pauseVehicle (Vehicle* vehicle) override;
void guidedModeRTL (Vehicle* vehicle) override; void guidedModeRTL (Vehicle* vehicle, bool smartRTL) override;
void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) override; void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) override;
bool adjustIncomingMavlinkMessage (Vehicle* vehicle, mavlink_message_t* message) override; bool adjustIncomingMavlinkMessage (Vehicle* vehicle, mavlink_message_t* message) override;
void adjustOutgoingMavlinkMessage (Vehicle* vehicle, LinkInterface* outgoingLink, mavlink_message_t* message) override; void adjustOutgoingMavlinkMessage (Vehicle* vehicle, LinkInterface* outgoingLink, mavlink_message_t* message) override;
......
...@@ -23,26 +23,25 @@ APMCopterMode::APMCopterMode(uint32_t mode, bool settable) : ...@@ -23,26 +23,25 @@ APMCopterMode::APMCopterMode(uint32_t mode, bool settable) :
APMCustomMode(mode, settable) APMCustomMode(mode, settable)
{ {
QMap<uint32_t,QString> enumToString; QMap<uint32_t,QString> enumToString;
enumToString.insert(STABILIZE, "Stabilize"); enumToString.insert(STABILIZE, "Stabilize");
enumToString.insert(ACRO, "Acro"); enumToString.insert(ACRO, "Acro");
enumToString.insert(ALT_HOLD, "Altitude Hold"); enumToString.insert(ALT_HOLD, "Altitude Hold");
enumToString.insert(AUTO, "Auto"); enumToString.insert(AUTO, "Auto");
enumToString.insert(GUIDED, "Guided"); enumToString.insert(GUIDED, "Guided");
enumToString.insert(LOITER, "Loiter"); enumToString.insert(LOITER, "Loiter");
enumToString.insert(RTL, "RTL"); enumToString.insert(RTL, "RTL");
enumToString.insert(CIRCLE, "Circle"); enumToString.insert(CIRCLE, "Circle");
enumToString.insert(LAND, "Land"); enumToString.insert(LAND, "Land");
enumToString.insert(DRIFT, "Drift"); enumToString.insert(DRIFT, "Drift");
enumToString.insert(SPORT, "Sport"); enumToString.insert(SPORT, "Sport");
enumToString.insert(FLIP, "Flip"); enumToString.insert(FLIP, "Flip");
enumToString.insert(AUTOTUNE, "Autotune"); enumToString.insert(AUTOTUNE, "Autotune");
enumToString.insert(POS_HOLD, "Position Hold"); enumToString.insert(POS_HOLD, "Position Hold");
enumToString.insert(BRAKE, "Brake"); enumToString.insert(BRAKE, "Brake");
enumToString.insert(THROW, "Throw"); enumToString.insert(THROW, "Throw");
enumToString.insert(AVOID_ADSB,"Avoid ADSB"); enumToString.insert(AVOID_ADSB, "Avoid ADSB");
enumToString.insert(GUIDED_NOGPS,"Guided No GPS"); enumToString.insert(GUIDED_NOGPS, "Guided No GPS");
enumToString.insert(SAFE_RTL,"Smart RTL"); enumToString.insert(SAFE_RTL, "Smart RTL");
setEnumToStringMapping(enumToString); setEnumToStringMapping(enumToString);
} }
......
...@@ -65,8 +65,9 @@ public: ...@@ -65,8 +65,9 @@ public:
QString pauseFlightMode (void) const override { return QString("Brake"); } QString pauseFlightMode (void) const override { return QString("Brake"); }
QString landFlightMode (void) const override { return QString("Land"); } QString landFlightMode (void) const override { return QString("Land"); }
QString takeControlFlightMode (void) const override { return QString("Loiter"); } QString takeControlFlightMode (void) const override { return QString("Loiter"); }
bool vehicleYawsToNextWaypointInMission (const Vehicle* vehicle) const final; bool vehicleYawsToNextWaypointInMission (const Vehicle* vehicle) const override;
QString autoDisarmParameter (Vehicle* vehicle) final { Q_UNUSED(vehicle); return QStringLiteral("DISARM_DELAY"); } QString autoDisarmParameter (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral("DISARM_DELAY"); }
bool supportsSmartRTL (void) const override { return true; }
private: private:
static bool _remapParamNameIntialized; static bool _remapParamNameIntialized;
......
...@@ -48,8 +48,9 @@ public: ...@@ -48,8 +48,9 @@ public:
QString pauseFlightMode (void) const override { return QString("Hold"); } QString pauseFlightMode (void) const override { return QString("Hold"); }
void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) final; void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) final;
int remapParamNameHigestMinorVersionNumber (int majorVersionNumber) const final; int remapParamNameHigestMinorVersionNumber (int majorVersionNumber) const final;
const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; } const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; }
bool supportsNegativeThrust(void) final; bool supportsNegativeThrust (void) final;
bool supportsSmartRTL (void) const override { return true; }
private: private:
static bool _remapParamNameIntialized; static bool _remapParamNameIntialized;
......
...@@ -240,10 +240,11 @@ void FirmwarePlugin::pauseVehicle(Vehicle* vehicle) ...@@ -240,10 +240,11 @@ void FirmwarePlugin::pauseVehicle(Vehicle* vehicle)
qgcApp()->showMessage(guided_mode_not_supported_by_vehicle); qgcApp()->showMessage(guided_mode_not_supported_by_vehicle);
} }
void FirmwarePlugin::guidedModeRTL(Vehicle* vehicle) void FirmwarePlugin::guidedModeRTL(Vehicle* vehicle, bool smartRTL)
{ {
// Not supported by generic vehicle // Not supported by generic vehicle
Q_UNUSED(vehicle); Q_UNUSED(vehicle);
Q_UNUSED(smartRTL);
qgcApp()->showMessage(guided_mode_not_supported_by_vehicle); qgcApp()->showMessage(guided_mode_not_supported_by_vehicle);
} }
......
...@@ -105,6 +105,11 @@ public: ...@@ -105,6 +105,11 @@ public:
/// Returns the flight mode for RTL /// Returns the flight mode for RTL
virtual QString rtlFlightMode(void) const { return QString(); } virtual QString rtlFlightMode(void) const { return QString(); }
/// Returns the flight mode for Smart RTL
virtual QString smartRTLFlightMode(void) const { return QString(); }
virtual bool supportsSmartRTL(void) const { return false; }
/// Returns the flight mode for Land /// Returns the flight mode for Land
virtual QString landFlightMode(void) const { return QString(); } virtual QString landFlightMode(void) const { return QString(); }
...@@ -125,7 +130,7 @@ public: ...@@ -125,7 +130,7 @@ public:
virtual void pauseVehicle(Vehicle* vehicle); virtual void pauseVehicle(Vehicle* vehicle);
/// Command vehicle to return to launch /// Command vehicle to return to launch
virtual void guidedModeRTL(Vehicle* vehicle); virtual void guidedModeRTL(Vehicle* vehicle, bool smartRTL);
/// Command vehicle to land at current location /// Command vehicle to land at current location
virtual void guidedModeLand(Vehicle* vehicle); virtual void guidedModeLand(Vehicle* vehicle);
......
...@@ -351,8 +351,9 @@ void PX4FirmwarePlugin::pauseVehicle(Vehicle* vehicle) ...@@ -351,8 +351,9 @@ void PX4FirmwarePlugin::pauseVehicle(Vehicle* vehicle)
NAN); NAN);
} }
void PX4FirmwarePlugin::guidedModeRTL(Vehicle* vehicle) void PX4FirmwarePlugin::guidedModeRTL(Vehicle* vehicle, bool smartRTL)
{ {
Q_UNUSED(smartRTL);
_setFlightModeAndValidate(vehicle, _rtlFlightMode); _setFlightModeAndValidate(vehicle, _rtlFlightMode);
} }
......
...@@ -44,7 +44,7 @@ public: ...@@ -44,7 +44,7 @@ public:
QString takeControlFlightMode (void) const override { return _manualFlightMode; } QString takeControlFlightMode (void) const override { return _manualFlightMode; }
QString gotoFlightMode (void) const override { return _holdFlightMode; } QString gotoFlightMode (void) const override { return _holdFlightMode; }
void pauseVehicle (Vehicle* vehicle) override; void pauseVehicle (Vehicle* vehicle) override;
void guidedModeRTL (Vehicle* vehicle) override; void guidedModeRTL (Vehicle* vehicle, bool smartRTL) override;
void guidedModeLand (Vehicle* vehicle) override; void guidedModeLand (Vehicle* vehicle) override;
void guidedModeTakeoff (Vehicle* vehicle, double takeoffAltRel) override; void guidedModeTakeoff (Vehicle* vehicle, double takeoffAltRel) override;
void guidedModeGotoLocation (Vehicle* vehicle, const QGeoCoordinate& gotoCoord) override; void guidedModeGotoLocation (Vehicle* vehicle, const QGeoCoordinate& gotoCoord) override;
......
...@@ -35,6 +35,8 @@ Rectangle { ...@@ -35,6 +35,8 @@ Rectangle {
property var actionData property var actionData
property bool hideTrigger: false property bool hideTrigger: false
property var mapIndicator property var mapIndicator
property alias optionText: optionCheckBox.text
property alias optionChecked: optionCheckBox.checked
property real _margins: ScreenTools.defaultFontPixelWidth property real _margins: ScreenTools.defaultFontPixelWidth
property bool _emergencyAction: action === guidedController.actionEmergencyStop property bool _emergencyAction: action === guidedController.actionEmergencyStop
...@@ -101,6 +103,13 @@ Rectangle { ...@@ -101,6 +103,13 @@ Rectangle {
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
} }
QGCCheckBox {
id: optionCheckBox
anchors.horizontalCenter: parent.horizontalCenter
text: ""
visible: text !== ""
}
// Action confirmation control // Action confirmation control
SliderSwitch { SliderSwitch {
id: slider id: slider
...@@ -115,7 +124,7 @@ Rectangle { ...@@ -115,7 +124,7 @@ Rectangle {
altitudeSlider.visible = false altitudeSlider.visible = false
} }
hideTrigger = false hideTrigger = false
guidedController.executeAction(_root.action, _root.actionData, altitudeChange) guidedController.executeAction(_root.action, _root.actionData, altitudeChange, _root.optionChecked)
if (mapIndicator) { if (mapIndicator) {
mapIndicator.actionConfirmed() mapIndicator.actionConfirmed()
mapIndicator = undefined mapIndicator = undefined
......
...@@ -203,7 +203,7 @@ Item { ...@@ -203,7 +203,7 @@ Item {
on_FlightModeChanged: { on_FlightModeChanged: {
_vehiclePaused = _activeVehicle ? _flightMode === _activeVehicle.pauseFlightMode : false _vehiclePaused = _activeVehicle ? _flightMode === _activeVehicle.pauseFlightMode : false
_vehicleInRTLMode = _activeVehicle ? _flightMode === _activeVehicle.rtlFlightMode : false _vehicleInRTLMode = _activeVehicle ? _flightMode === _activeVehicle.rtlFlightMode || _flightMode === _activeVehicle.smartRTLFlightMode : false
_vehicleInLandMode = _activeVehicle ? _flightMode === _activeVehicle.landFlightMode : false _vehicleInLandMode = _activeVehicle ? _flightMode === _activeVehicle.landFlightMode : false
_vehicleInMissionMode = _activeVehicle ? _flightMode === _activeVehicle.missionFlightMode : false // Must be last to get correct signalling for showStartMission popups _vehicleInMissionMode = _activeVehicle ? _flightMode === _activeVehicle.missionFlightMode : false // Must be last to get correct signalling for showStartMission popups
} }
...@@ -216,6 +216,7 @@ Item { ...@@ -216,6 +216,7 @@ Item {
confirmDialog.actionData = actionData confirmDialog.actionData = actionData
confirmDialog.hideTrigger = true confirmDialog.hideTrigger = true
confirmDialog.mapIndicator = mapIndicator confirmDialog.mapIndicator = mapIndicator
confirmDialog.optionText = ""
_actionData = actionData _actionData = actionData
switch (actionCode) { switch (actionCode) {
case actionArm: case actionArm:
...@@ -279,6 +280,10 @@ Item { ...@@ -279,6 +280,10 @@ Item {
case actionRTL: case actionRTL:
confirmDialog.title = rtlTitle confirmDialog.title = rtlTitle
confirmDialog.message = rtlMessage confirmDialog.message = rtlMessage
if (_activeVehicle.supportsSmartRTL) {
confirmDialog.optionText = qsTr("Smart RTL")
confirmDialog.optionChecked = false
}
confirmDialog.hideTrigger = Qt.binding(function() { return !showRTL }) confirmDialog.hideTrigger = Qt.binding(function() { return !showRTL })
break; break;
case actionChangeAlt: case actionChangeAlt:
...@@ -339,12 +344,12 @@ Item { ...@@ -339,12 +344,12 @@ Item {
} }
// Executes the specified action // Executes the specified action
function executeAction(actionCode, actionData, actionAltitudeChange) { function executeAction(actionCode, actionData, actionAltitudeChange, optionChecked) {
var i; var i;
var rgVehicle; var rgVehicle;
switch (actionCode) { switch (actionCode) {
case actionRTL: case actionRTL:
_activeVehicle.guidedModeRTL() _activeVehicle.guidedModeRTL(optionChecked)
break break
case actionLand: case actionLand:
_activeVehicle.guidedModeLand() _activeVehicle.guidedModeLand()
......
...@@ -2979,13 +2979,13 @@ QString Vehicle::gotoFlightMode() const ...@@ -2979,13 +2979,13 @@ QString Vehicle::gotoFlightMode() const
return _firmwarePlugin->gotoFlightMode(); return _firmwarePlugin->gotoFlightMode();
} }
void Vehicle::guidedModeRTL(void) void Vehicle::guidedModeRTL(bool smartRTL)
{ {
if (!guidedModeSupported()) { if (!guidedModeSupported()) {
qgcApp()->showMessage(guided_mode_not_supported_by_vehicle); qgcApp()->showMessage(guided_mode_not_supported_by_vehicle);
return; return;
} }
_firmwarePlugin->guidedModeRTL(this); _firmwarePlugin->guidedModeRTL(this, smartRTL);
} }
void Vehicle::guidedModeLand(void) void Vehicle::guidedModeLand(void)
...@@ -3606,6 +3606,16 @@ QString Vehicle::rtlFlightMode(void) const ...@@ -3606,6 +3606,16 @@ QString Vehicle::rtlFlightMode(void) const
return _firmwarePlugin->rtlFlightMode(); return _firmwarePlugin->rtlFlightMode();
} }
QString Vehicle::smartRTLFlightMode(void) const
{
return _firmwarePlugin->smartRTLFlightMode();
}
bool Vehicle::supportsSmartRTL(void) const
{
return _firmwarePlugin->supportsSmartRTL();
}
QString Vehicle::landFlightMode(void) const QString Vehicle::landFlightMode(void) const
{ {
return _firmwarePlugin->landFlightMode(); return _firmwarePlugin->landFlightMode();
......
...@@ -600,6 +600,8 @@ public: ...@@ -600,6 +600,8 @@ public:
Q_PROPERTY(QString missionFlightMode READ missionFlightMode CONSTANT) Q_PROPERTY(QString missionFlightMode READ missionFlightMode CONSTANT)
Q_PROPERTY(QString pauseFlightMode READ pauseFlightMode CONSTANT) Q_PROPERTY(QString pauseFlightMode READ pauseFlightMode CONSTANT)
Q_PROPERTY(QString rtlFlightMode READ rtlFlightMode CONSTANT) Q_PROPERTY(QString rtlFlightMode READ rtlFlightMode CONSTANT)
Q_PROPERTY(QString smartRTLFlightMode READ smartRTLFlightMode CONSTANT)
Q_PROPERTY(bool supportsSmartRTL READ supportsSmartRTL CONSTANT)
Q_PROPERTY(QString landFlightMode READ landFlightMode CONSTANT) Q_PROPERTY(QString landFlightMode READ landFlightMode CONSTANT)
Q_PROPERTY(QString takeControlFlightMode READ takeControlFlightMode CONSTANT) Q_PROPERTY(QString takeControlFlightMode READ takeControlFlightMode CONSTANT)
Q_PROPERTY(QString firmwareTypeString READ firmwareTypeString NOTIFY firmwareTypeChanged) Q_PROPERTY(QString firmwareTypeString READ firmwareTypeString NOTIFY firmwareTypeChanged)
...@@ -698,7 +700,7 @@ public: ...@@ -698,7 +700,7 @@ public:
Q_INVOKABLE void disconnectInactiveVehicle(void); Q_INVOKABLE void disconnectInactiveVehicle(void);
/// Command vehicle to return to launch /// Command vehicle to return to launch
Q_INVOKABLE void guidedModeRTL(void); Q_INVOKABLE void guidedModeRTL(bool smartRTL);
/// Command vehicle to land at current location /// Command vehicle to land at current location
Q_INVOKABLE void guidedModeLand(void); Q_INVOKABLE void guidedModeLand(void);
...@@ -919,6 +921,8 @@ public: ...@@ -919,6 +921,8 @@ public:
QString missionFlightMode () const; QString missionFlightMode () const;
QString pauseFlightMode () const; QString pauseFlightMode () const;
QString rtlFlightMode () const; QString rtlFlightMode () const;
QString smartRTLFlightMode () const;
bool supportsSmartRTL () const;
QString landFlightMode () const; QString landFlightMode () const;
QString takeControlFlightMode () const; QString takeControlFlightMode () const;
double defaultCruiseSpeed () const { return _defaultCruiseSpeed; } double defaultCruiseSpeed () const { return _defaultCruiseSpeed; }
......
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