mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
(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:
parent
14c0908082
commit
1e84c2de6b
@ -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;
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user