ICARUS OS (Intelligent Cooperative Architecture for Real-time Unified Systems) 0.1.0
Preemptive Real-Time Operating System for ARM Cortex-M7
Loading...
Searching...
No Matches
event.h
Go to the documentation of this file.
1
18#ifndef ICARUS_EVENT_H
19#define ICARUS_EVENT_H
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#include <stdint.h>
26#include <stdbool.h>
27
28/* ---- Severity levels ---------------------------------------------------- */
29
36
37/* ---- Sizing ------------------------------------------------------------- */
38
39#ifndef EVENT_MOD_MAX
40#define EVENT_MOD_MAX 16
41#endif
42
43#ifndef EVENT_RING_SIZE
44#define EVENT_RING_SIZE 32
45#endif
46
47/* ---- Event entry: 4B header + 12B payload = 16B ------------------------- */
48
49typedef struct {
50 uint8_t module_id;
51 uint8_t severity; /* event_severity_t */
52 uint16_t event_id;
53 uint8_t payload[12];
54} __attribute__((packed)) event_entry_t;
55
56#ifndef SKIP_STATIC_ASSERTS
57_Static_assert(sizeof(event_entry_t) == 16, "event_entry_t must be 16 bytes");
58#endif
59
60/* ---- Public API --------------------------------------------------------- */
61
66void event_init(void);
67
78void os_event(uint8_t module_id, event_severity_t severity, uint16_t event_id,
79 const void *payload, uint8_t payload_len);
80
85void event_set_squelch(uint8_t module_id, event_severity_t min_severity);
86
90event_severity_t event_get_squelch(uint8_t module_id);
91
100bool event_drain(event_entry_t *out_buf, uint8_t max_entries,
101 uint8_t *num_drained);
102
106uint32_t event_get_count(void);
107
108/* ---- Privileged implementations (internal — do not call directly) ----- */
109
110void __event_init(void);
111void __os_event(uint8_t module_id, event_severity_t severity, uint16_t event_id,
112 const void *payload, uint8_t payload_len);
113void __event_set_squelch(uint8_t module_id, event_severity_t min_severity);
114event_severity_t __event_get_squelch(uint8_t module_id);
115bool __event_drain(event_entry_t *out_buf, uint8_t max_entries,
116 uint8_t *num_drained);
117uint32_t __event_get_count(void);
118
119#ifdef __cplusplus
120}
121#endif
122
123#endif /* ICARUS_EVENT_H */
void os_event(uint8_t module_id, event_severity_t severity, uint16_t event_id, const void *payload, uint8_t payload_len)
Emit a structured event into the ring buffer.
Definition svc.c:1331
void __event_init(void)
Definition event.c:34
event_severity_t event_get_squelch(uint8_t module_id)
Get the current squelch level for a given module.
Definition svc.c:1368
event_severity_t __event_get_squelch(uint8_t module_id)
Definition event.c:81
void event_init(void)
Initialize the event system.
Definition svc.c:1316
void __os_event(uint8_t module_id, event_severity_t severity, uint16_t event_id, const void *payload, uint8_t payload_len)
Definition event.c:43
bool __event_drain(event_entry_t *out_buf, uint8_t max_entries, uint8_t *num_drained)
Definition event.c:88
uint32_t __event_get_count(void)
Definition event.c:133
void event_set_squelch(uint8_t module_id, event_severity_t min_severity)
Set the minimum severity accepted for a given module.
Definition svc.c:1352
bool event_drain(event_entry_t *out_buf, uint8_t max_entries, uint8_t *num_drained)
Drain queued events into a caller-provided buffer.
Definition svc.c:1385
event_severity_t
Definition event.h:30
@ EVENT_CRITICAL
Definition event.h:34
@ EVENT_WARN
Definition event.h:33
@ EVENT_INFO
Definition event.h:32
@ EVENT_DEBUG
Definition event.h:31
void __event_set_squelch(uint8_t module_id, event_severity_t min_severity)
Definition event.c:73
uint32_t event_get_count(void)
Number of events currently buffered.
Definition svc.c:1408
Definition event.h:49
uint8_t severity
Definition event.h:51
uint16_t event_id
Definition event.h:52
uint8_t module_id
Definition event.h:50