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
19#ifdef CONFIG_OVE_EVENTGROUP
20
21namespace ove {
22
36public:
43#ifdef CONFIG_OVE_ZERO_HEAP
44 int err = ove_eventgroup_init(&handle_, &storage_);
45#else
46 int err = ove_eventgroup_create(&handle_);
47#endif
48 OVE_STATIC_INIT_ASSERT(err == OVE_OK);
49 }
50
55 if (!handle_) return;
56#ifdef CONFIG_OVE_ZERO_HEAP
57 ove_eventgroup_deinit(handle_);
58#else
59 ove_eventgroup_destroy(handle_);
60#endif
61 }
62
63 EventGroup(const EventGroup &) = delete;
64 EventGroup &operator=(const EventGroup &) = delete;
65
66#ifdef CONFIG_OVE_ZERO_HEAP
67 EventGroup(EventGroup &&) = delete;
68 EventGroup &operator=(EventGroup &&) = delete;
69#else
74 EventGroup(EventGroup &&other) noexcept : handle_(other.handle_) {
75 other.handle_ = nullptr;
76 }
77
83 EventGroup &operator=(EventGroup &&other) noexcept {
84 if (this != &other) {
85 if (handle_) ove_eventgroup_destroy(handle_);
86 handle_ = other.handle_;
87 other.handle_ = nullptr;
88 }
89 return *this;
90 }
91#endif
92
98 ove_eventbits_t set_bits(ove_eventbits_t bits) {
99 return ove_eventgroup_set_bits(handle_, bits);
100 }
101
107 ove_eventbits_t clear_bits(ove_eventbits_t bits) {
108 return ove_eventgroup_clear_bits(handle_, bits);
109 }
110
120 [[nodiscard]] int wait_bits(ove_eventbits_t bits,
121 uint32_t flags,
122 uint32_t timeout_ms,
123 ove_eventbits_t *result) {
124 return ove_eventgroup_wait_bits(handle_, bits, flags,
125 timeout_ms, result);
126 }
127
133 ove_eventbits_t set_bits_from_isr(ove_eventbits_t bits) {
134 return ove_eventgroup_set_bits_from_isr(handle_, bits);
135 }
136
141 ove_eventbits_t get_bits() const {
142 return ove_eventgroup_get_bits(handle_);
143 }
144
149 bool valid() const { return handle_ != nullptr; }
150
155 ove_eventgroup_t handle() const { return handle_; }
156
157private:
158 ove_eventgroup_t handle_ = nullptr;
159#ifdef CONFIG_OVE_ZERO_HEAP
160 ove_eventgroup_storage_t storage_ = {};
161#endif
162};
163
164} // namespace ove
165
166#endif /* CONFIG_OVE_EVENTGROUP */
RAII wrapper around an oveRTOS event-group (bit-field synchronisation object).
Definition eventgroup.hpp:35
int wait_bits(ove_eventbits_t bits, uint32_t flags, uint32_t timeout_ms, ove_eventbits_t *result)
Waits until the specified event bits are set, or until the timeout expires.
Definition eventgroup.hpp:120
EventGroup & operator=(EventGroup &&other) noexcept
Move-assignment operator — transfers ownership of the kernel handle.
Definition eventgroup.hpp:83
ove_eventbits_t set_bits_from_isr(ove_eventbits_t bits)
Sets one or more event bits from an ISR context.
Definition eventgroup.hpp:133
bool valid() const
Returns true if the underlying kernel handle is non-null.
Definition eventgroup.hpp:149
EventGroup()
Constructs and initialises the event group with all bits cleared.
Definition eventgroup.hpp:42
ove_eventgroup_t handle() const
Returns the raw oveRTOS event-group handle.
Definition eventgroup.hpp:155
ove_eventbits_t get_bits() const
Returns the current value of all event bits without blocking.
Definition eventgroup.hpp:141
ove_eventbits_t clear_bits(ove_eventbits_t bits)
Clears one or more event bits atomically.
Definition eventgroup.hpp:107
ove_eventbits_t set_bits(ove_eventbits_t bits)
Sets one or more event bits atomically.
Definition eventgroup.hpp:98
EventGroup(EventGroup &&other) noexcept
Move constructor — transfers ownership of the kernel handle.
Definition eventgroup.hpp:74
~EventGroup()
Destroys the event group, releasing the underlying kernel resource.
Definition eventgroup.hpp:54
Top-level namespace for all oveRTOS C++ abstractions.
Definition app.hpp:19
Common type definitions and concepts for the C++ wrapper layer.