+ case EV_SCRABBLE:
+ DBG_PRINT_EVENT("unhandled event");
+ break;
+ case EV_EXIT:
+ break;
+ }
+}
+
+/************************************************************
+ * GENERIC DUMMY ACTION
+ ************************************************************/
+
+FSM_STATE(dummy_action)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY:
+ FSM_TIMER(1000);
+ break;
+ case EV_TIMER:
+ FSM_SIGNAL(MAIN, EV_ACTION_DONE, NULL);
+ FSM_TRANSITION(wait_for_command);
+ break;
+ case EV_PUCK_INSIDE:
+ case EV_PREPARE_THE_UNLOAD:
+ case EV_UNLOAD_PUCKS:
+ case EV_RETURN:
+ case EV_LIFT_IN_POS:
+ case EV_PUSHER_IN_POS:
+ case EV_LOAD_THE_PUCK:
+ case EV_FREE_SPACE:
+ case EV_SCRABBLE:
+ DBG_PRINT_EVENT("unhandled event");
+ break;
+ case EV_EXIT:
+ break;
+ }
+}
+
+/************************************************************
+ * DUMMY UNLOAD ACTION
+ ************************************************************/
+
+FSM_STATE(dummy_pucks_unload)
+{
+ static int dummy_unload_status;
+ switch (FSM_EVENT) {
+ case EV_ENTRY:
+ dummy_unload_status = 0;
+ printf("dummy: driving lift to floor %d\n", floor_to_unload);
+ FSM_TIMER(3000);
+ break;
+ case EV_TIMER:
+ FSM_SIGNAL(MAIN, EV_ACTION_DONE, NULL);
+ dummy_unload_status++;
+ break;
+ case EV_UNLOAD_PUCKS:
+ if (dummy_unload_status == 1)
+ FSM_TIMER(2000);
+ break;
+ case EV_FREE_SPACE:
+ if (dummy_unload_status == 2)
+ FSM_TIMER(1000);
+ break;
+ case EV_LIFT_IN_POS:
+ case EV_PUSHER_IN_POS:
+ case EV_PUCK_INSIDE:
+ case EV_PREPARE_THE_UNLOAD:
+ case EV_RETURN:
+ case EV_LOAD_THE_PUCK: