diff --git a/ChangeLog.md b/ChangeLog.md index 2c7225f82b61bbf144065da91ba7dd9c7e81fc61..4c282bf4b9b978490706970dd82461574741686a 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,8 +4,13 @@ Note: This file only contains high level features or important fixes. ## 3.4 +### 3.4.3 - Not yet released +* Fix bug where Resume Mission would not display correctly in some cases. Issue #6835. + +### 3.4.2 +* Fix bug where new mission items may end up with 0 altitude internally and sent to vehicle while UI shows correct altitude. Issue #6823. + ### 3.4.1 -* Fix bug where new mission items may end up with 0 altitude internally and sent to vehicle while UI shows correct altitude. * Fix crash when Survery with terrain follow is moved quickly * Fix terrain follow climb/descent rate fields swapped in ui diff --git a/src/FlightDisplay/GuidedActionsController.qml b/src/FlightDisplay/GuidedActionsController.qml index 829dbaaa4033f528773f9b02c35b46ef8b9ff9fe..d0654838254d5950be38cd939a9e897fd263ac11 100644 --- a/src/FlightDisplay/GuidedActionsController.qml +++ b/src/FlightDisplay/GuidedActionsController.qml @@ -101,18 +101,19 @@ Item { property bool showTakeoff: _guidedActionsEnabled && _activeVehicle.takeoffVehicleSupported && !_vehicleFlying property bool showLand: _guidedActionsEnabled && _activeVehicle.guidedModeSupported && _vehicleArmed && !_activeVehicle.fixedWing && !_vehicleInLandMode property bool showStartMission: _guidedActionsEnabled && _missionAvailable && !_missionActive && !_vehicleFlying - property bool showContinueMission: _guidedActionsEnabled && _missionAvailable && !_missionActive && _vehicleArmed && _vehicleFlying && (_currentMissionIndex < missionController.visualItems.count - 1) + property bool showContinueMission: _guidedActionsEnabled && _missionAvailable && !_missionActive && _vehicleArmed && _vehicleFlying && (_currentMissionIndex < _missionItemCount - 1) property bool showPause: _guidedActionsEnabled && _vehicleArmed && _activeVehicle.pauseVehicleSupported && _vehicleFlying && !_vehiclePaused property bool showChangeAlt: _guidedActionsEnabled && _vehicleFlying && _activeVehicle.guidedModeSupported && _vehicleArmed && !_missionActive property bool showOrbit: _guidedActionsEnabled && !_hideOrbit && _vehicleFlying && _activeVehicle.orbitModeSupported && !_missionActive property bool showLandAbort: _guidedActionsEnabled && _vehicleFlying && _activeVehicle.fixedWing && _vehicleLanding property bool showGotoLocation: _guidedActionsEnabled && _vehicleFlying - // Note: The 'missionController.visualItems.count - 3' is a hack to not trigger resume mission when a mission ends with an RTL item - property bool showResumeMission: _activeVehicle && !_vehicleArmed && _vehicleWasFlying && _missionAvailable && _resumeMissionIndex > 0 && (_resumeMissionIndex < missionController.visualItems.count - 3) + // Note: The '_missionItemCount - 2' is a hack to not trigger resume mission when a mission ends with an RTL item + property bool showResumeMission: _activeVehicle && !_vehicleArmed && _vehicleWasFlying && _missionAvailable && _resumeMissionIndex > 0 && (_resumeMissionIndex < _missionItemCount - 2) property bool guidedUIVisible: guidedActionConfirm.visible || guidedActionList.visible + property var _corePlugin: QGroundControl.corePlugin property bool _guidedActionsEnabled: (!ScreenTools.isDebug && QGroundControl.corePlugin.options.guidedActionsRequireRCRSSI && _activeVehicle) ? _rcRSSIAvailable : _activeVehicle property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property string _flightMode: _activeVehicle ? _activeVehicle.flightMode : "" @@ -125,6 +126,7 @@ Item { property bool _vehicleInMissionMode: false property bool _vehicleInRTLMode: false property bool _vehicleInLandMode: false + property int _missionItemCount: missionController.missionItemCount property int _currentMissionIndex: missionController.currentMissionIndex property int _resumeMissionIndex: missionController.resumeMissionIndex property bool _hideEmergenyStop: !QGroundControl.corePlugin.options.guidedBarShowEmergencyStop @@ -132,15 +134,14 @@ Item { property bool _vehicleWasFlying: false property bool _rcRSSIAvailable: _activeVehicle ? _activeVehicle.rcRSSI > 0 && _activeVehicle.rcRSSI <= 100 : false - //Handy code for debugging state problems - property bool __debugGuidedStates: false + // You can turn on log output for GuidedActionsController by turning on GuidedActionsControllerLog category property bool __guidedModeSupported: _activeVehicle ? _activeVehicle.guidedModeSupported : false property bool __pauseVehicleSupported: _activeVehicle ? _activeVehicle.pauseVehicleSupported : false property bool __flightMode: _flightMode function _outputState() { - if (__debugGuidedStates) { - console.log(qsTr("_activeVehicle(%1) _vehicleArmed(%2) guidedModeSupported(%3) _vehicleFlying(%4) _vehicleInRTLMode(%5) pauseVehicleSupported(%6) _vehiclePaused(%7) _flightMode(%8)").arg(_activeVehicle ? 1 : 0).arg(_vehicleArmed ? 1 : 0).arg(__guidedModeSupported ? 1 : 0).arg(_vehicleFlying ? 1 : 0).arg(_vehicleInRTLMode ? 1 : 0).arg(__pauseVehicleSupported ? 1 : 0).arg(_vehiclePaused ? 1 : 0).arg(_flightMode)) + if (_corePlugin.guidedActionsControllerLogging()) { + console.log(qsTr("_activeVehicle(%1) _vehicleArmed(%2) guidedModeSupported(%3) _vehicleFlying(%4) _vehicleWasFlying(%5) _vehicleInRTLMode(%6) pauseVehicleSupported(%7) _vehiclePaused(%8) _flightMode(%9) _missionItemCount(%10)").arg(_activeVehicle ? 1 : 0).arg(_vehicleArmed ? 1 : 0).arg(__guidedModeSupported ? 1 : 0).arg(_vehicleFlying ? 1 : 0).arg(_vehicleWasFlying ? 1 : 0).arg(_vehicleInRTLMode ? 1 : 0).arg(__pauseVehicleSupported ? 1 : 0).arg(_vehiclePaused ? 1 : 0).arg(_flightMode).arg(_missionItemCount)) } } @@ -152,31 +153,32 @@ Item { on__FlightModeChanged: _outputState() on__GuidedModeSupportedChanged: _outputState() on__PauseVehicleSupportedChanged: _outputState() + on_MissionItemCountChanged: _outputState() on_CurrentMissionIndexChanged: { - if (__debugGuidedStates) { + if (_corePlugin.guidedActionsControllerLogging()) { console.log("_currentMissionIndex", _currentMissionIndex) } } on_ResumeMissionIndexChanged: { - if (__debugGuidedStates) { + if (_corePlugin.guidedActionsControllerLogging()) { console.log("_resumeMissionIndex", _resumeMissionIndex) } } onShowResumeMissionChanged: { - if (__debugGuidedStates) { + if (_corePlugin.guidedActionsControllerLogging()) { console.log("showResumeMission", showResumeMission) } _outputState() } onShowStartMissionChanged: { - if (__debugGuidedStates) { + if (_corePlugin.guidedActionsControllerLogging()) { console.log("showStartMission", showStartMission) } _outputState() } onShowContinueMissionChanged: { - if (__debugGuidedStates) { + if (_corePlugin.guidedActionsControllerLogging()) { console.log("showContinueMission", showContinueMission) } _outputState() diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 590098b861294ed5731de3fe829332f58bd595d9..f64e55eaa56d46f7c215c7347bc335286fd07d50 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -56,8 +56,9 @@ const int MissionController::_missionFileVersion = 2; MissionController::MissionController(PlanMasterController* masterController, QObject *parent) : PlanElementController (masterController, parent) , _missionManager (_managerVehicle->missionManager()) - , _visualItems (NULL) - , _settingsItem (NULL) + , _missionItemCount (0) + , _visualItems (nullptr) + , _settingsItem (nullptr) , _firstItemsFromVehicle (false) , _itemsRequested (false) , _inRecalcSequence (false) @@ -68,7 +69,7 @@ MissionController::MissionController(PlanMasterController* masterController, QOb , _appSettings (qgcApp()->toolbox()->settingsManager()->appSettings()) , _progressPct (0) , _currentPlanViewIndex (-1) - , _currentPlanViewItem (NULL) + , _currentPlanViewItem (nullptr) { _resetMissionFlightStatus(); managerVehicleChanged(_managerVehicle); @@ -159,6 +160,9 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque const QList& newMissionItems = _missionManager->missionItems(); qCDebug(MissionControllerLog) << "loading from vehicle: count"<< newMissionItems.count(); + _missionItemCount = newMissionItems.count(); + emit missionItemCountChanged(_missionItemCount); + int i = 0; if (_controllerVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0) { // First item is fake home position diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 458d97a37e26f4ea06942276c56d5aa294e45597..02f9b308eb5a5be23f39dbd41c6130728b954e84 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -73,6 +73,7 @@ public: Q_PROPERTY(double progressPct READ progressPct NOTIFY progressPctChanged) + Q_PROPERTY(int missionItemCount READ missionItemCount NOTIFY missionItemCountChanged) ///< True mission item command count (only valid in Fly View) Q_PROPERTY(int currentMissionIndex READ currentMissionIndex NOTIFY currentMissionIndexChanged) Q_PROPERTY(int resumeMissionIndex READ resumeMissionIndex NOTIFY resumeMissionIndexChanged) ///< Returns the item index two which a mission should be resumed. -1 indicates resume mission not available. @@ -170,6 +171,7 @@ public: QString corridorScanComplexItemName (void) const { return _corridorScanMissionItemName; } QString structureScanComplexItemName(void) const { return _structureScanMissionItemName; } + int missionItemCount (void) const { return _missionItemCount; } int currentMissionIndex (void) const; int resumeMissionIndex (void) const; int currentPlanViewIndex (void) const; @@ -208,6 +210,7 @@ signals: void currentMissionIndexChanged (int currentMissionIndex); void currentPlanViewIndexChanged (void); void currentPlanViewItemChanged (void); + void missionItemCountChanged (int missionItemCount); private slots: void _newMissionItemsAvailableFromVehicle(bool removeAllRequested); @@ -260,6 +263,7 @@ private: private: MissionManager* _missionManager; + int _missionItemCount; QmlObjectListModel* _visualItems; MissionSettingsItem* _settingsItem; QmlObjectListModel _waypointLines;