Commit d663c932 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #4367 from DonLakeFlyer/CmdRetryVersioned

Add version check to command retry
parents ffe6bfd4 73e607b0
......@@ -1877,13 +1877,25 @@ void Vehicle::_sendMavCommandAgain(void)
}
if (_mavCommandRetryCount > 1) {
if (queuedCommand.command == MAV_CMD_START_RX_PAIR) {
// Implementation of this command in all firmwares is incorrect. It does not send Ack so we can't retry.
return;
}
if (px4Firmware()) {
// PX4 stack is inconsistent with repect to sending back an Ack from a COMMAND_LONG, hence we can't support retry logic for it.
return;
// We always let AUTOPILOT_CAPABILITIES go through multiple times even if we don't get acks. This is because
// we really need to get capabilities and version info back over a lossy link.
if (queuedCommand.command != MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES) {
if (px4Firmware()) {
// Older PX4 firmwares are inconsistent with repect to sending back an Ack from a COMMAND_LONG, hence we can't support retry logic for it.
if (_firmwareMajorVersion != versionNotSetValue) {
// If no version set assume lastest master dev build, so acks are suppored
if (_firmwareMajorVersion <= 1 && _firmwareMinorVersion <= 5 && _firmwarePatchVersion <= 3) {
// Acks not supported in this version
return;
}
}
} else {
if (queuedCommand.command == MAV_CMD_START_RX_PAIR) {
// The implementation of this command comes from the IO layer and is shared across stacks. So for other firmwares
// we aren't really sure whether they are correct or not.
return;
}
}
}
qDebug() << "Vehicle::_sendMavCommandAgain retrying command:_mavCommandRetryCount" << queuedCommand.command << _mavCommandRetryCount;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment