/** * @brief CMSIS RTOS2 queue implementation. */ #ifndef STA_OS2_QUEUE_HPP #define STA_OS2_QUEUE_HPP #include #include namespace sta { template class Os2Queue { public: using Message = T; public: Os2Queue(osMessageQueueId_t * handle); bool put(const Message & msg, uint32_t timeout = osWaitForever); bool get(Message * outMsg, uint32_t timeout = osWaitForever); uint32 available() const; private: osMessageQueueId_t * handle_; }; } // namespace sta namespace sta { template Os2Queue::Os2Queue(osMessageQueueId_t * handle) : handle_{handle} { STA_ASSERT(handle != nullptr); } template bool Os2Queue::put(const Message & msg, uint32_t timeout /* = osWaitForever */) { return (osOK == osMessageQueuePut(*handle_, &msg, 0, timeout)); } template bool Os2Queue::get(Message * outMsg, uint32_t timeout /* = osWaitForever */) { uint8_t prio; return (osOK == osMessageQueueGet(*handle_, outMsg, &prio, timeout)); } template uint32 Os2Queue::available() const { return osMessageQueueGetCount(*handle_); } } // namespace sta #endif // STA_OS2_QUEUE_HPP