firmware-nucleo/App/Src/task_system_interface.c (1626B)
1 /* 2 * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>. 3 * Copyright (c) 2026 Martin Javier Klöckner <mklockner@fi.uba.ar> 4 * 5 * See file `LICENSE` for full details 6 */ 7 8 #include "main.h" 9 10 #include "logger.h" 11 #include "dwt.h" 12 13 #include "app.h" 14 #include "task_system_attribute.h" 15 16 #define EVENT_UNDEFINED (255) 17 #define MAX_EVENTS (16) 18 19 static struct { 20 uint32_t head; 21 uint32_t tail; 22 uint32_t count; 23 task_system_ev_t queue[MAX_EVENTS]; 24 } task_system_event_queue; 25 26 void task_system_interface_init_event_queue(void) 27 { 28 uint32_t i; 29 30 task_system_event_queue.head = 0; 31 task_system_event_queue.tail = 0; 32 task_system_event_queue.count = 0; 33 34 for (i = 0; i < MAX_EVENTS; i++) 35 { 36 task_system_event_queue.queue[i] = EVENT_UNDEFINED; 37 } 38 } 39 40 void task_system_interface_put_event(task_system_ev_t event) 41 { 42 task_system_event_queue.count++; 43 task_system_event_queue.queue[task_system_event_queue.head++] = event; 44 45 if (MAX_EVENTS == task_system_event_queue.head) 46 { 47 task_system_event_queue.head = 0; 48 } 49 } 50 51 task_system_ev_t task_system_interface_get_event(void) 52 { 53 task_system_ev_t event; 54 55 task_system_event_queue.count--; 56 event = task_system_event_queue.queue[task_system_event_queue.tail]; 57 task_system_event_queue.queue[task_system_event_queue.tail++] = EVENT_UNDEFINED; 58 59 if (MAX_EVENTS == task_system_event_queue.tail) 60 { 61 task_system_event_queue.tail = 0; 62 } 63 64 return event; 65 } 66 67 bool task_system_interface_any_event(void) 68 { 69 return (task_system_event_queue.head != task_system_event_queue.tail); 70 }
