From f3fefd7d9372ec98d404e2e99da2e251114a2d7e Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Mon, 24 Feb 2020 07:47:08 +0100 Subject: [PATCH] mavlink: support mission transfer cancellation (#14139) This adds support for MAV_MISSION_OPERATION_CANCELLED which can be used to cancel an ongoing upload or download of mission/geofence/rally items. --- src/modules/mavlink/mavlink_mission.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index 952abf3bf5..ec7e8dcec9 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -601,14 +601,16 @@ MavlinkMissionManager::handle_mission_ack(const mavlink_message_t *msg) if (CHECK_SYSID_COMPID_MISSION(wpa)) { if ((msg->sysid == _transfer_partner_sysid && msg->compid == _transfer_partner_compid)) { if (_state == MAVLINK_WPM_STATE_SENDLIST && _mission_type == wpa.mission_type) { + _time_last_recv = hrt_absolute_time(); - if (_transfer_seq == current_item_count()) { + if (wpa.type == MAV_MISSION_ACCEPTED && _transfer_seq == current_item_count()) { PX4_DEBUG("WPM: MISSION_ACK OK all items sent, switch to state IDLE"); - } else { - _mavlink->send_statustext_critical("WPM: ERR: not all items sent -> IDLE"); + } else if (wpa.type == MAV_MISSION_OPERATION_CANCELLED) { + PX4_DEBUG("WPM: MISSION_ACK CANCELLED, switch to state IDLE"); + } else { PX4_DEBUG("WPM: MISSION_ACK ERROR: not all items sent, switch to state IDLE anyway"); } @@ -628,6 +630,11 @@ MavlinkMissionManager::handle_mission_ack(const mavlink_message_t *msg) send_mission_request(_transfer_partner_sysid, _transfer_partner_compid, _transfer_seq); } + } else if (wpa.type == MAV_MISSION_OPERATION_CANCELLED) { + PX4_DEBUG("WPM: MISSION_ACK CANCELLED, switch to state IDLE"); + switch_to_idle_state(); + _transfer_in_progress = false; + } else if (wpa.type != MAV_MISSION_ACCEPTED) { PX4_WARN("Mission ack result was %d", wpa.type); }