8#include <px4_msgs/msg/arming_check_reply.hpp>
10namespace px4_ros2::events {
12using EventType = px4_msgs::msg::Event;
14enum class LogLevel : uint8_t {
29enum class LogLevelInternal : uint8_t {
45using LogInternal = LogLevelInternal;
50 : external(external_level), internal(
static_cast<LogInternal
>(external_level))
53 LogLevels(Log external_level, LogInternal internal_level)
54 : external(external_level), internal(internal_level)
58 Log external{Log::Info};
59 LogInternal internal{LogInternal::Info};
65constexpr uint32_t kVal32Const = 0x811c9dc5;
66constexpr uint32_t kPrime32Const = 0x1000193;
67inline constexpr uint32_t hash32Fnv1aConst(
const char*
const str,
68 const uint32_t value = kVal32Const)
noexcept
70 return (str[0] ==
'\0')
72 : hash32Fnv1aConst(&str[1], (value ^
static_cast<uint32_t
>(str[0])) * kPrime32Const);
76inline constexpr void fillEventArguments(uint8_t* buf, T arg)
79 memcpy(buf, &arg,
sizeof(T));
82template <
typename T,
typename... Args>
83inline constexpr void fillEventArguments(uint8_t* buf, T arg, Args... args)
85 fillEventArguments(buf, arg);
86 fillEventArguments(buf +
sizeof(T), args...);
89constexpr unsigned sizeofArguments()
94template <
typename T,
typename... Args>
95constexpr unsigned sizeofArguments(
const T& t,
const Args&... args)
97 return sizeof(T) + sizeofArguments(args...);
106constexpr uint32_t ID(
const char (&name)[N])
109 const uint32_t component_id = 1U << 24;
110 return (0xffffff & util::hash32Fnv1aConst(name)) | component_id;