diff -r f5d85af156ab -r 5c30c8ef83a8 thermferm/simulator.c --- a/thermferm/simulator.c Wed May 01 14:38:37 2024 +0200 +++ b/thermferm/simulator.c Thu May 02 15:49:16 2024 +0200 @@ -29,14 +29,15 @@ #include "websocket.h" #include "simulator.h" -int my_simulator_state = 0; +int my_simulator_state = THREAD_OFF; +int my_simulator_command = THREAD_OFF; + #ifdef USE_SIMULATOR extern sys_config Config; extern const char DEVPRESENT[4][6]; -int my_simulator_shutdown = 0; static int simulate(void); @@ -154,6 +155,22 @@ payload = xstrcat(payload, (char *)"\",\"power\":"); sprintf(buf, "%d", simulator->light_power); payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"},\"door\":{\"address\":\""); + + payload = xstrcat(payload, simulator->door_address); + payload = xstrcat(payload, (char *)"\",\"present\":\""); + payload = xstrcat(payload, (char *)DEVPRESENT[simulator->door_present]); + payload = xstrcat(payload, (char *)"\",\"value\":"); + sprintf(buf, "%d", simulator->door_value); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"},\"psu\":{\"address\":\""); + + payload = xstrcat(payload, simulator->psu_address); + payload = xstrcat(payload, (char *)"\",\"present\":\""); + payload = xstrcat(payload, (char *)DEVPRESENT[simulator->psu_present]); + payload = xstrcat(payload, (char *)"\",\"value\":"); + sprintf(buf, "%d", simulator->psu_value); + payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"},\"frigo_isolation\":"); sprintf(buf, "%.4f", simulator->frigo_isolation); @@ -195,7 +212,7 @@ void *my_simulator_loop(void *threadid) { - my_simulator_state = 1; + my_simulator_command = THREAD_RUN; syslog(LOG_NOTICE, "Thread my_simulator_loop started"); /* @@ -204,7 +221,6 @@ simulate(); syslog(LOG_NOTICE, "Thread my_simulator_loop stopped"); - my_simulator_state = 0; return 0; } @@ -212,11 +228,13 @@ SM_DECL(simulate, (char *)"simulator") SM_STATES Init, + Pause, Waiting, Run, Websocket SM_NAMES (char *)"Init", + (char *)"Pause", (char *)"Waiting", (char *)"run", (char *)"Websocket" @@ -239,13 +257,28 @@ */ simulator->s_heat_temp = simulator->s_cool_temp = simulator->room_temperature; } + my_simulator_state = THREAD_RUN; SM_PROCEED(Waiting); +SM_STATE(Pause) + + my_simulator_state = THREAD_PAUSE; + if (my_simulator_command == THREAD_OFF) { + SM_SUCCESS; + } else if (my_simulator_command == THREAD_RUN) { + my_simulator_state = THREAD_RUN; + SM_PROCEED(Waiting); + } + mDelay(50); + SM_STATE(Waiting) - if (my_simulator_shutdown) { + if (my_simulator_command == THREAD_OFF) { SM_SUCCESS; + } else if (my_simulator_command == THREAD_PAUSE) { + SM_PROCEED(Pause); } + now = time(NULL); if (now != last) { last = now; @@ -258,8 +291,10 @@ changed = false; for (simulator = Config.simulators; simulator; simulator = simulator->next) { - if (my_simulator_shutdown) { + if (my_simulator_command == THREAD_OFF) { SM_SUCCESS; + } else if (my_simulator_command == THREAD_PAUSE) { + SM_PROCEED(Pause); } /* @@ -347,8 +382,10 @@ SM_STATE(Websocket) - if (my_simulator_shutdown) { + if (my_simulator_command == THREAD_OFF) { SM_SUCCESS; + } else if (my_simulator_command == THREAD_PAUSE) { + SM_PROCEED(Pause); } if (changed) { simulator_ws(); @@ -357,6 +394,9 @@ SM_PROCEED(Waiting); SM_END + + my_simulator_state = THREAD_OFF; + SM_RETURN