diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index 188da227fb950f3f941e53d6446d2d89dea4c747..ea1f2d7a6945577542d8152aa48c12fe7195e85e 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -285,7 +285,7 @@ QList PX4FirmwarePlugin::supportedMissionCommands(void) list << MAV_CMD_NAV_WAYPOINT << MAV_CMD_NAV_LOITER_UNLIM << MAV_CMD_NAV_LOITER_TIME << MAV_CMD_NAV_LOITER_TO_ALT - << MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF + << MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF << MAV_CMD_NAV_RETURN_TO_LAUNCH << MAV_CMD_DO_JUMP << MAV_CMD_DO_VTOL_TRANSITION << MAV_CMD_NAV_VTOL_TAKEOFF << MAV_CMD_NAV_VTOL_LAND << MAV_CMD_DO_DIGICAM_CONTROL diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 1b3e803f8ed1997284e4c50efcd9c645e1c04270..590098b861294ed5731de3fe829332f58bd595d9 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -355,7 +355,6 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i) newItem->setCommand(takeoffCmd); } } - newItem->setDefaultsForCommand(); if (newItem->specifiesAltitude()) { double prevAltitude; int prevAltitudeMode; @@ -382,7 +381,6 @@ int MissionController::insertROIMissionItem(QGeoCoordinate coordinate, int i) MAV_CMD_DO_SET_ROI_LOCATION : MAV_CMD_DO_SET_ROI)); _initVisualItem(newItem); - newItem->setDefaultsForCommand(); newItem->setCoordinate(coordinate); double prevAltitude; diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc index 6c1583b6c5b3ee105e5b3d7786c89ac2749b2683..e96c9256b95b088775155a2234957bb536388af1 100644 --- a/src/MissionManager/SimpleMissionItem.cc +++ b/src/MissionManager/SimpleMissionItem.cc @@ -78,7 +78,7 @@ SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, bool flyView, QObject* pa _connectSignals(); _updateOptionalSections(); - setDefaultsForCommand(); + _setDefaultsForCommand(); _rebuildFacts(); setDirty(false); @@ -213,7 +213,7 @@ void SimpleMissionItem::_connectSignals(void) connect(&_missionItem._frameFact, &Fact::valueChanged, this, &SimpleMissionItem::_sendFriendlyEditAllowedChanged); // A command change triggers a number of other changes as well. - connect(&_missionItem._commandFact, &Fact::valueChanged, this, &SimpleMissionItem::setDefaultsForCommand); + connect(&_missionItem._commandFact, &Fact::valueChanged, this, &SimpleMissionItem::_setDefaultsForCommand); connect(&_missionItem._commandFact, &Fact::valueChanged, this, &SimpleMissionItem::commandNameChanged); connect(&_missionItem._commandFact, &Fact::valueChanged, this, &SimpleMissionItem::commandDescriptionChanged); connect(&_missionItem._commandFact, &Fact::valueChanged, this, &SimpleMissionItem::abbreviationChanged); @@ -729,15 +729,32 @@ bool SimpleMissionItem::readyForSave(void) const return !specifiesAltitude() || !qIsNaN(_missionItem._param7Fact.rawValue().toDouble()); } -void SimpleMissionItem::setDefaultsForCommand(void) +void SimpleMissionItem::_setDefaultsForCommand(void) { - // We set these global defaults first, then if there are param defaults they will get reset + // First reset params 1-4 to 0, we leave 5-7 alone to preserve any previous location information on command change + _missionItem._param1Fact.setRawValue(0); + _missionItem._param2Fact.setRawValue(0); + _missionItem._param3Fact.setRawValue(0); + _missionItem._param4Fact.setRawValue(0); + + if (!specifiesCoordinate() && !isStandaloneCoordinate()) { + // No need to carry across previous lat/lon + _missionItem._param5Fact.setRawValue(0); + _missionItem._param6Fact.setRawValue(0); + } + + // Set global defaults first, then if there are param defaults they will get reset _altitudeMode = AltitudeRelative; emit altitudeModeChanged(); - double defaultAlt = qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble(); - _altitudeFact.setRawValue(defaultAlt); - _missionItem._param7Fact.setRawValue(defaultAlt); _amslAltAboveTerrainFact.setRawValue(qQNaN()); + if (specifiesCoordinate() || isStandaloneCoordinate() || specifiesAltitudeOnly()) { + double defaultAlt = qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue().toDouble(); + _altitudeFact.setRawValue(defaultAlt); + _missionItem._param7Fact.setRawValue(defaultAlt); + } else { + _altitudeFact.setRawValue(0); + _missionItem._param7Fact.setRawValue(0); + } MAV_CMD command = (MAV_CMD)this->command(); const MissionCommandUIInfo* uiInfo = _commandTree->getUIInfo(_vehicle, command); diff --git a/src/MissionManager/SimpleMissionItem.h b/src/MissionManager/SimpleMissionItem.h index 886d6f4cdc812ca9e67eed78d375be5216d7bd32..c8a85ca4a2d729f8bd205ee8cffd4521ed26dcc0 100644 --- a/src/MissionManager/SimpleMissionItem.h +++ b/src/MissionManager/SimpleMissionItem.h @@ -134,9 +134,6 @@ public: int lastSequenceNumber (void) const final; void save (QJsonArray& missionItems) final; -public slots: - void setDefaultsForCommand(void); - signals: void commandChanged (int command); void friendlyEditAllowedChanged (bool friendlyEditAllowed); @@ -160,6 +157,7 @@ private slots: void _rebuildFacts (void); void _rebuildTextFieldFacts (void); void _possibleAdditionalTimeDelayChanged(void); + void _setDefaultsForCommand (void); private: void _connectSignals (void);