firmware-nucleo/App/Inc/task_buttons_attribute.h (4497B)
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 #ifndef TASK_INC_TASK_BUTTONS_ATTRIBUTE_H_ 9 #define TASK_INC_TASK_BUTTONS_ATTRIBUTE_H_ 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 // TODO: Move every button related code to a separate generic button module 16 17 /* 18 * Sensor Statechart - State Transition Table 19 * 20 * +-------------------+----------------+-------------+-------------------+-----------------------+ 21 * | Current | Event | | Next | | 22 * | State | (Parameters) | [Guard] | State | Actions | 23 * |===================+================+=============+===================+=======================| 24 * | INICIAL | | | ST_BTN_XX_UP | | 25 * |-------------------+----------------+-------------+-------------------+-----------------------| 26 * | ST_BTN_XX_UP | EV_BTN_XX_UP | | ST_BTN_XX_UP | | 27 * | +----------------+-------------+-------------------+-----------------------| 28 * | | EV_BTN_XX_DOWN | | ST_BTN_XX_FALLING | tick = TICK_MAX | 29 * |-------------------+----------------+-------------+-------------------+-----------------------| 30 * | ST_BTN_XX_FALLING | EV_BTN_XX_UP | [tick == 0] | ST_BTN_XX_UP | | 31 * | | +-------------+-------------------+-----------------------| 32 * | | | [tick > 0] | ST_BTN_XX_FALLING | tick-- | 33 * | +----------------+-------------+-------------------+-----------------------| 34 * | | EV_BTN_XX_DOWN | [tick == 0] | ST_BTN_XX_DOWN | put_event_task_system | 35 * | | | | | (event) | 36 * | | +-------------+-------------------+-----------------------| 37 * | | | [tick > 0] | ST_BTN_XX_FALLING | tick-- | 38 * |-------------------+----------------+-------------+-------------------+-----------------------| 39 * | ST_BTN_XX_DOWN | EV_BTN_XX_UP | | ST_BTN_XX_RISING | tick = TICK_MAX | 40 * | +----------------+-------------+-------------------+-----------------------| 41 * | | EV_BTN_XX_DOWN | | ST_BTN_XX_DOWN | | 42 * |-------------------+----------------+-------------+-------------------+-----------------------| 43 * | ST_BTN_XX_RISING | EV_BTN_XX_UP | [tick == 0] | ST_BTN_XX_UP | put_event_task_system | 44 * | | | | | (event) | 45 * | | +-------------+-------------------+-----------------------| 46 * | | | [tick > 0] | ST_BTN_XX_RISING | tick-- | 47 * | +----------------+-------------+-------------------+-----------------------| 48 * | | EV_BTN_XX_DOWN | [tick == 0] | ST_BTN_XX_DOWN | | 49 * | | +-------------+-------------------+-----------------------| 50 * | | | [tick > 0] | ST_BTN_XX_RISING | tick-- | 51 * +-------------------+----------------+-------------+-------------------+-----------------------+ 52 * 53 */ 54 55 /* Events to excite Task Sensor */ 56 typedef enum { 57 EV_BTN_XX_UP, 58 EV_BTN_XX_DOWN 59 } task_buttons_ev_t; 60 61 /* States of Task Sensor */ 62 typedef enum { 63 ST_BTN_XX_UP, 64 ST_BTN_XX_FALLING, 65 ST_BTN_XX_DOWN, 66 ST_BTN_XX_RISING, 67 ST_SEN_READY 68 } task_buttons_st_t; 69 70 /* Identifier of Task Sensor */ 71 typedef enum { 72 ID_BTN_A, 73 ID_BTN_B, 74 ID_BTN_C, 75 ID_BTN_D, 76 } task_buttons_id_t; 77 78 typedef struct { 79 task_buttons_id_t identifier; 80 GPIO_TypeDef *gpio_port; 81 uint16_t pin; 82 GPIO_PinState pressed; 83 uint32_t tick_max; 84 task_buttons_ev_t signal_up; 85 task_buttons_ev_t signal_down; 86 } task_buttons_cfg_t; 87 88 typedef struct { 89 uint32_t tick; 90 task_buttons_st_t state; 91 task_buttons_ev_t event; 92 } task_buttons_dta_t; 93 94 #ifdef __cplusplus 95 } 96 #endif 97 98 #endif /* TASK_INC_TASK_SENSOR_ATTRIBUTE_H_ */
