libcortex
Event loop library following a "batteries included" approach
Loading...
Searching...
No Matches
sm.h
1#ifndef CRTX_SM_H
2#define CRTX_SM_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*
9 * Mario Kicherer (dev@kicherer.org)
10 *
11 */
12
13enum crtx_sms_event {
14 CRTX_SMSE_ENTER,
15 CRTX_SMSE_TRIGGER,
16 CRTX_SMSE_LEAVE,
17};
18
19struct crtx_sm;
20struct crtx_sm_state;
21
22typedef int (*crtx_sm_callback)(struct crtx_sm_state *sms, enum crtx_sms_event event);
23typedef int (*crtx_sm_release_callback)(struct crtx_sm *sm);
24
26 char *name;
27
28 crtx_sm_callback enter;
29 crtx_sm_callback trigger;
30 crtx_sm_callback leave;
31
32 struct crtx_sm *sm;
33};
34
35#define CRTX_SMF_RELEASE (1<<0)
36
37struct crtx_sm {
38 struct crtx_sm_state *cur_state;
39
40 _Atomic unsigned int n_schedules;
41 crtx_sm_release_callback release_cb;
42 int flags;
43
44 void *userdata;
45};
46
47int crtx_change_state(struct crtx_sm *sm, struct crtx_sm_state *sms);
48int crtx_release_sm(struct crtx_sm *sm);
49
50#ifdef __cplusplus
51}
52#endif
53
54#endif
Definition sm.h:25
Definition sm.h:37