tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
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 }