thermferm/simulator.c

changeset 716
5c30c8ef83a8
parent 715
f5d85af156ab
child 724
01e3936f62d4
--- 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
 
 

mercurial