oveRTOS C++ API
C++20 RAII wrappers for the oveRTOS C API
Loading...
Searching...
No Matches
eventgroup.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2026 Kamil Lulko <kamil.lulko@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 *
6 * This file is part of oveRTOS.
7 */
8
14#pragma once
15
16#include <ove/eventgroup.h>
17#include <ove/types.hpp>
18#include <ove/error.hpp>
19
20#ifdef CONFIG_OVE_EVENTGROUP
21
22namespace ove
23{
24
38{
39 public:
46 {
47#ifdef CONFIG_OVE_ZERO_HEAP
48 int err = ove_eventgroup_init(&handle_, &storage_);
49#else
50 int err = ove_eventgroup_create(&handle_);
51#endif
52 OVE_STATIC_INIT_ASSERT(err == OVE_OK);
53 }
54
58 ~EventGroup() noexcept
59 {
60 if (!handle_)
61 return;
62#ifdef CONFIG_OVE_ZERO_HEAP
63 ove_eventgroup_deinit(handle_);
64#else
65 ove_eventgroup_destroy(handle_);
66#endif
67 }
68
69 EventGroup(const EventGroup &) = delete;
70 EventGroup &operator=(const EventGroup &) = delete;
71
72#ifdef CONFIG_OVE_ZERO_HEAP
73 EventGroup(EventGroup &&) = delete;
74 EventGroup &operator=(EventGroup &&) = delete;
75#else
80 EventGroup(EventGroup &&other) noexcept : handle_(other.handle_)
81 {
82 other.handle_ = nullptr;
83 }
84
90 EventGroup &operator=(EventGroup &&other) noexcept
91 {
92 if (this != &other) {
93 if (handle_)
94 ove_eventgroup_destroy(handle_);
95 handle_ = other.handle_;
96 other.handle_ = nullptr;
97 }
98 return *this;
99 }
100#endif
101
112 [[nodiscard]] ove_eventbits_t set_bits(ove_eventbits_t bits)
113 {
114 return ove_eventgroup_set_bits(handle_, bits);
115 }
116
126 [[nodiscard]] ove_eventbits_t clear_bits(ove_eventbits_t bits)
127 {
128 return ove_eventgroup_clear_bits(handle_, bits);
129 }
130
140 [[nodiscard]] Result<ove_eventbits_t> wait_bits(ove_eventbits_t bits, uint32_t flags,
141 std::chrono::nanoseconds timeout) noexcept
142 {
143 ove_eventbits_t result = 0;
144 const int rc = ove_eventgroup_wait_bits(handle_, bits, flags,
145 to_timeout_ns(timeout), &result);
146 return from_rc(rc, result);
147 }
148
157 [[nodiscard]] Result<ove_eventbits_t>
158 wait_bits_until(ove_eventbits_t bits, uint32_t flags,
159 steady_clock::time_point deadline) noexcept
160 {
161 ove_eventbits_t result = 0;
162 const int rc = ove_eventgroup_wait_bits_until(handle_, bits, flags,
163 to_deadline_ns(deadline), &result);
164 return from_rc(rc, result);
165 }
166
175 [[nodiscard]] ove_eventbits_t set_bits_from_isr(ove_eventbits_t bits)
176 {
177 return ove_eventgroup_set_bits_from_isr(handle_, bits);
178 }
179
184 ove_eventbits_t get_bits() const
185 {
186 return ove_eventgroup_get_bits(handle_);
187 }
188
193 bool valid() const
194 {
195 return handle_ != nullptr;
196 }
197
202 ove_eventgroup_t handle() const
203 {
204 return handle_;
205 }
206
207 private:
208 ove_eventgroup_t handle_ = nullptr;
209#ifdef CONFIG_OVE_ZERO_HEAP
210 ove_eventgroup_storage_t storage_ = {};
211#endif
212};
213
214} // namespace ove
215
216#endif /* CONFIG_OVE_EVENTGROUP */
RAII wrapper around an oveRTOS event-group (bit-field synchronisation object).
Definition eventgroup.hpp:38
EventGroup & operator=(EventGroup &&other) noexcept
Move-assignment operator — transfers ownership of the kernel handle.
Definition eventgroup.hpp:90
ove_eventbits_t set_bits_from_isr(ove_eventbits_t bits)
Sets one or more event bits from an ISR context.
Definition eventgroup.hpp:175
Result< ove_eventbits_t > wait_bits(ove_eventbits_t bits, uint32_t flags, std::chrono::nanoseconds timeout) noexcept
Waits until the specified event bits are set, or until the timeout expires.
Definition eventgroup.hpp:140
bool valid() const
Returns true if the underlying kernel handle is non-null.
Definition eventgroup.hpp:193
EventGroup()
Constructs and initialises the event group with all bits cleared.
Definition eventgroup.hpp:45
ove_eventgroup_t handle() const
Returns the raw oveRTOS event-group handle.
Definition eventgroup.hpp:202
~EventGroup() noexcept
Destroys the event group, releasing the underlying kernel resource.
Definition eventgroup.hpp:58
ove_eventbits_t get_bits() const
Returns the current value of all event bits without blocking.
Definition eventgroup.hpp:184
Result< ove_eventbits_t > wait_bits_until(ove_eventbits_t bits, uint32_t flags, steady_clock::time_point deadline) noexcept
Deadline-based variant of wait_bits.
Definition eventgroup.hpp:158
ove_eventbits_t clear_bits(ove_eventbits_t bits)
Clears one or more event bits atomically.
Definition eventgroup.hpp:126
ove_eventbits_t set_bits(ove_eventbits_t bits)
Sets one or more event bits atomically.
Definition eventgroup.hpp:112
EventGroup(EventGroup &&other) noexcept
Move constructor — transfers ownership of the kernel handle.
Definition eventgroup.hpp:80
Strong ove::Error type, Result<T> alias, and std::error_code interop for the oveRTOS C++ binding.
Top-level namespace for all oveRTOS C++ abstractions.
Definition app.hpp:20
constexpr uint64_t to_timeout_ns(std::chrono::duration< Rep, Period > d) noexcept
Convert a chrono duration to uint64_t nanoseconds for the C API.
Definition types.hpp:129
constexpr uint64_t to_deadline_ns(steady_clock::time_point tp) noexcept
Convert an ove::steady_clock::time_point to uint64_t nanoseconds for the substrate's _until APIs.
Definition types.hpp:176
Result< void > from_rc(int rc) noexcept
Lifts a substrate rc-code into a Result<void>.
Definition error.hpp:254
std::expected< T, Error > Result
std::expected-based result alias.
Definition error.hpp:139
Common type definitions and concepts for the C++ wrapper layer.