diff --git a/src/mavsdk/core/mavlink_parameter_cache.cpp b/src/mavsdk/core/mavlink_parameter_cache.cpp index 64c67270b..8e8dae2af 100644 --- a/src/mavsdk/core/mavlink_parameter_cache.cpp +++ b/src/mavsdk/core/mavlink_parameter_cache.cpp @@ -138,6 +138,19 @@ bool MavlinkParameterCache::exists(uint16_t param_index) const return it != _all_params.end(); } +uint16_t MavlinkParameterCache::missing_count(uint16_t count) const +{ + uint16_t missing = 0; + + for (uint16_t i = 0; i < count; ++i) { + if (!exists(i)) { + ++missing; + } + } + + return missing; +} + std::optional MavlinkParameterCache::next_missing_index(uint16_t count) { // Extended doesn't matter here because we use this function in the sender diff --git a/src/mavsdk/core/mavlink_parameter_cache.h b/src/mavsdk/core/mavlink_parameter_cache.h index 12c118dde..a5909b8cd 100644 --- a/src/mavsdk/core/mavlink_parameter_cache.h +++ b/src/mavsdk/core/mavlink_parameter_cache.h @@ -2,6 +2,7 @@ #include "param_value.h" +#include #include #include #include @@ -46,6 +47,8 @@ class MavlinkParameterCache { [[nodiscard]] std::optional next_missing_index(uint16_t count); + [[nodiscard]] uint16_t missing_count(uint16_t count) const; + void print_missing(uint16_t count); void clear(); diff --git a/src/mavsdk/core/mavlink_parameter_client.cpp b/src/mavsdk/core/mavlink_parameter_client.cpp index ea4a4ae85..83561d9f3 100644 --- a/src/mavsdk/core/mavlink_parameter_client.cpp +++ b/src/mavsdk/core/mavlink_parameter_client.cpp @@ -826,6 +826,8 @@ void MavlinkParameterClient::process_param_value(const mavlink_message_t& messag assert(false); } + LogInfo() << "Requesting " << _param_cache.missing_count() << " parameters missed during initial burst."; + if (_parameter_debugging) { LogDebug() << "Requesting missing parameter " << (int)maybe_next_missing_index.value();