thermferm/statetbl.h

changeset 654
e981d0185485
child 655
780cc08df263
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/thermferm/statetbl.h	Tue Apr 02 15:03:12 2024 +0200
@@ -0,0 +1,57 @@
+/**
+ * @brief State table macro's
+ */
+
+#ifndef STATETBL_H
+#define STATETBL_H
+
+#define SM_DECL(proc,name) \
+int proc(void)\
+{\
+    int sm_success=0;\
+    char *sm_name=name;
+
+#define SM_STATES \
+    enum {
+
+#define SM_NAMES \
+    } sm_state; \
+    char * sm_sname[] = {
+
+#define SM_EDECL \
+    };
+
+#define SM_START(x) \
+    sm_state=x;\
+    syslog(LOG_NOTICE, "SM (%s): Start => %s", sm_name, sm_sname[sm_state]); \
+    while (!sm_success) switch (sm_state)\
+    {\
+    default: syslog(LOG_WARNING, "Statemachine %s error: state=%d",sm_name,sm_state);\
+    sm_success=-1;
+
+#define SM_STATE(x) \
+    break;\
+    case x:
+
+#define SM_END \
+    }\
+
+#define SM_RETURN \
+    return (sm_success != 1);\
+}
+
+#define SM_PROCEED(x) \
+    if (x != sm_state) {\
+	syslog(LOG_NOTICE, "SM (%s): %s => %s", sm_name, sm_sname[sm_state], sm_sname[x]);\
+    }\
+    sm_state=x; break;
+
+#define SM_SUCCESS \
+    syslog(LOG_NOTICE, "SM (%s): %s => Success", sm_name, sm_sname[sm_state]);\
+    sm_success=1; break;
+
+#define SM_ERROR \
+    syslog(LOG_WARNING, "SM (%s): %s => Error", sm_name, sm_sname[sm_state]);\
+    sm_success=-1; break;
+
+#endif

mercurial