summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/fsm.h
diff options
context:
space:
mode:
Diffstat (limited to 'digital/io/src/fsm.h')
-rw-r--r--digital/io/src/fsm.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/digital/io/src/fsm.h b/digital/io/src/fsm.h
index f06c92fb..82a860a8 100644
--- a/digital/io/src/fsm.h
+++ b/digital/io/src/fsm.h
@@ -25,6 +25,17 @@
*
* }}} */
+#ifndef HOST
+
+# include <avr/pgmspace.h>
+
+#else
+
+# define PROGMEM
+# define pgm_read_word(addr) (*(addr))
+
+#endif
+
/**
* The io board includes an FSM with several concurrent active states.
*
@@ -88,6 +99,10 @@ struct fsm_t
};
typedef struct fsm_t fsm_t;
+#define FSM_TRANSITION(fsm, state, event) \
+ ((fsm_transition_t) pgm_read_word ( \
+ &(fsm)->transition_table[(state) * (fsm)->events_nb + (event)]))
+
/** Reset a FSM. */
void
fsm_init (fsm_t *fsm);