Very Simple Kernel 0.1.0
Loading...
Searching...
No Matches
vsk_Timer.h
Go to the documentation of this file.
1/**
2 * @file
3 */
4#ifndef VSK_TIMER_H
5#define VSK_TIMER_H
6/**
7 * @ingroup vsk
8 * @defgroup vsk_Timer vsk_Timer
9 * @{
10 */
11
12/**
13 * @brief Timer class
14 */
16
17/**
18 * @brief Software timer
19 */
20typedef struct vsk_Timer vsk_Timer_t;
21
22/**
23 * @brief Timer callback
24 */
25typedef void (*vsk_Timer_Callback_t)(void * const obj);
26
27#include "ctb_DList.h"
28#include "ctb_DNode.h"
29#include <stdbool.h>
30#include <stdint.h>
31
32/**
33 * @brief Timer class
34 */
36 ctb_DList_t timers; /**< List of registered timers */
37};
38
39/**
40 * @brief Software timer
41 */
42struct vsk_Timer {
43 vsk_Timer_Class_t * cls; /**< Timer class reference */
44 ctb_DNode_t node; /**< Node to allow timer to be added to a list */
45 uint32_t delayMillis; /**< Initial delay of the timer in milliseconds */
46 uint32_t periodMillis; /**< Period of the timer after the initial delay in milliseconds */
47 vsk_Timer_Callback_t callback; /**< Callback function (called on timer expiration) */
48 void * obj; /**< Object reference to pass to the callback (can be NULL) */
49 uint32_t volatile millisCountDown; /**< Milliseconds until the timer expires */
50 bool volatile isRunning; /**< Timer running state */
51};
52
53/**
54 * @brief Timer class instance
55 */
57
58/**
59 * @brief Initializes the Timer class
60 *
61 * @param cls Timer class reference
62 * @return Initialized Timer class reference
63 */
65
66/**
67 * @brief Propagates the system tick to all timers
68 *
69 * @param cls Timer class reference
70 */
72
73/**
74 * @brief Initializes a timer
75 *
76 * @param self Timer reference
77 * @param delayMillis Initial delay of the timer in milliseconds
78 * @param periodMillis Period of the timer after the initial delay in milliseconds
79 * @param callback Callback function (called on timer expiration)
80 * @param obj Object reference to pass to the callback (can be NULL)
81 * @return Initialized Timer reference
82 */
84 vsk_Timer_t * const self,
85 uint32_t const delayMillis,
86 uint32_t const periodMillis,
87 vsk_Timer_Callback_t const callback,
88 void * const obj
89);
90
91/**
92 * @brief Starts the timer
93 *
94 * @param self Timer reference
95 */
96void vsk_Timer_start(vsk_Timer_t * const self);
97
98/**
99 * @brief Stops the timer
100 *
101 * @param self Timer reference
102 */
103void vsk_Timer_stop(vsk_Timer_t * const self);
104
105/**
106 * @brief Checks if the timer is running
107 *
108 * @param self Timer reference
109 * @return true if the timer is running
110 * @return false if the timer is not running
111 */
112bool vsk_Timer_isRunning(vsk_Timer_t * const self);
113
114/** @} */
115#endif // VSK_TIMER_H
vsk_Timer_Class_t vsk_Timer_Class
Timer class instance.
Definition vsk_Timer.c:6
void vsk_Timer_stop(vsk_Timer_t *const self)
Stops the timer.
Definition vsk_Timer.c:64
vsk_Timer_Class_t * vsk_Timer_Class_init(vsk_Timer_Class_t *const cls)
Initializes the Timer class.
Definition vsk_Timer.c:13
void(* vsk_Timer_Callback_t)(void *const obj)
Timer callback.
Definition vsk_Timer.h:25
bool vsk_Timer_isRunning(vsk_Timer_t *const self)
Checks if the timer is running.
Definition vsk_Timer.c:70
void vsk_Timer_start(vsk_Timer_t *const self)
Starts the timer.
Definition vsk_Timer.c:58
void vsk_Timer_Class_onTick(vsk_Timer_Class_t *const cls)
Propagates the system tick to all timers.
Definition vsk_Timer.c:31
vsk_Timer_t * vsk_Timer_init(vsk_Timer_t *const self, uint32_t const delayMillis, uint32_t const periodMillis, vsk_Timer_Callback_t const callback, void *const obj)
Initializes a timer.
Definition vsk_Timer.c:35
Timer class.
Definition vsk_Timer.h:35
ctb_DList_t timers
Definition vsk_Timer.h:36
Software timer.
Definition vsk_Timer.h:42
ctb_DNode_t node
Definition vsk_Timer.h:44
bool volatile isRunning
Definition vsk_Timer.h:50
uint32_t delayMillis
Definition vsk_Timer.h:45
uint32_t periodMillis
Definition vsk_Timer.h:46
uint32_t volatile millisCountDown
Definition vsk_Timer.h:49
void * obj
Definition vsk_Timer.h:48
vsk_Timer_Callback_t callback
Definition vsk_Timer.h:47
vsk_Timer_Class_t * cls
Definition vsk_Timer.h:43