From c7e11f17740b8e6ffd8da7be34da2be072857395 Mon Sep 17 00:00:00 2001 From: Yannick Fuhrer Date: Wed, 8 Nov 2023 09:31:37 +0100 Subject: [PATCH] flightmodes: flag advanced modes accordingly --- src/lib/modes/ui.hpp | 31 +++++++++++++++++++ .../mavlink/streams/AVAILABLE_MODES.hpp | 4 +++ 2 files changed, 35 insertions(+) diff --git a/src/lib/modes/ui.hpp b/src/lib/modes/ui.hpp index 7eb3578b50..c75531e666 100644 --- a/src/lib/modes/ui.hpp +++ b/src/lib/modes/ui.hpp @@ -99,4 +99,35 @@ const char *const nav_state_names[vehicle_status_s::NAVIGATION_STATE_MAX] = { "External 8", }; +/** + * @return returns true for advanced modes + */ +static inline bool isAdvanced(uint8_t nav_state) +{ + switch (nav_state) { + case vehicle_status_s::NAVIGATION_STATE_ALTCTL: return false; + + case vehicle_status_s::NAVIGATION_STATE_POSCTL: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL1: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL2: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL3: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL4: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL5: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL6: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL7: return false; + + case vehicle_status_s::NAVIGATION_STATE_EXTERNAL8: return false; + + } + + return true; +} + } // namespace mode_util diff --git a/src/modules/mavlink/streams/AVAILABLE_MODES.hpp b/src/modules/mavlink/streams/AVAILABLE_MODES.hpp index a96ab5cf7f..d19aeb4613 100644 --- a/src/modules/mavlink/streams/AVAILABLE_MODES.hpp +++ b/src/modules/mavlink/streams/AVAILABLE_MODES.hpp @@ -88,6 +88,10 @@ private: // Set the mode name if not a standard mode available_modes.standard_mode = (uint8_t)mode_util::getStandardModeFromNavState(nav_state); + if (mode_util::isAdvanced(nav_state)) { + available_modes.properties |= MAV_MODE_PROPERTY_ADVANCED; + } + if (available_modes.standard_mode == MAV_STANDARD_MODE_NON_STANDARD) { static_assert(sizeof(available_modes.mode_name) >= sizeof(ExternalModeName::name), "mode name too short");