2022-12-02 16:32:59 +01:00

68 lines
1.2 KiB
C++

/**
* @file
* @brief RTOS queue implementation.
*/
#ifndef STA_RTOS_QUEUE_HPP
#define STA_RTOS_QUEUE_HPP
#include <cmsis_os2.h>
#include <cstdint>
namespace sta
{
/**
* @brief Interface object for using CMSIS RTOS2 queues.
*
* @tparam Message type
*
* @ingroup STA_RTOS_API
*/
template <typename T>
class RtosQueue
{
public:
using Message = T; /**< Queue message type */
public:
/**
* @param handle CMSIS RTOS2 queue handle
*/
RtosQueue(osMessageQueueId_t * handle);
/**
* @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 <sta/rtos/queue.tpp>
#endif // STA_RTOS_QUEUE_HPP