summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--digital/io/src/fsm.c7
-rw-r--r--digital/io/src/fsm.h8
-rw-r--r--digital/io/src/fsm_templates/template_fsm.c19
3 files changed, 34 insertions, 0 deletions
diff --git a/digital/io/src/fsm.c b/digital/io/src/fsm.c
index c19dd458..95288e1a 100644
--- a/digital/io/src/fsm.c
+++ b/digital/io/src/fsm.c
@@ -25,6 +25,10 @@
#include "common.h"
#include "fsm.h"
+#ifdef HOST
+# include <stdio.h>
+#endif
+
/** Reset a FSM. */
void
fsm_init (fsm_t *fsm)
@@ -51,6 +55,9 @@ fsm_handle_event (fsm_t *fsm, u8 event)
#ifdef HOST
assert (((br >> 16) & 0xff) == fsm->state_current);
assert (((br >> 8) & 0xff) == event);
+ printf ("%s %s =%s=> %s\n", fsm->name,
+ fsm->states_names[fsm->state_current],
+ fsm->events_names[event], fsm->states_names[br & 0xff]);
fsm->state_current = br & 0xff;
#else
fsm->state_current = br;
diff --git a/digital/io/src/fsm.h b/digital/io/src/fsm.h
index 33c9a108..224e5801 100644
--- a/digital/io/src/fsm.h
+++ b/digital/io/src/fsm.h
@@ -74,6 +74,14 @@ struct fsm_t
u8 state_init;
/** Current active state. */
u8 state_current;
+#ifdef HOST
+ /** FSM name. */
+ const char *name;
+ /** States names. */
+ const char * const *states_names;
+ /** Events names. */
+ const char * const *events_names;
+#endif
};
typedef struct fsm_t fsm_t;
diff --git a/digital/io/src/fsm_templates/template_fsm.c b/digital/io/src/fsm_templates/template_fsm.c
index 87e52f33..dfbdd4b4 100644
--- a/digital/io/src/fsm_templates/template_fsm.c
+++ b/digital/io/src/fsm_templates/template_fsm.c
@@ -15,11 +15,30 @@ static const fsm_transition_t
%(prefix)s_transition_table[%(PREFIX)s_STATE_NB][%(PREFIX)s_EVENT_NB] = {
%(transition_table)s};
+#ifdef HOST
+
+/* %(name)s state names. */
+static const char *
+%(prefix)s_states_names[] = {
+%(states_names)s};
+
+/* %(name)s event names. */
+static const char *
+%(prefix)s_events_names[] = {
+%(events_names)s};
+
+#endif /* HOST */
+
/* %(name)s context. */
fsm_t %(prefix)s_fsm = {
&%(prefix)s_transition_table[0][0],
%(PREFIX)s_EVENT_NB,
%(PREFIX)s_STATE_%(initial)s,
%(PREFIX)s_STATE_%(initial)s,
+#ifdef HOST
+ "%(name)s",
+ %(prefix)s_states_names,
+ %(prefix)s_events_names,
+#endif
};