24 std::array<uint8_t, 8>
data{};
26 [[nodiscard]] std::span<const uint8_t>
payload() const noexcept {
27 return {
data.data(),
static_cast<std::size_t
>(
dlc > 8 ? 8 :
dlc)};
38 std::array<uint8_t, 64>
data{};
40 [[nodiscard]] std::span<const uint8_t>
payload() const noexcept {
41 return {
data.data(),
static_cast<std::size_t
>(
len > 64 ? 64 :
len)};
48template <
typename EventVariant>
59 template <
typename TargetEvent = CanFrame>
61 if constexpr (std::is_same_v<TargetEvent, CanFrame>) {
62 _sink.post(EventVariant{frame}, priority);
64 _sink.post(EventVariant{TargetEvent{frame}}, priority);
72 template <
typename TargetEvent = CanFdFrame>
74 if constexpr (std::is_same_v<TargetEvent, CanFdFrame>) {
75 _sink.post(EventVariant{frame}, priority);
77 _sink.post(EventVariant{TargetEvent{frame}}, priority);
Non-allocating type-erased fat pointer handle for lock-free event posting.
Bounded and multi-tier priority MPSC queueing policies.
Non-blocking hardware ISR adapter for CAN/CAN-FD controller interrupts. Ingests hardware mailbox/FIFO...
Definition CanAdapter.hpp:49
void postFromIsr(const CanFdFrame &frame, EventPriority priority=EventPriority::Normal) noexcept
Ingest high-speed CAN-FD frame from hardware interrupt (e.g. STM32 FDCAN1_IT0_IRQHandler).
Definition CanAdapter.hpp:73
void postFromIsr(const CanFrame &frame, EventPriority priority=EventPriority::Normal) noexcept
Ingest standard CAN frame from hardware interrupt (e.g. STM32 CAN_RX_IRQHandler).
Definition CanAdapter.hpp:60
CanIsrAdapter(EventSinkT< EventVariant > sink) noexcept
Definition CanAdapter.hpp:51
Definition CanAdapter.hpp:16
EventPriority
Event priority levels for multi-priority queue policies.
Definition QueuePolicies.hpp:32
ISO 11898-1:2015 CAN-FD flexible data-rate frame structure (up to 64 bytes payload).
Definition CanAdapter.hpp:32
bool errorStateIndicator
ESI: Error State Indicator flag.
Definition CanAdapter.hpp:37
bool isExtended
True if 29-bit extended ID.
Definition CanAdapter.hpp:35
uint8_t len
Data length in bytes (0..64)
Definition CanAdapter.hpp:34
std::array< uint8_t, 64 > data
Payload bytes (up to 64B)
Definition CanAdapter.hpp:38
bool bitRateSwitch
BRS: Bit Rate Switch flag.
Definition CanAdapter.hpp:36
std::span< const uint8_t > payload() const noexcept
Definition CanAdapter.hpp:40
Standard CAN 2.0B classic frame structure (up to 8 bytes payload).
Definition CanAdapter.hpp:19
std::array< uint8_t, 8 > data
Payload bytes.
Definition CanAdapter.hpp:24
bool isRtr
Remote Transmission Request flag.
Definition CanAdapter.hpp:23
uint8_t dlc
Data Length Code (0..8)
Definition CanAdapter.hpp:21
bool isExtended
True if 29-bit extended ID.
Definition CanAdapter.hpp:22
std::span< const uint8_t > payload() const noexcept
Definition CanAdapter.hpp:26