summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--digital/ai/tools/test_simu_control_guybrush.py5
-rw-r--r--digital/io-hub/src/guybrush/main.c12
-rw-r--r--digital/io-hub/tools/io_hub/io_hub.py3
3 files changed, 20 insertions, 0 deletions
diff --git a/digital/ai/tools/test_simu_control_guybrush.py b/digital/ai/tools/test_simu_control_guybrush.py
index adf27a85..407648dc 100644
--- a/digital/ai/tools/test_simu_control_guybrush.py
+++ b/digital/ai/tools/test_simu_control_guybrush.py
@@ -50,6 +50,8 @@ class TestSimuControl (TestSimu):
self.control_frame = Frame (self)
self.control_frame.pack (side = 'left', before = self.table_view,
fill = 'y')
+ Button (self.control_frame, text = 'FSM step', padx = 0, pady = 0,
+ command = self.fsm_debug).pack ()
def out_button (name, toggle):
def command ():
self.io.output (toggle, 'toggle')
@@ -86,6 +88,9 @@ class TestSimuControl (TestSimu):
self.table_view.bind ('<1>', self.move)
self.table_view.bind ('<3>', self.orient)
+ def fsm_debug (self):
+ self.io.fsm_debug ()
+
def move (self, ev):
pos = self.table_view.screen_coord ((ev.x, ev.y))
if self.goto_var.get ():
diff --git a/digital/io-hub/src/guybrush/main.c b/digital/io-hub/src/guybrush/main.c
index f2d8d4e7..63305103 100644
--- a/digital/io-hub/src/guybrush/main.c
+++ b/digital/io-hub/src/guybrush/main.c
@@ -71,6 +71,9 @@ vect_t main_obstacles_pos[2];
/** Number of obstacles in main_obstacles_pos. */
uint8_t main_obstacles_nb;
+/** FSM debug mode activated if 1, step authorized if 2. */
+uint8_t main_fsm_debug_mode;
+
/** Asserv stats counters. */
static uint8_t main_stats_asserv_, main_stats_asserv_cpt_;
@@ -130,6 +133,11 @@ main_event_to_fsm (void)
do { if (FSM_HANDLE_TIMEOUT (fsm)) return; } while (0)
/* Update FSM timeouts. */
FSM_HANDLE_TIMEOUT_E (AI);
+ /* Abort if debuging. */
+ if (main_fsm_debug_mode == 1)
+ return;
+ if (main_fsm_debug_mode == 2)
+ main_fsm_debug_mode--;
/* Motor status. */
asserv_status_e robot_move_status, mimot_motor0_status,
mimot_motor1_status;
@@ -241,6 +249,10 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
/* Simulate jack insertion. */
fsm_queue_post_event (FSM_EVENT (AI, jack_inserted));
break;
+ case c ('f', 0):
+ /* Enter FSM debug mode, then step once. */
+ main_fsm_debug_mode = 2;
+ break;
case c ('m', 5):
/* Go to position.
* - 2w: x, y.
diff --git a/digital/io-hub/tools/io_hub/io_hub.py b/digital/io-hub/tools/io_hub/io_hub.py
index bf65b199..6623a346 100644
--- a/digital/io-hub/tools/io_hub/io_hub.py
+++ b/digital/io-hub/tools/io_hub/io_hub.py
@@ -40,6 +40,9 @@ class Proto:
self.proto.send ('z')
self.proto.send ('z')
+ def fsm_debug (self):
+ self.proto.send ('f')
+
def pwm_set (self, index, value):
self.proto.send ('w', 'Bh', index, value)