23template <
size_t MaxRxSize = 32>
28 std::array<uint8_t, MaxRxSize>
rxData{};
30 [[nodiscard]] std::span<const uint8_t>
payload() const noexcept {
38template <
typename EventVariant>
50 template <
typename TargetEvent = SpiFrame<32>,
size_t MaxRxSize = 32>
52 if constexpr (std::is_same_v<TargetEvent, SpiFrame<MaxRxSize>>) {
53 m_sink.post(EventVariant{frame}, priority);
55 m_sink.post(EventVariant{TargetEvent{frame}}, priority);
65 template <
typename TargetEvent = SpiFrame<32>>
68 std::span<const uint8_t> rxBytes,
74 frame.status = status;
75 frame.length =
static_cast<uint16_t
>(rxBytes.size() > 32 ? 32 : rxBytes.size());
76 std::memcpy(frame.rxData.data(), rxBytes.data(), frame.length);
78 if constexpr (std::is_same_v<TargetEvent, SpiFrame<32>>) {
79 m_sink.post(EventVariant{frame}, priority);
81 m_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 SPI controllers and DMA completion interrupts....
Definition SpiAdapter.hpp:39
void postBufferFromIsr(uint8_t csId, std::span< const uint8_t > rxBytes, uint8_t status=0, EventPriority priority=EventPriority::Normal) noexcept
Ingest raw SPI RX bytes from a DMA buffer into a typed event and post into sink.
Definition SpiAdapter.hpp:66
void postFromIsr(const SpiFrame< MaxRxSize > &frame, EventPriority priority=EventPriority::Normal) noexcept
Post an SPI frame directly from ISR context into the event sink.
Definition SpiAdapter.hpp:51
SpiIsrAdapter(EventSinkT< EventVariant > sink) noexcept
Definition SpiAdapter.hpp:41
Definition CanAdapter.hpp:16
EventPriority
Event priority levels for multi-priority queue policies.
Definition QueuePolicies.hpp:32
Fixed-capacity SPI transfer frame structure for zero-heap ISR and DMA ingestion.
Definition SpiAdapter.hpp:24
uint16_t length
Number of valid received bytes.
Definition SpiAdapter.hpp:26
std::array< uint8_t, MaxRxSize > rxData
Static receive buffer.
Definition SpiAdapter.hpp:28
uint8_t chipSelectId
Chip-select / device channel identifier.
Definition SpiAdapter.hpp:25
uint8_t status
Hardware status flags (0: Success, 1: Error/Timeout)
Definition SpiAdapter.hpp:27
std::span< const uint8_t > payload() const noexcept
Definition SpiAdapter.hpp:30