CommRaT 2.0.0
C++20 Real-Time Messaging Framework
Loading...
Searching...
No Matches
address_helpers.hpp File Reference
#include "commrat/module/module_config.hpp"
#include "commrat/mailbox/mailbox.hpp"
#include "commrat/messaging/system/system_registry.hpp"
#include <cstdint>
#include <algorithm>

Go to the source code of this file.

Namespaces

namespace  commrat
 CommRaT - Modern C++ Real-Time Communication Framework.
 

Functions

constexpr uint32_t commrat::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: 0xTTSSIIMM (easy hex debugging)
 
constexpr uint32_t commrat::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 uint8_t commrat::extract_mailbox_index (uint32_t addr)
 Extract mailbox index from full address.
 
constexpr uint8_t commrat::extract_type_id (uint32_t addr)
 Extract type ID from address.
 
constexpr uint8_t commrat::extract_system_id (uint32_t addr)
 Extract system ID from address.
 
constexpr uint8_t commrat::extract_instance_id (uint32_t addr)
 Extract instance ID from address.
 
constexpr uint8_t commrat::get_data_mbx_base (uint8_t num_outputs)
 Get DATA mailbox base index (after all CMD mailboxes)
 
constexpr uint8_t commrat::extract_message_type_from_address (uint32_t base_addr)
 Extract message type ID from subscriber base address (for backward compatibility) Now just extracts type_id field from new encoding.
 
template<typename OutputData , typename OutputTypesTuple , typename UserRegistry >
static constexpr uint32_t commrat::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][system_id:8][instance_id:8][mailbox_index:8] Returns base address with mailbox_index=0.
 
template<typename OutputData , typename OutputTypesTuple , typename UserRegistry >
static constexpr uint32_t commrat::get_mailbox_address (uint8_t system_id, uint8_t instance_id, uint8_t mailbox_index)
 Get specific mailbox address with index.
 
template<typename... CommandTypes>
static constexpr size_t commrat::calculate_cmd_mailbox_size ()
 Calculate CMD mailbox size at compile time Size = max(SystemRegistry messages, Module's Commands<...>)
 
template<typename InputType >
static constexpr size_t commrat::get_data_mailbox_size ()
 Calculate DATA mailbox size for specific input type.
 
static MailboxConfig commrat::createWorkMailboxConfig (const ModuleConfig &config)
 Create work mailbox config (for SystemRegistry messages)
 

Variables

constexpr uint8_t commrat::TYPE_ID_SHIFT = 24
 
constexpr uint8_t commrat::SYSTEM_ID_SHIFT = 16
 
constexpr uint8_t commrat::INSTANCE_ID_SHIFT = 8
 
constexpr uint8_t commrat::MAILBOX_INDEX_SHIFT = 0
 
constexpr uint32_t commrat::TYPE_ID_MASK = 0xFF000000
 
constexpr uint32_t commrat::SYSTEM_ID_MASK = 0x00FF0000
 
constexpr uint32_t commrat::INSTANCE_ID_MASK = 0x0000FF00
 
constexpr uint32_t commrat::MAILBOX_INDEX_MASK = 0x000000FF
 
constexpr uint8_t commrat::CMD_MBX_BASE = 0