summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/fsm.c
diff options
context:
space:
mode:
authorNicolas Schodet2010-04-13 00:22:24 +0200
committerNicolas Schodet2010-04-13 00:22:24 +0200
commitb87e61cba74767dcb84d027c44efd27032141462 (patch)
tree6292972fb656de051522ceb73aac08830227be39 /digital/io/src/fsm.c
parenta64fc5d45de564addf1838b83e66babf1f8bc994 (diff)
digital/io/src: add fsm_can_handle_event
Diffstat (limited to 'digital/io/src/fsm.c')
-rw-r--r--digital/io/src/fsm.c15
1 files changed, 15 insertions, 0 deletions
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;
+}
+