40 uint8_t instance_id, uint8_t mailbox_index) {
50constexpr uint32_t
get_base_address(uint8_t type_id, uint8_t system_id, uint8_t instance_id) {
106template<
typename OutputData,
typename OutputTypesTuple,
typename UserRegistry>
110 using BaseType = std::conditional_t<
111 std::is_void_v<OutputData>,
112 std::tuple_element_t<0, OutputTypesTuple>,
115 constexpr uint32_t data_type_id = UserRegistry::template get_message_id<BaseType>();
117 constexpr uint8_t type_id =
static_cast<uint8_t
>(data_type_id & 0xFF);
124template<
typename OutputData,
typename OutputTypesTuple,
typename UserRegistry>
125static constexpr uint32_t
get_mailbox_address(uint8_t system_id, uint8_t instance_id, uint8_t mailbox_index) {
126 uint32_t base = calculate_base_address<OutputData, OutputTypesTuple, UserRegistry>(system_id, instance_id);
127 return base | mailbox_index;
138template<
typename... CommandTypes>
152template<
typename InputType>
170 .send_priority =
static_cast<uint8_t
>(config.
priority),
172 .mailbox_name = config.
name +
"_work"
static constexpr size_t max_message_size
CommRaT - Modern C++ Real-Time Communication Framework.
constexpr uint8_t extract_mailbox_index(uint32_t addr)
Extract mailbox index from full address.
constexpr uint32_t MAILBOX_INDEX_MASK
constexpr uint8_t MAILBOX_INDEX_SHIFT
constexpr uint32_t get_base_address(uint8_t type_id, uint8_t system_id, uint8_t instance_id)
Get base address (type/system/instance only, mailbox_index=0)
constexpr uint32_t encode_address(uint8_t type_id, uint8_t system_id, uint8_t instance_id, uint8_t mailbox_index)
Encode full mailbox address Format: [type_id:8][system_id:8][instance_id:8][mailbox_index:8] Example:...
constexpr uint32_t TYPE_ID_MASK
constexpr uint32_t INSTANCE_ID_MASK
constexpr uint8_t extract_type_id(uint32_t addr)
Extract type ID from address.
constexpr uint32_t SYSTEM_ID_MASK
static constexpr size_t get_data_mailbox_size()
Calculate DATA mailbox size for specific input type.
constexpr uint8_t CMD_MBX_BASE
static constexpr size_t calculate_cmd_mailbox_size()
Calculate CMD mailbox size at compile time Size = max(SystemRegistry messages, Module's Commands<....
constexpr uint8_t extract_system_id(uint32_t addr)
Extract system ID from address.
constexpr uint8_t TYPE_ID_SHIFT
constexpr uint8_t INSTANCE_ID_SHIFT
static constexpr uint32_t calculate_base_address(uint8_t system_id, uint8_t instance_id)
Calculate base mailbox address from output type, system_id, and instance_id New format: [type_id:8][s...
static MailboxConfig createWorkMailboxConfig(const ModuleConfig &config)
Create work mailbox config (for SystemRegistry messages)
static constexpr uint32_t get_mailbox_address(uint8_t system_id, uint8_t instance_id, uint8_t mailbox_index)
Get specific mailbox address with index.
constexpr uint8_t SYSTEM_ID_SHIFT
constexpr uint8_t extract_message_type_from_address(uint32_t base_addr)
Extract message type ID from subscriber base address (for backward compatibility) Now just extracts t...
constexpr uint8_t get_data_mbx_base(uint8_t num_outputs)
Get DATA mailbox base index (after all CMD mailboxes)
constexpr uint8_t extract_instance_id(uint32_t addr)
Extract instance ID from address.