From 849d3a1b5457923906f8d3490e5ad33903b35e7a Mon Sep 17 00:00:00 2001 From: Nico van Duijn Date: Thu, 19 Mar 2020 10:02:28 +0100 Subject: [PATCH] mavlink_mission: robustify against dropped ack This commit handles incoming MISSION_REQUEST_LIST messages such that they are no longer ignored if the previously requested mission has sent all mission items but the ack has never been received. This was the cause for frequent "IGN REQUEST LIST: Busy" warnings --- src/modules/mavlink/mavlink_mission.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index 1c339fbabe..ee3ed85db4 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -691,6 +691,14 @@ MavlinkMissionManager::handle_mission_request_list(const mavlink_message_t *msg) mavlink_msg_mission_request_list_decode(msg, &wprl); if (CHECK_SYSID_COMPID_MISSION(wprl)) { + const bool maybe_completed = (_transfer_seq == current_item_count()); + + // If all mission items have been sent and a new mission request list comes in, we can proceed even if MISSION_ACK was + // never received. This could happen on a quick reconnect that doesn't trigger MAVLINK_MISSION_PROTOCOL_TIMEOUT_DEFAULT + if (maybe_completed) { + switch_to_idle_state(); + } + if (_state == MAVLINK_WPM_STATE_IDLE || (_state == MAVLINK_WPM_STATE_SENDLIST && (uint8_t)_mission_type == wprl.mission_type)) { _time_last_recv = hrt_absolute_time();