--- /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