commit 3d0c1ba115b1f809258ef6dac9c50ae7b918d319 parent d19858f5b4392609970e1538f6ed4889b2ba61ed Author: Martin Klöckner <mjkloeckner@gmail.com> Date: Fri, 26 Sep 2025 17:49:58 -0300 implement `task_sensor_statechart` Diffstat:
| M | app/src/task_sensor.c | | | 59 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- |
1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/app/src/task_sensor.c b/app/src/task_sensor.c @@ -170,7 +170,8 @@ void task_sensor_statechart(void) p_task_sensor_cfg = &task_sensor_cfg_list[index]; p_task_sensor_dta = &task_sensor_dta_list[index]; - if (p_task_sensor_cfg->pressed == HAL_GPIO_ReadPin(p_task_sensor_cfg->gpio_port, p_task_sensor_cfg->pin)) + if (p_task_sensor_cfg->pressed + == HAL_GPIO_ReadPin(p_task_sensor_cfg->gpio_port, p_task_sensor_cfg->pin)) { p_task_sensor_dta->event = EV_BTN_XX_DOWN; } @@ -185,28 +186,76 @@ void task_sensor_statechart(void) if (EV_BTN_XX_DOWN == p_task_sensor_dta->event) { - put_event_task_system(p_task_sensor_cfg->signal_down); - p_task_sensor_dta->state = ST_BTN_XX_DOWN; + // put_event_task_system(p_task_sensor_cfg->signal_down); + p_task_sensor_dta->state = ST_BTN_XX_FALLING; + p_task_sensor_dta->tick = DEL_BTN_XX_MAX; } break; case ST_BTN_XX_FALLING: + if (EV_BTN_XX_UP == p_task_sensor_dta->event) + { + if (0 == p_task_sensor_dta->tick) { + p_task_sensor_dta->state = ST_BTN_XX_UP; + } + + if (p_task_sensor_dta->tick > 0) { + p_task_sensor_dta->state = ST_BTN_XX_FALLING; + p_task_sensor_dta->tick--; + } + } + + if (EV_BTN_XX_DOWN == p_task_sensor_dta->event) + { + if (0 == p_task_sensor_dta->tick) { + p_task_sensor_dta->state = ST_BTN_XX_DOWN; + put_event_task_system(p_task_sensor_cfg->signal_down); + } + + if (p_task_sensor_dta->tick > 0) { + p_task_sensor_dta->tick--; + } + } + break; case ST_BTN_XX_DOWN: if (EV_BTN_XX_UP == p_task_sensor_dta->event) { - put_event_task_system(p_task_sensor_cfg->signal_up); - p_task_sensor_dta->state = ST_BTN_XX_UP; + p_task_sensor_dta->state = ST_BTN_XX_RISING; + p_task_sensor_dta->tick = DEL_BTN_XX_MAX; } break; case ST_BTN_XX_RISING: + if (EV_BTN_XX_UP == p_task_sensor_dta->event) + { + if (0 == p_task_sensor_dta->tick) { + put_event_task_system(p_task_sensor_cfg->signal_up); + p_task_sensor_dta->state = ST_BTN_XX_UP; + } + + if (p_task_sensor_dta->tick > 0) { + p_task_sensor_dta->tick--; + } + } + + if (EV_BTN_XX_DOWN == p_task_sensor_dta->event) + { + if (0 == p_task_sensor_dta->tick) { + p_task_sensor_dta->state = ST_BTN_XX_DOWN; + } + + if (p_task_sensor_dta->tick > 0) { + p_task_sensor_dta->tick--; + } + } + break; default:
