2024-01-06 16:38:58 +01:00

75 lines
1.4 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_IPC
*/
template <typename T>
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 <sta/rtos/queue.tpp>
#endif // STA_RTOS_QUEUE_HPP