tdse-tp2_03-model_integration

Index Commits Files Refs README
commit 9f9f06d27153e6040d8a0365949edc9106b6565f
parent aec654e7901d398bb5f60cc69782c22496497f90
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Fri,  3 Oct 2025 13:47:45 -0300

Implement `task_system_statechart`

Diffstat:
Mapp/src/task_system.c | 56++++++++++++++++++++++++++++++++++++++++++++++++++++----
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: