mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-30 06:53:33 +08:00
commander: update arming & health protocol, add modes to event hash
This commit is contained in:
+1
-1
Submodule src/lib/events/libevents updated: a8ca26efd6...82dabdb914
@@ -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,
|
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;
|
unsigned total_size = sizeof(EventBufferHeader) + args_size;
|
||||||
EventBufferHeader *header = (EventBufferHeader *)(_event_buffer + _next_buffer_idx);
|
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;
|
header->size = args_size;
|
||||||
_next_buffer_idx += total_size;
|
_next_buffer_idx += total_size;
|
||||||
++_results[_current_result].num_events;
|
++_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;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,27 +238,22 @@ bool Report::report(bool is_armed, bool force)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// send arming summary
|
// 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
|
/* EVENT
|
||||||
* @arg1 chunk_idx
|
* @arg1 chunk_idx
|
||||||
* @arg2 error
|
* @arg2 error
|
||||||
* @arg3 warning
|
* @arg3 warning
|
||||||
* @arg4 can_arm_and_run
|
* @arg4 can_arm
|
||||||
|
* @arg5 can_run
|
||||||
* @type summary
|
* @type summary
|
||||||
* @group arming_check
|
* @group arming_check
|
||||||
*/
|
*/
|
||||||
events::send<uint8_t, events::px4::enums::health_component_t, events::px4::enums::health_component_t,
|
events::send<uint8_t, events::px4::enums::health_component_t, events::px4::enums::health_component_t,
|
||||||
events::px4::enums::navigation_mode_group_t>(events::ID("commander_arming_check_summary"), events::Log::Protocol,
|
events::px4::enums::navigation_mode_group_t, events::px4::enums::navigation_mode_group_t>(
|
||||||
"Arming check summary event", 0, current_results.arming_checks.error, current_results.arming_checks.warning,
|
events::ID("commander_arming_check_summary"), events::Log::Protocol,
|
||||||
can_arm_and_run);
|
"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
|
// send all events
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|||||||
@@ -292,8 +292,10 @@ private:
|
|||||||
void armingCheckFailure(NavModes required_modes, HealthComponentIndex component, events::Log log_level);
|
void armingCheckFailure(NavModes required_modes, HealthComponentIndex component, events::Log log_level);
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
bool addEvent(uint32_t event_id, const events::LogLevels &log_levels, const char *message, Args... args);
|
bool addEvent(uint32_t event_id, const events::LogLevels &log_levels, const char *message, uint32_t modes,
|
||||||
Report::EventBufferHeader *addEventToBuffer(uint32_t event_id, const events::LogLevels &log_levels, unsigned args_size);
|
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);
|
NavModes reportedModes(NavModes required_modes);
|
||||||
|
|
||||||
@@ -360,9 +362,10 @@ void Report::armingCheckFailure(NavModes required_modes, HealthComponentIndex co
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
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");
|
static_assert(args_size <= sizeof(events::EventType::arguments), "Too many arguments");
|
||||||
unsigned total_size = sizeof(EventBufferHeader) + args_size;
|
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;
|
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
|
// 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
|
#ifdef CONSOLE_PRINT_ARMING_CHECK_EVENT
|
||||||
memcpy(&header->message, &message, sizeof(message));
|
memcpy(&header->message, &message, sizeof(message));
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user