From 296c3ad6ef8c874f642ef136e4786d1ab0de5ca5 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Sat, 14 Jul 2018 14:03:40 -0700 Subject: [PATCH] Handle ArduPilot MAV_MISSION_INVALID_SEQUENCE usage --- src/MissionManager/PlanManager.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/MissionManager/PlanManager.cc b/src/MissionManager/PlanManager.cc index f19f1b100c..38292b268d 100644 --- a/src/MissionManager/PlanManager.cc +++ b/src/MissionManager/PlanManager.cc @@ -589,6 +589,14 @@ void PlanManager::_handleMissionAck(const mavlink_message_t& message) return; } + if (_vehicle->apmFirmware() && missionAck.type == MAV_MISSION_INVALID_SEQUENCE) { + // ArduPilot sends these Acks which can happen just due to noisy links causing duplicated requests being responded to. + // As far as I'm concerned this is incorrect protocol implementation but we need to deal with it anyway. So we just + // ignore it and if things really go haywire the timeouts will fire to fail the overall transaction. + qCDebug(PlanManagerLog) << QStringLiteral("_handleMissionAck ArduPilot sending possibly bogus MAV_MISSION_INVALID_SEQUENCE").arg(_planTypeString()) << _planType; + return; + } + // Save the retry ack before calling _checkForExpectedAck since we'll need it to determine what // type of a protocol sequence we are in. AckType_t savedExpectedAck = _expectedAck; -- GitLab