1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author            Notes
8  * 2023-02-13     zhkag           first version
9  */
10 
11 #ifndef CPUTIMER_H__
12 #define CPUTIMER_H__
13 
14 #include <rtthread.h>
15 
16 struct rt_cputimer
17 {
18     struct rt_object parent; /**< inherit from rt_object */
19     rt_list_t row;
20     void (*timeout_func)(void *parameter);
21     void *parameter;
22     rt_uint64_t init_tick;
23     rt_uint64_t timeout_tick;
24     struct rt_semaphore sem;
25 };
26 typedef struct rt_cputimer *rt_cputimer_t;
27 
28 rt_err_t rt_cputimer_detach(rt_cputimer_t timer);
29 
30 #ifdef RT_USING_HEAP
31 void rt_cputimer_init(rt_cputimer_t timer,
32                       const char *name,
33                       void (*timeout)(void *parameter),
34                       void *parameter,
35                       rt_uint64_t tick,
36                       rt_uint8_t flag);
37 rt_err_t rt_cputimer_delete(rt_cputimer_t timer);
38 #endif
39 
40 rt_err_t rt_cputimer_start(rt_cputimer_t timer);
41 rt_err_t rt_cputimer_stop(rt_cputimer_t timer);
42 rt_err_t rt_cputimer_control(rt_cputimer_t timer, int cmd, void *arg);
43 rt_err_t rt_cputime_sleep(rt_uint64_t tick);
44 rt_err_t rt_cputime_ndelay(rt_uint64_t ns);
45 rt_err_t rt_cputime_udelay(rt_uint64_t us);
46 rt_err_t rt_cputime_mdelay(rt_uint64_t ms);
47 
48 #endif
49