From 43c5f14aa054c259004ff9968c2fbf2a64106cde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Wed, 31 Aug 2022 15:35:12 +0200 Subject: [PATCH] commander: update arming & health protocol, add modes to event hash --- src/lib/events/libevents | 2 +- .../HealthAndArmingChecks/Common.cpp | 23 ++++++++----------- .../HealthAndArmingChecks/Common.hpp | 15 +++++++----- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/lib/events/libevents b/src/lib/events/libevents index a8ca26efd6..82dabdb914 160000 --- a/src/lib/events/libevents +++ b/src/lib/events/libevents @@ -1 +1 @@ -Subproject commit a8ca26efd605c5ff774bda756870ecd27d8dcee3 +Subproject commit 82dabdb914d7bd640c281900e2852d0afc074b68 diff --git a/src/modules/commander/HealthAndArmingChecks/Common.cpp b/src/modules/commander/HealthAndArmingChecks/Common.cpp index 6378d6773b..91b1fc3a16 100644 --- a/src/modules/commander/HealthAndArmingChecks/Common.cpp +++ b/src/modules/commander/HealthAndArmingChecks/Common.cpp @@ -74,7 +74,7 @@ void Report::armingCheckFailure(NavModes required_modes, HealthComponentIndex co } Report::EventBufferHeader *Report::addEventToBuffer(uint32_t event_id, const events::LogLevels &log_levels, - unsigned args_size) + uint32_t modes, unsigned args_size) { unsigned total_size = sizeof(EventBufferHeader) + args_size; EventBufferHeader *header = (EventBufferHeader *)(_event_buffer + _next_buffer_idx); @@ -83,7 +83,7 @@ Report::EventBufferHeader *Report::addEventToBuffer(uint32_t event_id, const eve header->size = args_size; _next_buffer_idx += total_size; ++_results[_current_result].num_events; - _results[_current_result].event_id_hash ^= event_id; // very simple hash + _results[_current_result].event_id_hash ^= event_id ^ modes; // very simple hash return header; } @@ -238,27 +238,22 @@ bool Report::report(bool is_armed, bool force) #endif // send arming summary - navigation_mode_group_t can_arm_and_run; - - if (is_armed) { - can_arm_and_run = (navigation_mode_group_t)current_results.arming_checks.can_run; - - } else { - can_arm_and_run = (navigation_mode_group_t)current_results.arming_checks.can_arm; - } /* EVENT * @arg1 chunk_idx * @arg2 error * @arg3 warning - * @arg4 can_arm_and_run + * @arg4 can_arm + * @arg5 can_run * @type summary * @group arming_check */ events::send(events::ID("commander_arming_check_summary"), events::Log::Protocol, - "Arming check summary event", 0, current_results.arming_checks.error, current_results.arming_checks.warning, - can_arm_and_run); + events::px4::enums::navigation_mode_group_t, events::px4::enums::navigation_mode_group_t>( + events::ID("commander_arming_check_summary"), events::Log::Protocol, + "Arming check summary event", 0, current_results.arming_checks.error, current_results.arming_checks.warning, + (navigation_mode_group_t)current_results.arming_checks.can_arm, + (navigation_mode_group_t)current_results.arming_checks.can_run); // send all events int offset = 0; diff --git a/src/modules/commander/HealthAndArmingChecks/Common.hpp b/src/modules/commander/HealthAndArmingChecks/Common.hpp index 6124d2434b..48b2f31cf8 100644 --- a/src/modules/commander/HealthAndArmingChecks/Common.hpp +++ b/src/modules/commander/HealthAndArmingChecks/Common.hpp @@ -292,8 +292,10 @@ private: void armingCheckFailure(NavModes required_modes, HealthComponentIndex component, events::Log log_level); template - bool addEvent(uint32_t event_id, const events::LogLevels &log_levels, const char *message, Args... args); - Report::EventBufferHeader *addEventToBuffer(uint32_t event_id, const events::LogLevels &log_levels, unsigned args_size); + bool addEvent(uint32_t event_id, const events::LogLevels &log_levels, const char *message, uint32_t modes, + Args... args); + Report::EventBufferHeader *addEventToBuffer(uint32_t event_id, const events::LogLevels &log_levels, uint32_t modes, + unsigned args_size); NavModes reportedModes(NavModes required_modes); @@ -360,9 +362,10 @@ void Report::armingCheckFailure(NavModes required_modes, HealthComponentIndex co } template -bool Report::addEvent(uint32_t event_id, const events::LogLevels &log_levels, const char *message, Args... args) +bool Report::addEvent(uint32_t event_id, const events::LogLevels &log_levels, const char *message, uint32_t modes, + Args... args) { - constexpr unsigned args_size = events::util::sizeofArguments(args...); + constexpr unsigned args_size = events::util::sizeofArguments(modes, args...); static_assert(args_size <= sizeof(events::EventType::arguments), "Too many arguments"); unsigned total_size = sizeof(EventBufferHeader) + args_size; @@ -371,9 +374,9 @@ bool Report::addEvent(uint32_t event_id, const events::LogLevels &log_levels, co return false; } - events::util::fillEventArguments(_event_buffer + _next_buffer_idx + sizeof(EventBufferHeader), args...); + events::util::fillEventArguments(_event_buffer + _next_buffer_idx + sizeof(EventBufferHeader), modes, args...); // We split out the part of the code not requiring templating to reduce flash usage a bit - EventBufferHeader *header = addEventToBuffer(event_id, log_levels, args_size); + EventBufferHeader *header = addEventToBuffer(event_id, log_levels, modes, args_size); #ifdef CONSOLE_PRINT_ARMING_CHECK_EVENT memcpy(&header->message, &message, sizeof(message)); #else