stm32rcos
読み取り中…
検索中…
一致する文字列を見つけられません
queue.hpp
[詳解]
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <memory>
6#include <optional>
7#include <type_traits>
8
9#include <cmsis_os2.h>
10
11namespace stm32rcos {
12namespace core {
13
14template <class T> class Queue {
15private:
16 struct Deleter {
17 void operator()(osMessageQueueId_t queue_id) {
18 osMessageQueueDelete(queue_id);
19 }
20 };
21
22 using QueueId =
23 std::unique_ptr<std::remove_pointer_t<osMessageQueueId_t>, Deleter>;
24
25public:
26 Queue(size_t capacity, uint32_t attr_bits = 0) {
27 osMessageQueueAttr_t attr{};
28 attr.attr_bits = attr_bits;
29 queue_id_ = QueueId{osMessageQueueNew(capacity, sizeof(T), &attr)};
30 }
31
32 bool push(const T &value, uint32_t timeout) {
33 return osMessageQueuePut(queue_id_.get(), &value, 0, timeout) == osOK;
34 }
35
36 bool push(const T &value) { return push(value, 0); }
37
38 std::optional<T> pop(uint32_t timeout) {
39 T value;
40 if (osMessageQueueGet(queue_id_.get(), &value, nullptr, timeout) != osOK) {
41 return std::nullopt;
42 }
43 return value;
44 }
45
46 std::optional<T> pop() { return pop(0); }
47
48 bool pop(T &value, uint32_t timeout) {
49 if (auto a = pop(timeout)) {
50 value = *a;
51 return true;
52 }
53 return false;
54 }
55
56 void clear() { osMessageQueueReset(queue_id_.get()); }
57
58 size_t size() const { return osMessageQueueGetCount(queue_id_.get()); }
59
60 size_t capacity() const { return osMessageQueueGetCapacity(queue_id_.get()); }
61
62private:
63 QueueId queue_id_;
64};
65
66} // namespace core
67} // namespace stm32rcos
std::optional< T > pop(uint32_t timeout)
Definition queue.hpp:38
bool pop(T &value, uint32_t timeout)
Definition queue.hpp:48
bool push(const T &value)
Definition queue.hpp:36
Queue(size_t capacity, uint32_t attr_bits=0)
Definition queue.hpp:26
void clear()
Definition queue.hpp:56
std::optional< T > pop()
Definition queue.hpp:46
size_t size() const
Definition queue.hpp:58
size_t capacity() const
Definition queue.hpp:60
bool push(const T &value, uint32_t timeout)
Definition queue.hpp:32
Definition mutex.hpp:10
Definition mutex.hpp:9