1 /*
2 * \brief Timers and tick
3 * \author Christian Helmuth
4 * \date 2008-10-22
5 *
6 * DDE kit provides a generic timer implementation that enables users to
7 * execute a callback function after a certain period of time. Therefore, DDE
8 * kit starts a timer thread that executes callbacks and keeps track of the
9 * currently running timers.
10 */
11
12 /*
13 * Copyright (C) 2008-2013 Genode Labs GmbH
14 *
15 * This file is part of the Genode OS framework, which is distributed
16 * under the terms of the GNU General Public License version 2.
17 */
18
19 #ifndef _INCLUDE__DDE_KIT__TIMER_H_
20 #define _INCLUDE__DDE_KIT__TIMER_H_
21
22 #include <dde_kit/thread.h>
23
24
25 /**********
26 ** Tick **
27 **********/
28
29 /** Timer tick (global symbol) */
30 extern volatile unsigned long dde_kit_timer_ticks;
31
32 /** Timer tick rate */
33 enum { DDE_KIT_HZ = 100 };
34
35
36 /***********
37 ** Timer **
38 ***********/
39
40 struct dde_kit_timer;
41
42 /**
43 * Add timer event handler
44 *
45 * \param fn function to call on timeout
46 * \param priv private handler token
47 * \param timeout absolute timeout (in DDE kit ticks)
48 *
49 * \return timer reference on success; 0 otherwise
50 *
51 * After the absolute timeout has expired, function fn is called with args as
52 * arguments.
53 */
54 struct dde_kit_timer *dde_kit_timer_add(void (*fn)(void *), void *priv,
55 unsigned long timeout);
56
57 /**
58 * Delete timer
59 *
60 * \param timer timer reference
61 */
62 void dde_kit_timer_del(struct dde_kit_timer *timer);
63
64
65 /**
66 * Schedule absolute timeout
67 *
68 * \param timer timer reference
69 * \param timeout absolute timeout (in DDE kit ticks)
70 */
71 void dde_kit_timer_schedule_absolute(struct dde_kit_timer *timer, unsigned long timeout);
72
73
74 /**
75 * Check whether a timer is pending
76 *
77 * \param timer timer reference
78 */
79 int dde_kit_timer_pending(struct dde_kit_timer *timer);
80
81 /** Init timers and ticks */
82 void dde_kit_timer_init(void(*thread_init)(void *), void *priv);
83
84 #endif /* _INCLUDE__DDE_KIT__TIMER_H_ */