17 void operator()(osMessageQueueId_t queue_id) {
18 osMessageQueueDelete(queue_id);
23 std::unique_ptr<std::remove_pointer_t<osMessageQueueId_t>, Deleter>;
27 osMessageQueueAttr_t attr{};
28 attr.attr_bits = attr_bits;
29 queue_id_ = QueueId{osMessageQueueNew(
capacity,
sizeof(T), &attr)};
32 bool push(
const T &value, uint32_t timeout) {
33 return osMessageQueuePut(queue_id_.get(), &value, 0, timeout) == osOK;
36 bool push(
const T &value) {
return push(value, 0); }
38 std::optional<T>
pop(uint32_t timeout) {
40 if (osMessageQueueGet(queue_id_.get(), &value,
nullptr, timeout) != osOK) {
46 std::optional<T>
pop() {
return pop(0); }
48 bool pop(T &value, uint32_t timeout) {
49 if (
auto a =
pop(timeout)) {
56 void clear() { osMessageQueueReset(queue_id_.get()); }
58 size_t size()
const {
return osMessageQueueGetCount(queue_id_.get()); }
60 size_t capacity()
const {
return osMessageQueueGetCapacity(queue_id_.get()); }