Very Simple Kernel 0.1.0
Loading...
Searching...
No Matches
vsk_Task.h
Go to the documentation of this file.
1/**
2 * @file
3 */
4#ifndef VSK_TASK_H
5#define VSK_TASK_H
6/**
7 * @ingroup vsk
8 * @defgroup vsk_Task vsk_Task
9 * @{
10 */
11
12/**
13 * @brief Task class
14 */
16
17/**
18 * @brief On start callback
19 */
20typedef void (*vsk_Task_Class_OnStart_t)(void);
21
22/**
23 * @brief On idle callback
24 */
25typedef void (*vsk_Task_Class_OnIdle_t)(void);
26
27/**
28 * @brief Task
29 */
30typedef struct vsk_Task vsk_Task_t;
31
32/**
33 * @brief Task operation
34 */
35typedef void (*vsk_Task_Operation_t)(void * const obj);
36
37#include "ctb_DList.h"
38#include "vsk_Task.h"
39#include <stdbool.h>
40#include <stdint.h>
41
42/**
43 * @brief Task class
44 */
46 ctb_DList_t tasks; /**< List of registered tasks */
47 vsk_Task_Class_OnStart_t onStart; /**< Called on task scheduler start */
48 vsk_Task_Class_OnIdle_t onIdle; /**< Called when the system is idle */
49};
50
51/**
52 * @brief Task state
53 */
54typedef enum {
55 vsk_Task_State_suspended, /**< Task is suspended */
56 vsk_Task_State_ready, /**< Task is ready */
57 vsk_Task_State_running /**< Task is running */
59
60/**
61 * @brief Task
62 */
63struct vsk_Task {
64 vsk_Task_Class_t * cls; /**< Task class reference */
65 ctb_DNode_t node; /**< Node to allow task to be added to a list */
66 vsk_Task_Operation_t operation; /**< Task operation */
67 void * obj; /**< Object reference to pass to the callback (can be NULL) */
68 vsk_Task_State_t state; /**< Task state */
69 uint32_t lastStartTimeMillis; /**< Last start time in milliseconds */
70 uint32_t maxRunTimeMillis; /**< Maximum run time in milliseconds */
71 uint32_t minPeriodMillis; /**< Minimum period in milliseconds */
72 uint32_t cpuLoad; /**< CPU load in percent */
73};
74
75/**
76 * @brief Task class instance
77 */
79
80/**
81 * @brief Initializes the Task class
82 *
83 * @param cls Task class reference
84 * @param onStart On start callback
85 * @param onIdle On idle callback
86 * @return Initialized Task class reference
87 */
89 vsk_Task_Class_t * const cls,
90 vsk_Task_Class_OnStart_t const onStart,
91 vsk_Task_Class_OnIdle_t const onIdle
92);
93
94/**
95 * @brief Starts the scheduler
96 *
97 * @param cls Task class reference
98 */
100
101/**
102 * @brief Initializes a task
103 *
104 * @param self Task reference
105 * @param operation Task operation
106 * @param obj Object reference to pass to the callback (can be NULL)
107 * @return Initialized Task reference
108 */
110 vsk_Task_t * const self,
111 vsk_Task_Operation_t const operation,
112 void * const obj
113);
114
115/**
116 * @brief Activates a task
117 *
118 * @param self Task reference
119 */
120void vsk_Task_activate(vsk_Task_t * const self);
121
122/**
123 * @brief Suspends a task
124 *
125 * @param self Task reference
126 */
127void vsk_Task_suspend(vsk_Task_t * const self);
128
129/** @} */
130#endif // VSK_TASK_H
vsk_Task_Class_t * vsk_Task_Class_init(vsk_Task_Class_t *const cls, vsk_Task_Class_OnStart_t const onStart, vsk_Task_Class_OnIdle_t const onIdle)
Initializes the Task class.
Definition vsk_Task.c:14
void vsk_Task_activate(vsk_Task_t *const self)
Activates a task.
Definition vsk_Task.c:109
void vsk_Task_suspend(vsk_Task_t *const self)
Suspends a task.
Definition vsk_Task.c:123
void(* vsk_Task_Class_OnStart_t)(void)
On start callback.
Definition vsk_Task.h:20
vsk_Task_Class_t vsk_Task_Class
Task class instance.
Definition vsk_Task.c:6
vsk_Task_t * vsk_Task_init(vsk_Task_t *const self, vsk_Task_Operation_t const operation, void *const obj)
Initializes a task.
Definition vsk_Task.c:54
vsk_Task_State_t
Task state.
Definition vsk_Task.h:54
void(* vsk_Task_Class_OnIdle_t)(void)
On idle callback.
Definition vsk_Task.h:25
void(* vsk_Task_Operation_t)(void *const obj)
Task operation.
Definition vsk_Task.h:35
void vsk_Task_Class_startScheduler(vsk_Task_Class_t *const cls)
Starts the scheduler.
Definition vsk_Task.c:30
@ vsk_Task_State_ready
Definition vsk_Task.h:56
@ vsk_Task_State_suspended
Definition vsk_Task.h:55
@ vsk_Task_State_running
Definition vsk_Task.h:57
Task class.
Definition vsk_Task.h:45
vsk_Task_Class_OnStart_t onStart
Definition vsk_Task.h:47
ctb_DList_t tasks
Definition vsk_Task.h:46
vsk_Task_Class_OnIdle_t onIdle
Definition vsk_Task.h:48
Task.
Definition vsk_Task.h:63
ctb_DNode_t node
Definition vsk_Task.h:65
uint32_t maxRunTimeMillis
Definition vsk_Task.h:70
uint32_t cpuLoad
Definition vsk_Task.h:72
vsk_Task_Class_t * cls
Definition vsk_Task.h:64
void * obj
Definition vsk_Task.h:67
vsk_Task_State_t state
Definition vsk_Task.h:68
vsk_Task_Operation_t operation
Definition vsk_Task.h:66
uint32_t lastStartTimeMillis
Definition vsk_Task.h:69
uint32_t minPeriodMillis
Definition vsk_Task.h:71