commit 9f9f06d27153e6040d8a0365949edc9106b6565f
parent aec654e7901d398bb5f60cc69782c22496497f90
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date: Fri, 3 Oct 2025 13:47:45 -0300
Implement `task_system_statechart`
Diffstat:
1 file changed, 52 insertions(+), 4 deletions(-)
diff --git a/app/src/task_system.c b/app/src/task_system.c
@@ -171,7 +171,8 @@ void task_system_statechart(void)
{
case ST_SYS_IDLE:
- if ((true == p_task_system_dta->flag) && (EV_SYS_LOOP_DET == p_task_system_dta->event))
+ if ((true == p_task_system_dta->flag)
+ && (EV_SYS_LOOP_DET == p_task_system_dta->event))
{
p_task_system_dta->flag = false;
put_event_task_actuator(EV_LED_XX_ON, ID_LED_A);
@@ -182,33 +183,80 @@ void task_system_statechart(void)
case ST_SYS_ACTIVE_01:
- if ((true == p_task_system_dta->flag) && (EV_SYS_IDLE == p_task_system_dta->event))
+ if ((true == p_task_system_dta->flag)
+ && (EV_SYS_MANUAL_BTN == p_task_system_dta->event))
{
p_task_system_dta->flag = false;
- put_event_task_actuator(EV_LED_XX_OFF, ID_LED_A);
- p_task_system_dta->state = ST_SYS_IDLE;
+ p_task_system_dta->state = ST_SYS_ACTIVE_02;
+
+ p_task_system_dta->tick = DEL_SYS_MAX;
+ put_event_task_actuator(EV_LED_XX_BLINK, ID_LED_A);
}
break;
case ST_SYS_ACTIVE_02:
+ if (DEL_SYS_MIN == p_task_system_dta->tick)
+ {
+ p_task_system_dta->state = ST_SYS_ACTIVE_03;
+ put_event_task_actuator(EV_LED_XX_ON, ID_LED_A);
+ }
+
+ if (DEL_SYS_MIN < p_task_system_dta->tick) {
+ p_task_system_dta->tick--;
+ }
+
break;
case ST_SYS_ACTIVE_03:
+ if ((true == p_task_system_dta->flag)
+ && (EV_SYS_NOT_LOOP_DET == p_task_system_dta->event))
+ {
+ p_task_system_dta->flag = false;
+ p_task_system_dta->state = ST_SYS_ACTIVE_04;
+ }
+
break;
case ST_SYS_ACTIVE_04:
+ if ((true == p_task_system_dta->flag)
+ && (EV_SYS_IR_PHO_CELL == p_task_system_dta->event))
+ {
+ p_task_system_dta->flag = false;
+ p_task_system_dta->state = ST_SYS_ACTIVE_05;
+ }
+
break;
case ST_SYS_ACTIVE_05:
+ if ((true == p_task_system_dta->flag)
+ && (EV_SYS_NOT_IR_PHO_CELL == p_task_system_dta->event))
+ {
+ p_task_system_dta->flag = false;
+ p_task_system_dta->state = ST_SYS_ACTIVE_06;
+
+ p_task_system_dta->tick = DEL_SYS_MAX;
+ put_event_task_actuator(EV_LED_XX_BLINK, ID_LED_A);
+ }
+
break;
case ST_SYS_ACTIVE_06:
+ if (DEL_SYS_MIN == p_task_system_dta->tick)
+ {
+ p_task_system_dta->state = ST_SYS_IDLE;
+ put_event_task_actuator(EV_LED_XX_OFF, ID_LED_A);
+ }
+
+ if (DEL_SYS_MIN < p_task_system_dta->tick) {
+ p_task_system_dta->tick--;
+ }
+
break;
default: