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 "board.h" 14 #include "app.h" 15 #include "task_actuator_attribute.h" 16 #include "task_actuator_interface.h" 17 18 #define G_TASK_ACT_CNT_INIT 0ul 19 #define G_TASK_ACT_TICK_CNT_INI 0ul 20 21 #define DEL_LED_XX_PUL 250ul 22 #define DEL_LED_XX_BLI 500ul 23 #define DEL_LED_XX_MIN 0ul 24 25 const task_actuator_cfg_t task_actuator_cfg_list[] = { 26 {ID_LED_A, LED_A_PORT, LED_A_PIN, LED_A_ON, LED_A_OFF} 27 }; 28 29 #define ACTUATOR_CFG_QTY (sizeof(task_actuator_cfg_list)/sizeof(task_actuator_cfg_t)) 30 31 task_actuator_dta_t task_actuator_dta_list[] = { 32 {ST_LED_BLINK} 33 }; 34 35 #define ACTUATOR_DTA_QTY (sizeof(task_actuator_dta_list)/sizeof(task_actuator_dta_t)) 36 37 void task_actuator_statechart(void); 38 39 uint32_t g_task_actuator_cnt; 40 41 // this variable is incremented by 1 on every ms by HAL_SysTick 42 volatile uint32_t g_task_actuator_tick_cnt; 43 44 void task_actuator_init(void *parameters) 45 { 46 uint32_t index; 47 const task_actuator_cfg_t *p_task_actuator_cfg; 48 task_actuator_dta_t *p_task_actuator_dta; 49 task_actuator_st_t state; 50 // task_actuator_ev_t event; 51 // bool b_event; 52 53 LOGGER_INFO("Initializing `task_actuator`..."); 54 55 for (index = 0; ACTUATOR_DTA_QTY > index; index++) 56 { 57 p_task_actuator_cfg = &task_actuator_cfg_list[index]; 58 p_task_actuator_dta = &task_actuator_dta_list[index]; 59 60 state = ST_LED_BLINK; 61 p_task_actuator_dta->state = state; 62 63 HAL_GPIO_WritePin(p_task_actuator_cfg->gpio_port, p_task_actuator_cfg->pin, p_task_actuator_cfg->led_off); 64 } 65 66 LOGGER_INFO("Done initializing `task_actuator`"); 67 } 68 69 void task_actuator_update(void *parameters) 70 { 71 bool b_time_update_required = false; 72 73 __asm("CPSID i"); 74 if (G_TASK_ACT_TICK_CNT_INI < g_task_actuator_tick_cnt) 75 { 76 g_task_actuator_tick_cnt--; 77 b_time_update_required = true; 78 } 79 __asm("CPSIE i"); 80 81 while (b_time_update_required) 82 { 83 g_task_actuator_cnt++; 84 85 task_actuator_statechart(); 86 87 __asm("CPSID i"); 88 if (G_TASK_ACT_TICK_CNT_INI < g_task_actuator_tick_cnt) 89 { 90 g_task_actuator_tick_cnt--; 91 b_time_update_required = true; 92 } 93 else 94 { 95 b_time_update_required = false; 96 } 97 __asm("CPSIE i"); 98 } 99 } 100 101 void task_actuator_statechart(void) 102 { 103 uint32_t index; 104 const task_actuator_cfg_t *p_task_actuator_cfg; 105 task_actuator_dta_t *p_task_actuator_dta; 106 107 for (index = 0; ACTUATOR_DTA_QTY > index; index++) 108 { 109 /* Update Task Actuator Configuration & Data Pointer */ 110 p_task_actuator_cfg = &task_actuator_cfg_list[index]; 111 p_task_actuator_dta = &task_actuator_dta_list[index]; 112 113 switch (p_task_actuator_dta->state) 114 { 115 case ST_LED_BLINK: 116 117 if (true == p_task_actuator_dta->flag) 118 { 119 switch (p_task_actuator_dta->event) 120 { 121 case EV_LED_ON: 122 123 p_task_actuator_dta->flag = false; 124 HAL_GPIO_WritePin(p_task_actuator_cfg->gpio_port, 125 p_task_actuator_cfg->pin, 126 p_task_actuator_cfg->led_on); 127 128 break; 129 case EV_LED_OFF: 130 p_task_actuator_dta->flag = false; 131 HAL_GPIO_WritePin(p_task_actuator_cfg->gpio_port, 132 p_task_actuator_cfg->pin, 133 p_task_actuator_cfg->led_off); 134 break; 135 default: 136 break; 137 } 138 } 139 default: 140 break; 141 } 142 } 143 }
