/**
 * @file hal_semaphore.h
 * @brief 信号量 HAL 接口
 */

#ifndef HAL_SEMAPHORE_H
#define HAL_SEMAPHORE_H

#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/** 信号量句柄 */
typedef void *hal_sem_t;

#define HAL_SEM_WAIT_FOREVER  ((uint32_t)0xFFFFFFFF)  /* 无限等待 */

/**
 * @brief 创建计数信号量
 * @param initial_count 初始计数
 */
hal_sem_t hal_sem_create(uint32_t initial_count);

/**
 * @brief 等待信号量（阻塞）
 * @param timeout_ms 超时毫秒数，HAL_SEM_WAIT_FOREVER 表示永久等待
 * @return 0 成功，负值超时或失败
 */
int hal_sem_wait(hal_sem_t sem, uint32_t timeout_ms);

/** @brief 释放信号量 */
int hal_sem_post(hal_sem_t sem);

/** @brief 销毁信号量 */
void hal_sem_destroy(hal_sem_t sem);

#ifdef __cplusplus
}
#endif

#endif /* HAL_SEMAPHORE_H */
