Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
IsrSink.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include <utility>
11
12namespace corium::embedded {
13
18template <typename EventSinkType>
20public:
21 constexpr IsrEventSink() noexcept = default;
22
23 constexpr explicit IsrEventSink(EventSinkType sink) noexcept
24 : _sink(sink)
25 {}
26
31 template <typename Event>
32 void postFromIsr(Event&& event, EventPriority priority = EventPriority::Normal) noexcept
33 {
34 _sink.post(std::forward<Event>(event), priority);
35 }
36
40 template <typename Event>
41 void postHighPriorityFromIsr(Event&& event) noexcept
42 {
43 _sink.postHighPriority(std::forward<Event>(event));
44 }
45
47 template <typename Event>
48 void tryPostFromIsr(Event&& event, EventPriority priority = EventPriority::Normal) noexcept
49 {
50 _sink.post(std::forward<Event>(event), priority);
51 }
52
54 [[nodiscard]] constexpr EventSinkType& sink() noexcept
55 {
56 return _sink;
57 }
58
59 [[nodiscard]] constexpr const EventSinkType& sink() const noexcept
60 {
61 return _sink;
62 }
63
64private:
65 EventSinkType _sink{};
66};
67
69template <typename EventSinkType>
70[[nodiscard]] constexpr auto makeIsrSink(EventSinkType sink) noexcept
71{
72 return IsrEventSink<EventSinkType>(sink);
73}
74
75} // namespace corium::embedded
Bounded and multi-tier priority MPSC queueing policies.
Lightweight, zero-overhead wrapper around EventSink explicitly tailored for Hardware ISR handlers....
Definition IsrSink.hpp:19
void postFromIsr(Event &&event, EventPriority priority=EventPriority::Normal) noexcept
Post an event safely from hardware ISR context.
Definition IsrSink.hpp:32
constexpr const EventSinkType & sink() const noexcept
Definition IsrSink.hpp:59
constexpr EventSinkType & sink() noexcept
Access underlying EventSink handle.
Definition IsrSink.hpp:54
void tryPostFromIsr(Event &&event, EventPriority priority=EventPriority::Normal) noexcept
Post an event from ISR context.
Definition IsrSink.hpp:48
void postHighPriorityFromIsr(Event &&event) noexcept
Post a high-priority emergency or hardware interrupt event from ISR context.
Definition IsrSink.hpp:41
constexpr IsrEventSink() noexcept=default
Definition CanAdapter.hpp:16
constexpr auto makeIsrSink(EventSinkType sink) noexcept
Helper function to construct an IsrEventSink from an EventSink handle.
Definition IsrSink.hpp:70
EventPriority
Event priority levels for multi-priority queue policies.
Definition QueuePolicies.hpp:32
DefaultEvents Event
Alias for DefaultEvents.
Definition Events.hpp:65