RTOS Wrapper
API reference
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
OsQueue< MessageType, kCapacity > Class Template Reference

Fixed-capacity, eager-init MPMC queue of trivially-copyable items. More...

#include <OsQueue.h>

Public Member Functions

 OsQueue (const char *queueName) noexcept
 Construct and create the underlying RTOS queue eagerly.
 
 OsQueue (const OsQueue &)=delete
 
OsQueue & operator= (const OsQueue &)=delete
 
 ~OsQueue () noexcept
 
bool IsValid () const noexcept
 True if the underlying RTOS queue was created successfully.
 
bool Send (const MessageType &message, uint32_t timeout_ms=UINT32_MAX) noexcept
 Send a message; blocks up to timeout_ms.
 
bool Receive (MessageType &out, uint32_t timeout_ms=UINT32_MAX) noexcept
 Receive a message; blocks up to timeout_ms.
 

Static Public Member Functions

static constexpr size_t Capacity () noexcept
 Compile-time capacity in elements.
 

Static Private Member Functions

static OS_Ulong ToTicks (uint32_t timeout_ms) noexcept
 

Private Attributes

const char * name_
 
bool created_ {false}
 
OS_Queue queue_ {}
 
uint8_t storage_ [kStoreBytes]
 

Static Private Attributes

static constexpr size_t kItemWords = (sizeof(MessageType) + sizeof(uint32_t) - 1U) / sizeof(uint32_t)
 Item size in 32-bit words, as the kernel queue stores it.
 
static constexpr size_t kStoreBytes
 Backing storage the backend asks for (at least one byte, so the array is never empty).
 

Detailed Description

template<typename MessageType, size_t kCapacity>
class OsQueue< MessageType, kCapacity >

Fixed-capacity, eager-init MPMC queue of trivially-copyable items.

Template Parameters
MessageTypeElement type (must be trivially copyable; passed by value through the underlying queue).
kCapacityMaximum number of pending elements.

Constructor & Destructor Documentation

◆ OsQueue() [1/2]

template<typename MessageType , size_t kCapacity>
OsQueue< MessageType, kCapacity >::OsQueue ( const char *  queueName)
inlineexplicitnoexcept

Construct and create the underlying RTOS queue eagerly.

◆ OsQueue() [2/2]

template<typename MessageType , size_t kCapacity>
OsQueue< MessageType, kCapacity >::OsQueue ( const OsQueue< MessageType, kCapacity > &  )
delete

◆ ~OsQueue()

template<typename MessageType , size_t kCapacity>
OsQueue< MessageType, kCapacity >::~OsQueue ( )
inlinenoexcept

Member Function Documentation

◆ Capacity()

template<typename MessageType , size_t kCapacity>
static constexpr size_t OsQueue< MessageType, kCapacity >::Capacity ( )
inlinestaticconstexprnoexcept

Compile-time capacity in elements.

◆ IsValid()

template<typename MessageType , size_t kCapacity>
bool OsQueue< MessageType, kCapacity >::IsValid ( ) const
inlinenoexcept

True if the underlying RTOS queue was created successfully.

◆ operator=()

template<typename MessageType , size_t kCapacity>
OsQueue & OsQueue< MessageType, kCapacity >::operator= ( const OsQueue< MessageType, kCapacity > &  )
delete

◆ Receive()

template<typename MessageType , size_t kCapacity>
bool OsQueue< MessageType, kCapacity >::Receive ( MessageType &  out,
uint32_t  timeout_ms = UINT32_MAX 
)
inlinenoexcept

Receive a message; blocks up to timeout_ms.

Returns
true on success, false on timeout / failure.

◆ Send()

template<typename MessageType , size_t kCapacity>
bool OsQueue< MessageType, kCapacity >::Send ( const MessageType &  message,
uint32_t  timeout_ms = UINT32_MAX 
)
inlinenoexcept

Send a message; blocks up to timeout_ms.

Returns
true on success, false on timeout / failure.

◆ ToTicks()

template<typename MessageType , size_t kCapacity>
static OS_Ulong OsQueue< MessageType, kCapacity >::ToTicks ( uint32_t  timeout_ms)
inlinestaticprivatenoexcept

Member Data Documentation

◆ created_

template<typename MessageType , size_t kCapacity>
bool OsQueue< MessageType, kCapacity >::created_ {false}
private

◆ kItemWords

template<typename MessageType , size_t kCapacity>
constexpr size_t OsQueue< MessageType, kCapacity >::kItemWords = (sizeof(MessageType) + sizeof(uint32_t) - 1U) / sizeof(uint32_t)
staticconstexprprivate

Item size in 32-bit words, as the kernel queue stores it.

◆ kStoreBytes

template<typename MessageType , size_t kCapacity>
constexpr size_t OsQueue< MessageType, kCapacity >::kStoreBytes
staticconstexprprivate
Initial value:
=
(OS_QUEUE_STORE_BYTES(kItemWords, kCapacity) > 0U) ? OS_QUEUE_STORE_BYTES(kItemWords, kCapacity) : 1U
static constexpr size_t kItemWords
Item size in 32-bit words, as the kernel queue stores it.
Definition OsQueue.h:102
#define OS_QUEUE_STORE_BYTES(item_words, length)
Definition os_cmsis.h:284

Backing storage the backend asks for (at least one byte, so the array is never empty).

◆ name_

template<typename MessageType , size_t kCapacity>
const char* OsQueue< MessageType, kCapacity >::name_
private

◆ queue_

template<typename MessageType , size_t kCapacity>
OS_Queue OsQueue< MessageType, kCapacity >::queue_ {}
private

◆ storage_

template<typename MessageType , size_t kCapacity>
uint8_t OsQueue< MessageType, kCapacity >::storage_[kStoreBytes]
private

The documentation for this class was generated from the following file: