(fix) mavlink_mission: avoid double-checking MissionResult by using SubscriptionData

code was checking for an updated MissionResult twice in a row, leading to _mission_state
not being set correctly when the second check had no new message.

Switched to SubscriptionData to safely retrieve the latest message using .get().
This commit is contained in:
mahima-yoga 2025-07-02 11:12:23 +02:00 committed by Mahima Yoga
parent 14c0908082
commit 1e84c2de6b
2 changed files with 5 additions and 9 deletions

View File

@ -499,9 +499,9 @@ MavlinkMissionManager::send()
return;
}
mission_result_s mission_result{};
if (_mission_result_sub.update(&mission_result)) {
if (_mission_result_sub.update()) {
const mission_result_s &mission_result = _mission_result_sub.get();
if (_current_seq != mission_result.seq_current) {
@ -1925,11 +1925,7 @@ MavlinkMissionManager::update_mission_state()
}
// Get mission result
mission_result_s mission_result;
if (!_mission_result_sub.update(&mission_result)) {
return;
}
const mission_result_s &mission_result = _mission_result_sub.get();
// Update mission mode
if (vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION ||
@ -1953,7 +1949,7 @@ MavlinkMissionManager::update_mission_state()
&& vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED) {
_mission_state = MISSION_STATE_ACTIVE;
} else if (_mission_mode == MISSION_MODE_SUSPENDED && _last_reached >= 0) {
} else if (_mission_mode == MISSION_MODE_SUSPENDED && mission_result.seq_reached >= 0) {
// Only PAUSED if we were actually in the middle of a mission
_mission_state = MISSION_STATE_PAUSED;

View File

@ -148,7 +148,7 @@ private:
static bool _transfer_in_progress; ///< Global variable checking for current transmission
uORB::Subscription _mission_result_sub{ORB_ID(mission_result)};
uORB::SubscriptionData<mission_result_s> _mission_result_sub{ORB_ID(mission_result)};
uORB::SubscriptionData<mission_s> _mission_sub{ORB_ID(mission)};
uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; ///< vehicle status subscription