#pragma once #include "furi_core_types.h" #include "thread.h" #ifdef __cplusplus extern "C" { #endif typedef void FuriSemaphore; /** Allocate semaphore * * @param[in] max_count The maximum count * @param[in] initial_count The initial count * * @return pointer to FuriSemaphore instance */ FuriSemaphore* furi_semaphore_alloc(uint32_t max_count, uint32_t initial_count); /** Free semaphore * * @param instance The pointer to FuriSemaphore instance */ void furi_semaphore_free(FuriSemaphore* instance); /** Acquire semaphore * * @param instance The pointer to FuriSemaphore instance * @param[in] timeout The timeout * * @return The furi status. */ FuriStatus furi_semaphore_acquire(FuriSemaphore* instance, uint32_t timeout); /** Release semaphore * * @param instance The pointer to FuriSemaphore instance * * @return The furi status. */ FuriStatus furi_semaphore_release(FuriSemaphore* instance); /** Get semaphore count * * @param instance The pointer to FuriSemaphore instance * * @return Semaphore count */ uint32_t furi_semaphore_get_count(FuriSemaphore* instance); /** Wait for the semaphore to become available * * @param instance The pointer to FuriSemaphore instance * @param timeout The maximum amount of ticks to wait for the semaphore to become available * * @return True if the semaphore became available. False on timeout. */ bool furi_semaphore_take(FuriSemaphore* instance, TickType_t timeout); /** Wait for the semaphore to become available * * @param instance The pointer to FuriSemaphore instance * * @return True if the semaphore became available. False on timeout. */ bool furi_semaphore_give(FuriSemaphore* instance); #ifdef __cplusplus } #endif