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

97 lines
2.4 KiB
C

/*
* Copyright (c) CompanyNameMagicTag 2021-2022. All rights reserved.
* Description: OS Abstract Layer.
*/
/**
* @defgroup osal_delayedwork osal_delayedwork
*/
#ifndef __OSAL_DELAYWORK_H__
#define __OSAL_DELAYWORK_H__
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
typedef struct osal_delayedwork_ {
void *work;
void (*handler)(struct osal_delayedwork_ *delayedwork);
} osal_delayedwork;
typedef void (*osal_delayedwork_handler)(osal_delayedwork *delayedwork);
/**
* @ingroup osal_delayedwork
* @brief This API is used to initialization of delayedwork.
*
* @par Description:
* This API is used to initialization of delayedwork.
*
* @attention Must be freed with osal_delayedwork_destroy.
*
* @param work [in/out] The delayedwork to be initialized.
*
* @return OSAL_SUCCESS/OSAL_FAILURE
*
* @par Support System:
* linux.
*/
int osal_delayedwork_init(osal_delayedwork *work, osal_delayedwork_handler handler);
/**
* @ingroup osal_delayedwork
* @brief This API is used to destroy the delayedwork.
*
* @par Description:
* This API is used to destroy the delayedwork.
*
* @param work [in] The delayedwork to be destroyed.
*
* @attention this api may free memory, @work should be from osal_delayedwork_init.
*
* @par Support System:
* linux.
*/
void osal_delayedwork_destroy(osal_delayedwork *work);
/**
* @ingroup osal_delayedwork
* @brief put work task in global workqueue after delay.
*
* @par Description:
* put work task in global workqueue after delay.
* After waiting for a given time this puts a job in the kernel-global workqueue.
*
* @param work [in] Job to be done.
* @param timeout [in] Number of jiffies to wait or 0 for immediate execution.
*
* @return OSAL_SUCCESS/OSAL_FAILURE
*
* @par Support System:
* linux.
*/
int osal_delayedwork_schedule(osal_delayedwork *work, int timeout);
/**
* @ingroup osal_delayedwork
* @brief cancel a delayed work and wait for it to finish.
*
* @par Description:
* cancel a delayed work and wait for it to finish.
*
* @param work [in] The delayed work cancel.
*
* @return OSAL_SUCCESS/OSAL_FAILURE
*
* @par Support System:
* linux.
*/
int osal_delayedwork_cancel_sync(osal_delayedwork *work);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif /* __OSAL_DELAYWORK_H__ */