From 1d62fb05a261f1816a5be47d31abe64cdebcff00 Mon Sep 17 00:00:00 2001 From: Nélio Laranjeiro Date: Thu, 10 Apr 2008 00:44:25 +0200 Subject: Added the topfsm. pb with the fsm generation. --- digital/io/src/Makefile | 10 ++++----- digital/io/src/fsm.h | 1 + digital/io/src/mainFsm.fsm | 52 ---------------------------------------------- digital/io/src/topfsm.c | 43 ++++++++++++++++++++++++++++++++++++++ digital/io/src/topfsm.fsm | 52 ++++++++++++++++++++++++++++++++++++++++++++++ digital/io/src/topfsm.h | 39 ++++++++++++++++++++++++++++++++++ 6 files changed, 140 insertions(+), 57 deletions(-) delete mode 100644 digital/io/src/mainFsm.fsm create mode 100644 digital/io/src/topfsm.c create mode 100644 digital/io/src/topfsm.fsm create mode 100644 digital/io/src/topfsm.h diff --git a/digital/io/src/Makefile b/digital/io/src/Makefile index 0bc02433..c9666126 100644 --- a/digital/io/src/Makefile +++ b/digital/io/src/Makefile @@ -3,7 +3,8 @@ PROGS = io io_SOURCES = main.c asserv.c servo.avr.c eeprom.avr.c trap.c sharp.c \ simu.host.c \ fsm.c getsamples.c getsamples_fsm.c getsamples_cb.c \ - gutter_fsm.c gutter_cb.c move_fsm.c move_cb.c move.c + gutter_fsm.c gutter_cb.c move_fsm.c move_cb.c move.c \ + topfsm.c MODULES = proto uart twi utils adc CONFIGFILE = avrconfig.h # atmega8, atmega8535, atmega128... @@ -42,12 +43,11 @@ EXTRA_CLEAN_FILES = getsamples_fsm.h getsamples_fsm.c getsamples_cb.h \ gutter_fsm.h gutter_fsm.c gutter_cb.h \ gutter_cb_skel.c gutter.png \ move_fsm.h move_fsm.c move.png move_cb.h move_cb_skel.c \ - mainFsm.h mainFsm.c mainFsm.png mainFsm_cb.h \ - mainFsm_cb_skel.c + topfsm.png # Bootstrap, fsm should be generated before fsm.h is used. fsm.c: fsm.h -fsm.h: getsamples_fsm.h gutter_fsm.h move_fsm.h +fsm.h: getsamples_fsm.h gutter_fsm.h move_fsm.h topfsm.h DFAGEN = python $(BASE)/../../tools/dfagen/dfagen.py @@ -83,7 +83,7 @@ else endif -png: getsamples.png gutter.png move.png mainFsm.png +png: getsamples.png gutter.png move.png topfsm.png %.png: %.dot dot -Tpng -o $@ $< diff --git a/digital/io/src/fsm.h b/digital/io/src/fsm.h index d4a6fef8..84bc960b 100644 --- a/digital/io/src/fsm.h +++ b/digital/io/src/fsm.h @@ -88,5 +88,6 @@ fsm_handle_event (fsm_t *fsm, u8 event); #include "getsamples_fsm.h" #include "gutter_fsm.h" #include "move_fsm.h" +#include "topfsm.h" #endif /* fsm_h */ diff --git a/digital/io/src/mainFsm.fsm b/digital/io/src/mainFsm.fsm deleted file mode 100644 index 35482f52..00000000 --- a/digital/io/src/mainFsm.fsm +++ /dev/null @@ -1,52 +0,0 @@ -# Main FSM. -mainfsm - -States: - START - GET_SAMPLES - GET_ICE - GO_TO_GOAL - GET_ADV_ICE - -Events: - ok - samples_took - collector_full - ice_took - samples_deposed - samples_took_ice_distributor_empty_not_enough_time - samples_took_ice_distributor_empty_enough_time - samples_deposed_ice_distributor_empty - ice_took_collector_full - not_enough_time - ice_took_collector_not_full - -START: - ok -> GET_SAMPLES - Go to take some samples. The sequence shall be adapt to take the correct number of samples. - -GET_SAMPLES: - samples_took -> GET_ICE - The samples had been took and now the ice is missing. - samples_took_ice_distributor_empty_not_enough_time -> GO_TO_GOAL - Some samples had been took and there is not enough time to get some ice. - samples_took_ice_distributor_empty_enough_time -> GET_ADV_ICE - Go to take ice in the adversary distributor because the one in our part of the table is empty. - collector_full -> GO_TO_GOAL - All the room in the robot are full. - -GET_ICE: - ice_took -> GO_TO_GOAL - The ice had been taken and the collector is full. The robot shall go to depose it into the goal. - -GO_TO_GOAL: - samples_deposed -> GET_SAMPLES - The samples had been deposed, it shall try to get more samples. This state will call the getsamples FSM and the moveFSM. - samples_deposed_ice_distributor_empty -> GET_ADV_ICE - Go to get some adversary ice because our distributor is empty. - -GET_ADV_ICE: - ice_took -> GO_TO_GOAL - The ice has been taken, now the robot shall depose it. - ice_took_collector_not_full -> GET_SAMPLES - There is enough time to get some samples and go to the goal. diff --git a/digital/io/src/topfsm.c b/digital/io/src/topfsm.c new file mode 100644 index 00000000..27eef2b2 --- /dev/null +++ b/digital/io/src/topfsm.c @@ -0,0 +1,43 @@ +/* robot_main_fsm.c */ +/* io - Input & Output with Artificial Intelligence (ai) support on AVR. {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * 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. + * + * 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. + * + * }}} */ +#include "common.h" +#include "asserv.h" +#include "topfsm.h" +#include "fsm.h" + +struct topfsm_data_t topfsm_data; + +/** Start a main FSM. */ +void +robot_main_start (void) +{ + /* Set parameters. */ + topfsm_data.sequence = 0x15; + /* Start the FSM. */ +/* fsm_init (&robot_main_fsm); + fsm_handle_event (&robot_main_fsm, ROBOT_MAIN_EVENT_ok); + */ +} + diff --git a/digital/io/src/topfsm.fsm b/digital/io/src/topfsm.fsm new file mode 100644 index 00000000..d0631813 --- /dev/null +++ b/digital/io/src/topfsm.fsm @@ -0,0 +1,52 @@ +# Main FSM. +topfsm + +States: + START + GET_SAMPLES + GET_ICE + GO_TO_GOAL + GET_ADV_ICE + +Events: + ok + samples_took + collector_full + ice_took + samples_deposed + samples_took_ice_distributor_empty_not_enough_time + samples_took_ice_distributor_empty_enough_time + samples_deposed_ice_distributor_empty + ice_took_collector_full + not_enough_time + ice_took_collector_not_full + +START: + ok -> GET_SAMPLES + Go to take some samples. The sequence shall be adapt to take the correct number of samples. + +GET_SAMPLES: + samples_took -> GET_ICE + The samples had been took and now the ice is missing. + samples_took_ice_distributor_empty_not_enough_time -> GO_TO_GOAL + Some samples had been took and there is not enough time to get some ice. + samples_took_ice_distributor_empty_enough_time -> GET_ADV_ICE + Go to take ice in the adversary distributor because the one in our part of the table is empty. + collector_full -> GO_TO_GOAL + All the room in the robot are full. + +GET_ICE: + ice_took -> GO_TO_GOAL + The ice had been taken and the collector is full. The robot shall go to depose it into the goal. + +GO_TO_GOAL: + samples_deposed -> GET_SAMPLES + The samples had been deposed, it shall try to get more samples. This state will call the getsamples FSM and the moveFSM. + samples_deposed_ice_distributor_empty -> GET_ADV_ICE + Go to get some adversary ice because our distributor is empty. + +GET_ADV_ICE: + ice_took -> GO_TO_GOAL + The ice has been taken, now the robot shall depose it. + ice_took_collector_not_full -> GET_SAMPLES + There is enough time to get some samples and go to the goal. diff --git a/digital/io/src/topfsm.h b/digital/io/src/topfsm.h new file mode 100644 index 00000000..f6b1f0bf --- /dev/null +++ b/digital/io/src/topfsm.h @@ -0,0 +1,39 @@ +#ifndef topfsm_h +#define topfsm_h +/* topfsm.h */ +/* io - Input & Output with Artificial Intelligence (ai) support on AVR. {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * 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. + * + * 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. + * + * }}} */ + +struct topfsm_data_t +{ + uint8_t sequence; +}; + +extern struct topfsm_data_t topfsm_data; + +/** Start a main FSM. */ +void +topfsm_start (void); + +#endif /* topfsm_h */ -- cgit v1.2.3