/** * @file * @brief RTOS queue implementation. */ #ifndef STA_RTOS_QUEUE_HPP #define STA_RTOS_QUEUE_HPP #include #include namespace sta { /** * @brief Interface object for using CMSIS RTOS2 queues. * * @tparam Message type * * @ingroup STA_RTOS_IPC */ template class RtosQueue { public: using Message = T; /**< Queue message type */ public: // Default Constructor RtosQueue(); /** * @param handle CMSIS RTOS2 queue handle */ RtosQueue(osMessageQueueId_t handle); /** * @param length The maximum number of elements to be stored in the queue. */ RtosQueue(uint32_t length); /** * @brief Place message in queue. * * @param msg Message object * @param timeout Timeout * @return True on success */ bool put(const Message msg, uint32_t timeout = osWaitForever); /** * @brief Take message from queue. * * @param[out] outMsg Message object destination * @param timeout Timeout * @return True on success */ bool get(Message * outMsg, uint32_t timeout = osWaitForever); /** * @brief Get number of messages in queue. * * @return Number of messages in queue */ uint32_t available() const; private: osMessageQueueId_t handle_; /**< CMSIS RTOS2 queue handle */ }; } // namespace sta #include #endif // STA_RTOS_QUEUE_HPP