mcu_hi3321_watch/kernel/osal/include/schedule/osal_wait.h
2025-05-26 20:15:20 +08:00

173 lines
4.9 KiB
C

/*
* Copyright (c) CompanyNameMagicTag 2021-2022. All rights reserved.
* Description: OS Abstract Layer.
*/
/**
* @defgroup osal_wait osal_wait
*/
#ifndef __OSAL_WAIT_H__
#define __OSAL_WAIT_H__
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
#define OSAL_WAIT_FOREVER 0xFFFFFFFF
#define OSAL_WAIT_CONDITION_TRUE 1
typedef struct {
void *wait;
} osal_wait;
/* return value is a bool type */
typedef int (*osal_wait_condition_func)(const void *param);
/**
* @ingroup osal_wait
* @brief Initialize a waiting queue.
*
* @par Description:
* This API is used to Initialize a waiting queue.
*
* @param wait [out] The wait queue to be initialized.
*
* @par Support System:
* linux liteos freertos.
*/
int osal_wait_init(osal_wait *wait);
/**
* @ingroup osal_wait
* @brief sleep until a condition gets true
*
* @par Description:
* sleep until a condition gets true.
* The process is put to sleep (TASK_INTERRUPTIBLE) until the @func returned true or a signal is received.
* Return value of the @func is checked each time the waitqueue @wait is woken up.
*
* @attention
* wake_up() has to be called after changing any variable that could change the result of the wait condition.
* it is the same as osal_wait_uninterruptible on LiteOS.
* LiteOS does not support this interface, so it is the same as osal_wait_uninterruptible on LiteOS.
*
* @param wait [in] The waitqueue to wait on.
* @param func [in] Then function to be run.
* @param param [in] Param of the function to be run.
*
* @return OSAL_SUCCESS/OSAL_FAILURE.
* In linux, The function will return -ERESTARTSYS if it was interrupted by a signal. liteos
*
* @par Support System:
* linux liteos.
*/
int osal_wait_interruptible(osal_wait *wait, osal_wait_condition_func func, const void *param);
/**
* @ingroup osal_wait
* @brief sleep until a condition gets true
*
* @par Description:
* sleep until a condition gets true.
* The process is put to sleep (TASK_UNINTERRUPTIBLE) until the @func returned true.
* Return value of the @func is checked each time the waitqueue @wait is woken up.
*
* @attention
* wake_up() has to be called after changing any variable that could change the result of the wait condition.
*
* @return OSAL_SUCCESS/OSAL_FAILURE
*
* @par Support System:
* linux liteos freetos.
*/
int osal_wait_uninterruptible(osal_wait *wait, osal_wait_condition_func func, const void *param);
/**
* @ingroup osal_wait
* @brief sleep until a condition gets true or a timeout elapses.
*
* @par Description:
* sleep until a condition gets true or a timeout elapses.
* The process is put to sleep (TASK_INTERRUPTIBLE) until the @func returned true or a signal is received.
* Return value of the @func is checked each time the waitqueue @wait is woken up.
*
* @param wait [in] the waitqueue to wait on.
* @param wait [in] a C expression for the event to wait for.
* @param wait [in] timeout, in ms.
*
* @par Support System:
* linux liteos freertos.
*/
int osal_wait_timeout_interruptible(osal_wait *wait, osal_wait_condition_func func, const void *param,
unsigned long ms);
/**
* @ingroup osal_wait
* @brief sleep until a condition gets true or a timeout elapses.
*
* @par Description:
* sleep until a condition gets true or a timeout elapses.
* The process is put to sleep (TASK_UNINTERRUPTIBLE) until the @func returned true.
* Return value of the @func is checked each time the waitqueue @wait is woken up.
*
* @param wait [in] The waitqueue to wait on.
* @param wait [in] A C expression for the event to wait for.
* @param wait [in] Timeout, in ms.
*
* @par Support System:
* linux liteos.
*/
int osal_wait_timeout_uninterruptible(osal_wait *wait, osal_wait_condition_func func, const void *param,
unsigned long ms);
/**
* @ingroup osal_wait
* @brief wake up threads blocked on a waitqueue.
*
* @par Description:
* Wake-up wait queue,pair to @wait_event.
*
* @param wait [in] The wait to be wake up.
*
* @par Support System:
* linux liteos freertos.
*/
void osal_wait_wakeup(osal_wait *wait); // same as wake_up_all
/**
* @ingroup osal_wait
* @brief wake up threads blocked on a waitqueue.
*
* @par Description:
* Wake-up wait queue,pair to @wait_event_interruptible.
*
* @param wait [in] The wait to be wake up.
*
* @par Support System:
* linux liteos.
*/
void osal_wait_wakeup_interruptible(osal_wait *wait); // same as osal_wait_wakeup on liteos
/**
* @ingroup osal_wait
* @brief to destroy the wait.
*
* @par Description:
* This API is used to destroy the wait.
*
* @param wait [in] The wait to be destroyed.
*
* @attention this api may free memory, wait should be from osal_complete_init.
* @par Support System:
* linux liteos freertos.
*/
void osal_wait_destroy(osal_wait *wait);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif /* __OSAL_WAIT_H__ */