From 2376aeb614d69d7050209f858818bfa7d36be398 Mon Sep 17 00:00:00 2001 From: Jérôme Jutteau Date: Mon, 2 May 2011 23:32:51 +0200 Subject: digital/io: adapt FSM to new FSM system (AngFSM) --- digital/io/src/fsm.c | 137 --------------------------------------------------- 1 file changed, 137 deletions(-) delete mode 100644 digital/io/src/fsm.c (limited to 'digital/io/src/fsm.c') diff --git a/digital/io/src/fsm.c b/digital/io/src/fsm.c deleted file mode 100644 index 45eeb5ba..00000000 --- a/digital/io/src/fsm.c +++ /dev/null @@ -1,137 +0,0 @@ -/* fsm.c - Finite State Machine code. */ -/* io - Input & Output with Artificial Intelligence (ai) support on AVR. {{{ - * - * Copyright (C) 2008 Nicolas Schodet - * - * 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 "fsm.h" - -#include "modules/trace/trace.h" -#include "modules/proto/proto.h" -#include "events.h" - -#ifdef HOST -# include -#endif - -void -fsm_init (fsm_t *fsm) -{ - uint8_t i; - assert (fsm); - for (i = 0; i < FSM_ACTIVE_STATES_MAX; i++) - fsm->states_active[i] = fsm->states_init[i]; - for (i = 0; i < fsm->active_states_nb; i++) - fsm->states_timeout[i] = - fsm->state_timeout_table[fsm->states_init[i]]; -} - -/** Handle an event on the given FSM on a single active state, return 1 if the - * event was handled. */ -static uint8_t -fsm_handle_event_single (fsm_t *fsm, uint8_t active, uint8_t event) -{ - assert (fsm); - assert (active < fsm->active_states_nb); - assert (event < fsm->events_nb); - /* Lookup transition. */ - uint8_t old_state = fsm->states_active[active]; - fsm_transition_t tr = FSM_TRANSITION (fsm, old_state, event); - /* Ignore unhandled events. */ - if (tr) - { - /* Execute transition. */ - uint8_t new_state; - fsm_branch_t br = tr (); - /* Change state. */ -#ifdef HOST - assert (((br >> 16) & 0xff) == fsm->states_active[active]); - assert (((br >> 8) & 0xff) == event); - fprintf (stderr, "%s %s =%s=> %s\n", fsm->name, - fsm->states_names[fsm->states_active[active]], - fsm->events_names[event], fsm->states_names[br & 0xff]); - new_state = br & 0xff; -#else - new_state = br; - proto_send3b ('f', old_state, event, new_state); -#endif - TRACE (TRACE_FSM__HANDLE_EVENT, (u8) old_state, (u8) event, - (u8) new_state); - fsm->states_active[active] = new_state; - fsm->states_timeout[active] = fsm->state_timeout_table[new_state]; - return 1; - } - return 0; -} - -uint8_t -fsm_handle_event (fsm_t *fsm, uint8_t event) -{ - uint8_t i, handled = 0; - assert (fsm); - assert (event < fsm->events_nb); - for (i = 0; i < fsm->active_states_nb; i++) - { - /* Handle the event for this active state. */ - handled += fsm_handle_event_single (fsm, i, event); - } - return handled; -} - -uint8_t -fsm_handle_timeout (fsm_t *fsm) -{ - uint8_t i, handled = 0; - assert (fsm); - for (i = 0; i < fsm->active_states_nb; i++) - { - /* If there is a timeout for this state. */ - if (fsm->states_timeout[i] != 0xffff) - { - if (fsm->states_timeout[i]) - fsm->states_timeout[i]--; - else - { - /* Timeout expired, generate corresponding event. */ - handled += fsm_handle_event_single (fsm, i, - fsm->state_timeout_event); - } - } - } - return handled; -} - -uint8_t -fsm_can_handle_event (fsm_t *fsm, uint8_t event) -{ - uint8_t i; - assert (fsm); - assert (event < fsm->events_nb); - for (i = 0; i < fsm->active_states_nb; i++) - { - uint8_t state = fsm->states_active[i]; - if (FSM_TRANSITION (fsm, state, event)) - return 1; - } - return 0; -} - -- cgit v1.2.3