firmware-nucleo/App/Src/task_menu_interface.c (1783B)
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 * All rights reserved 6 * 7 * See file `LICENSE` for full details 8 */ 9 10 /* Project includes */ 11 #include "main.h" 12 13 /* Demo includes */ 14 #include "logger.h" 15 #include "dwt.h" 16 17 /* Application & Tasks includes */ 18 #include "app.h" 19 #include "task_menu_attribute.h" 20 21 #define EVENT_UNDEFINED (255) 22 #define MAX_EVENTS (16) 23 24 static struct { 25 uint32_t head; 26 uint32_t tail; 27 uint32_t count; 28 task_menu_ev_t queue[MAX_EVENTS]; 29 } task_menu_event_queue; 30 31 // External functions definition 32 void task_menu_interface_init_event_queue(void) 33 { 34 uint32_t i; 35 36 task_menu_event_queue.head = 0; 37 task_menu_event_queue.tail = 0; 38 task_menu_event_queue.count = 0; 39 40 for (i = 0; i < MAX_EVENTS; i++) 41 { 42 task_menu_event_queue.queue[i] = EVENT_UNDEFINED; 43 } 44 } 45 46 void task_menu_interface_put_event(task_menu_ev_t event) 47 { 48 task_menu_event_queue.count++; 49 task_menu_event_queue.queue[task_menu_event_queue.head++] = event; 50 51 if (MAX_EVENTS == task_menu_event_queue.head) 52 { 53 task_menu_event_queue.head = 0; 54 } 55 } 56 57 task_menu_ev_t task_menu_interface_get_event(void) 58 { 59 task_menu_ev_t event; 60 61 task_menu_event_queue.count--; 62 event = task_menu_event_queue.queue[task_menu_event_queue.tail]; 63 task_menu_event_queue.queue[task_menu_event_queue.tail++] = EVENT_UNDEFINED; 64 65 if (MAX_EVENTS == task_menu_event_queue.tail) 66 { 67 task_menu_event_queue.tail = 0; 68 } 69 70 return event; 71 } 72 73 bool task_menu_interface_any_event(void) 74 { 75 return (task_menu_event_queue.head != task_menu_event_queue.tail); 76 }
