#pragma once #include "base.h" #include "thread.h" #ifdef __cplusplus extern "C" { #endif /// Attributes structure for semaphore. typedef struct { const char* name; ///< name of the semaphore uint32_t attr_bits; ///< attribute bits void* cb_mem; ///< memory for control block uint32_t cb_size; ///< size of provided memory for control block } osSemaphoreAttr_t; /// \details Semaphore ID identifies the semaphore. typedef void* osSemaphoreId_t; /// Create and Initialize a Semaphore object. /// \param[in] max_count maximum number of available tokens. /// \param[in] initial_count initial number of available tokens. /// \param[in] attr semaphore attributes; NULL: default values. /// \return semaphore ID for reference by other functions or NULL in case of error. osSemaphoreId_t osSemaphoreNew(uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t* attr); /// Get name of a Semaphore object. /// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. /// \return name as null-terminated string. const char* osSemaphoreGetName(osSemaphoreId_t semaphore_id); /// Acquire a Semaphore token or timeout if no tokens are available. /// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. /// \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. /// \return status code that indicates the execution status of the function. osStatus_t osSemaphoreAcquire(osSemaphoreId_t semaphore_id, uint32_t timeout); /// Release a Semaphore token up to the initial maximum count. /// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. /// \return status code that indicates the execution status of the function. osStatus_t osSemaphoreRelease(osSemaphoreId_t semaphore_id); /// Get current Semaphore token count. /// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. /// \return number of tokens available. uint32_t osSemaphoreGetCount(osSemaphoreId_t semaphore_id); /// Delete a Semaphore object. /// \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. /// \return status code that indicates the execution status of the function. osStatus_t osSemaphoreDelete(osSemaphoreId_t semaphore_id); #ifdef __cplusplus } #endif