100 lines
3.4 KiB
C
100 lines
3.4 KiB
C
/*----------------------------------------------------------------------------
|
|
* Tencent is pleased to support the open source community by making TencentOS
|
|
* available.
|
|
*
|
|
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
|
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
|
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
|
*
|
|
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
|
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
|
* License, except for the third-party components listed below which are
|
|
* subject to different license terms. Your integration of TencentOS into your
|
|
* own projects may require compliance with the BSD 3-Clause License, as well
|
|
* as the other licenses applicable to the third-party components included
|
|
* within TencentOS.
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef _TOS_EVTDRV_TIMER_H_
|
|
#define _TOS_EVTDRV_TIMER_H_
|
|
|
|
#define EVTDRV_TIME_MILLISEC_PER_SEC (1000u)
|
|
|
|
typedef enum evtdrv_timer_option_en {
|
|
EVTDRV_TIMER_OPT_ONESHOT,
|
|
EVTDRV_TIMER_OPT_PERIODIC,
|
|
} evtdrv_timer_opt_t;
|
|
|
|
typedef void (*evtdrv_timer_callback_t)(void *arg);
|
|
|
|
typedef struct evtdrv_timer_st {
|
|
evtdrv_timer_callback_t cb;
|
|
void *cb_arg;
|
|
|
|
k_list_t list;
|
|
evtdrv_tick_t expires;
|
|
evtdrv_tick_t period;
|
|
|
|
evtdrv_timer_opt_t opt;
|
|
} evtdrv_timer_t;
|
|
|
|
typedef struct evtdrv_timer_control_st {
|
|
evtdrv_tick_t next_expires;
|
|
evtdrv_tick_t list;
|
|
} evtdrv_timer_ctl_t;
|
|
|
|
/**
|
|
* @brief Create a timer.
|
|
* Create a timer.
|
|
*
|
|
* @attention
|
|
*
|
|
* @param[in] tmr pointer to the handler of the timer.
|
|
* @param[in] callback callback function called when the timer expires.
|
|
* @param[in] cb_arg argument for the callback.
|
|
* @param[in] opt option for the function call.
|
|
*
|
|
* @return errcode
|
|
* @retval #EVTDRV_ERR_PTR_NULL task_id is invalid.
|
|
* @retval #EVTDRV_ERR_NONE event_flags is not valid for user use.
|
|
*/
|
|
__API__ evtdrv_err_t tos_evtdrv_timer_create(evtdrv_timer_t *tmr,
|
|
evtdrv_timer_callback_t callback,
|
|
void *cb_arg,
|
|
evtdrv_timer_opt_t opt);
|
|
|
|
/**
|
|
* @brief Start a timer.
|
|
* Start the timer to run.
|
|
*
|
|
* @attention None
|
|
*
|
|
* @param[in] tmr pointer to the handler of the timer.
|
|
*
|
|
* @return errcode
|
|
* @retval #EVTDRV_ERR_PTR_NULL tmr is a NULL pointer.
|
|
* @retval #EVTDRV_ERR_TIMER_ALREADY_EXIST tmr is already exist.
|
|
* @retval #EVTDRV_ERR_NONE return successfully.
|
|
*/
|
|
__API__ evtdrv_err_t tos_evtdrv_timer_start(evtdrv_timer_t *tmr, evtdrv_tick_t timeout);
|
|
|
|
/**
|
|
* @brief Stop a timer.
|
|
* Stop the timer from running.
|
|
*
|
|
* @attention None
|
|
*
|
|
* @param[in] tmr pointer to the handler of the timer.
|
|
*
|
|
* @return errcode
|
|
* @retval #EVTDRV_ERR_PTR_NULL tmr is a NULL pointer.
|
|
* @retval #EVTDRV_ERR_TIMER_INACTIVE the timer is not active yet.
|
|
* @retval #EVTDRV_ERR_NONE return successfully.
|
|
*/
|
|
__API__ evtdrv_err_t tos_evtdrv_timer_stop(evtdrv_timer_t *tmr);
|
|
|
|
__KERNEL__ void evtdrv_timer_update(void);
|
|
|
|
#endif /* _TOS_EVTDRV_TIMER_H_ */
|
|
|