2023-09-22 16:54:20 +02:00

47 lines
959 B
C++

#ifndef STA_RTOS_QUEUE_TPP
#define STA_RTOS_QUEUE_TPP
#ifndef STA_RTOS_QUEUE_HPP
# error "Internal header. Use <sta/rtos/queue.hpp> instead."
#endif // !STA_RTOS_QUEUE_HPP
#include <sta/debug/assert.hpp>
namespace sta
{
template <typename T>
RtosQueue<T>::RtosQueue()
{
}
template <typename T>
RtosQueue<T>::RtosQueue(osMessageQueueId_t handle)
: handle_{handle}
{
STA_ASSERT(handle != nullptr);
}
template <typename T>
bool RtosQueue<T>::put(const Message & msg, uint32_t timeout /* = osWaitForever */)
{
return (osOK == osMessageQueuePut(handle_, &msg, 0, timeout));
}
template <typename T>
bool RtosQueue<T>::get(Message * outMsg, uint32_t timeout /* = osWaitForever */)
{
uint8_t prio;
return (osOK == osMessageQueueGet(handle_, outMsg, &prio, timeout));
}
template <typename T>
uint32_t RtosQueue<T>::available() const
{
return osMessageQueueGetCount(handle_);
}
} // namespace sta
#endif // STA_RTOS_QUEUE_TPP