summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/top_cb.c
diff options
context:
space:
mode:
Diffstat (limited to 'digital/io/src/top_cb.c')
-rw-r--r--digital/io/src/top_cb.c88
1 files changed, 60 insertions, 28 deletions
diff --git a/digital/io/src/top_cb.c b/digital/io/src/top_cb.c
index a10939d5..19127922 100644
--- a/digital/io/src/top_cb.c
+++ b/digital/io/src/top_cb.c
@@ -1,21 +1,41 @@
-/*
- * THIS IS AN AUTOMATICALLY GENERATED FILE, DO NOT EDIT!
+/* top_cb.c */
+/* io - Input & Output with Artificial Intelligence (ai) support on AVR. {{{
+ *
+ * Copyright (C) 2009 Dufour Jérémy
+ *
+ * APBTeam:
+ * Web: http://apbteam.org/
+ * Email: team AT apbteam DOT org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * Skeleton for top callbacks implementation.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Top FSM with the Marcel's strategy
+ * }}}
+ * Main FSM calling other FSM.
*/
+
+
#include "common.h"
#include "fsm.h"
#include "top_cb.h"
-#include "chrono.h"
#include "asserv.h"
#include "playground.h"
#include "move.h" /* move FSM */
/*
* IDLE =start=>
- * => WAIT_FIRST_JACK_IN
+ * => WAIT_INIT_TO_FINISH
* nothing to do.
*/
fsm_branch_t
@@ -25,49 +45,61 @@ top__IDLE__start (void)
}
/*
- * WAIT_FIRST_JACK_IN =jack_inserted_into_bot=>
- * => WAIT_FIRST_JACK_OUT
- * nothing to do.
+ * WAIT_INIT_TO_FINISH =init_match_is_started=>
+ * => GET_PUCK_FROM_THE_GROUND
+ * the match start, try to get some puck from the ground.
*/
fsm_branch_t
-top__WAIT_FIRST_JACK_IN__jack_inserted_into_bot (void)
+top__WAIT_INIT_TO_FINISH__init_match_is_started (void)
{
- return top_next (WAIT_FIRST_JACK_IN, jack_inserted_into_bot);
+ return top_next (WAIT_INIT_TO_FINISH, init_match_is_started);
}
/*
- * WAIT_FIRST_JACK_OUT =jack_removed_from_bot=>
- * => WAIT_SECOND_JACK_IN
- * nothing to do.
+ * GET_PUCK_FROM_THE_GROUND =move_fsm_succeed=>
+ * already_six_pucks_or_no_next_position => GET_PUCK_FROM_DISTRIBUTOR
+ * get the next distributor position and launch move FSM to go there.
+ * next_position_exists => GET_PUCK_FROM_THE_GROUND
+ * go to the next position using move FSM.
*/
fsm_branch_t
-top__WAIT_FIRST_JACK_OUT__jack_removed_from_bot (void)
+top__GET_PUCK_FROM_THE_GROUND__move_fsm_succeed (void)
{
- return top_next (WAIT_FIRST_JACK_OUT, jack_removed_from_bot);
+ return top_next_branch (GET_PUCK_FROM_THE_GROUND, move_fsm_succeed, already_six_pucks_or_no_next_position);
+ return top_next_branch (GET_PUCK_FROM_THE_GROUND, move_fsm_succeed, next_position_exists);
}
/*
- * WAIT_SECOND_JACK_IN =jack_removed_from_bot=>
- * => WAIT_SECOND_JACK_OUT
- * nothing to do.
+ * GET_PUCK_FROM_THE_GROUND =move_fsm_failed=>
+ * => GET_PUCK_FROM_DISTRIBUTOR
+ * we have failed to do a move, go the distributor.
*/
fsm_branch_t
-top__WAIT_SECOND_JACK_IN__jack_removed_from_bot (void)
+top__GET_PUCK_FROM_THE_GROUND__move_fsm_failed (void)
{
- return top_next (WAIT_SECOND_JACK_IN, jack_removed_from_bot);
+ return top_next (GET_PUCK_FROM_THE_GROUND, move_fsm_failed);
}
/*
- * WAIT_SECOND_JACK_OUT =jack_removed_from_bot=>
- * => GET_PUCK_FROM_THE_GROUND
- * the match start, try to get some puck from the ground.
+ * GET_PUCK_FROM_THE_GROUND =bot_is_full_of_puck=>
+ * => STOP_TO_GO_TO_UNLOAD_AREA
+ * stop move FSM.
+ */
+fsm_branch_t
+top__GET_PUCK_FROM_THE_GROUND__bot_is_full_of_puck (void)
+{
+ return top_next (GET_PUCK_FROM_THE_GROUND, bot_is_full_of_puck);
+}
+
+/*
+ * GET_PUCK_FROM_THE_GROUND =state_timeout=>
+ * => STOP_TO_GET_PUCK_FROM_DISTRIBUTOR
+ * too much time lost to get puck from the ground, stop move FSM.
*/
fsm_branch_t
-top__WAIT_SECOND_JACK_OUT__jack_removed_from_bot (void)
+top__GET_PUCK_FROM_THE_GROUND__state_timeout (void)
{
- /* Start the chronometer */
- chrono_init ();
- return top_next (WAIT_SECOND_JACK_OUT, jack_removed_from_bot);
+ return top_next (GET_PUCK_FROM_THE_GROUND, state_timeout);
}