From b87e61cba74767dcb84d027c44efd27032141462 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 13 Apr 2010 00:22:24 +0200 Subject: digital/io/src: add fsm_can_handle_event --- digital/io/src/fsm.c | 15 +++++++++++++++ digital/io/src/fsm.h | 5 +++++ 2 files changed, 20 insertions(+) (limited to 'digital/io/src') diff --git a/digital/io/src/fsm.c b/digital/io/src/fsm.c index 53e4877d..c4607176 100644 --- a/digital/io/src/fsm.c +++ b/digital/io/src/fsm.c @@ -119,3 +119,18 @@ fsm_handle_timeout (fsm_t *fsm) 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_table[state * fsm->events_nb + event]) + return 1; + } + return 0; +} + diff --git a/digital/io/src/fsm.h b/digital/io/src/fsm.h index a90d1e83..72dfc56e 100644 --- a/digital/io/src/fsm.h +++ b/digital/io/src/fsm.h @@ -101,6 +101,11 @@ fsm_handle_timeout (fsm_t *fsm); uint8_t fsm_handle_event (fsm_t *fsm, uint8_t event); +/** Return non zero if event can be handled. This can be used if event + * generation requires expensive computations. */ +uint8_t +fsm_can_handle_event (fsm_t *fsm, uint8_t event); + #include "ai_fsm.h" #endif /* fsm_h */ -- cgit v1.2.3