16 void operator()(osMessageQueueId_t queue_id) {
17 osMessageQueueDelete(queue_id);
22 std::unique_ptr<std::remove_pointer_t<osMessageQueueId_t>, Deleter>;
26 osMessageQueueAttr_t attr{};
27 attr.attr_bits = attr_bits;
28 queue_id_ = QueueId{osMessageQueueNew(
capacity,
sizeof(T), &attr)};
31 bool push(
const T &value, uint32_t timeout = 0) {
32 return osMessageQueuePut(queue_id_.get(), &value, 0, timeout) == osOK;
35 std::optional<T>
pop(uint32_t timeout = 0) {
37 if (osMessageQueueGet(queue_id_.get(), &value,
nullptr, timeout) != osOK) {
43 void clear() { osMessageQueueReset(queue_id_.get()); }
45 size_t size()
const {
return osMessageQueueGetCount(queue_id_.get()); }
47 size_t capacity()
const {
return osMessageQueueGetCapacity(queue_id_.get()); }