27 #include "delay.h" |
27 #include "delay.h" |
28 #include "xutil.h" |
28 #include "xutil.h" |
29 #include "websocket.h" |
29 #include "websocket.h" |
30 #include "simulator.h" |
30 #include "simulator.h" |
31 |
31 |
32 int my_simulator_state = 0; |
32 int my_simulator_state = THREAD_OFF; |
|
33 int my_simulator_command = THREAD_OFF; |
|
34 |
33 |
35 |
34 #ifdef USE_SIMULATOR |
36 #ifdef USE_SIMULATOR |
35 |
37 |
36 extern sys_config Config; |
38 extern sys_config Config; |
37 extern const char DEVPRESENT[4][6]; |
39 extern const char DEVPRESENT[4][6]; |
38 |
40 |
39 int my_simulator_shutdown = 0; |
|
40 |
41 |
41 |
42 |
42 static int simulate(void); |
43 static int simulate(void); |
43 |
44 |
44 |
45 |
151 payload = xstrcat(payload, simulator->light_address); |
152 payload = xstrcat(payload, simulator->light_address); |
152 payload = xstrcat(payload, (char *)"\",\"present\":\""); |
153 payload = xstrcat(payload, (char *)"\",\"present\":\""); |
153 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->light_present]); |
154 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->light_present]); |
154 payload = xstrcat(payload, (char *)"\",\"power\":"); |
155 payload = xstrcat(payload, (char *)"\",\"power\":"); |
155 sprintf(buf, "%d", simulator->light_power); |
156 sprintf(buf, "%d", simulator->light_power); |
|
157 payload = xstrcat(payload, buf); |
|
158 payload = xstrcat(payload, (char *)"},\"door\":{\"address\":\""); |
|
159 |
|
160 payload = xstrcat(payload, simulator->door_address); |
|
161 payload = xstrcat(payload, (char *)"\",\"present\":\""); |
|
162 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->door_present]); |
|
163 payload = xstrcat(payload, (char *)"\",\"value\":"); |
|
164 sprintf(buf, "%d", simulator->door_value); |
|
165 payload = xstrcat(payload, buf); |
|
166 payload = xstrcat(payload, (char *)"},\"psu\":{\"address\":\""); |
|
167 |
|
168 payload = xstrcat(payload, simulator->psu_address); |
|
169 payload = xstrcat(payload, (char *)"\",\"present\":\""); |
|
170 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->psu_present]); |
|
171 payload = xstrcat(payload, (char *)"\",\"value\":"); |
|
172 sprintf(buf, "%d", simulator->psu_value); |
156 payload = xstrcat(payload, buf); |
173 payload = xstrcat(payload, buf); |
157 payload = xstrcat(payload, (char *)"},\"frigo_isolation\":"); |
174 payload = xstrcat(payload, (char *)"},\"frigo_isolation\":"); |
158 |
175 |
159 sprintf(buf, "%.4f", simulator->frigo_isolation); |
176 sprintf(buf, "%.4f", simulator->frigo_isolation); |
160 payload = xstrcat(payload, buf); |
177 payload = xstrcat(payload, buf); |
193 |
210 |
194 |
211 |
195 |
212 |
196 void *my_simulator_loop(void *threadid) |
213 void *my_simulator_loop(void *threadid) |
197 { |
214 { |
198 my_simulator_state = 1; |
215 my_simulator_command = THREAD_RUN; |
199 syslog(LOG_NOTICE, "Thread my_simulator_loop started"); |
216 syslog(LOG_NOTICE, "Thread my_simulator_loop started"); |
200 |
217 |
201 /* |
218 /* |
202 * Run the state machine |
219 * Run the state machine |
203 */ |
220 */ |
204 simulate(); |
221 simulate(); |
205 |
222 |
206 syslog(LOG_NOTICE, "Thread my_simulator_loop stopped"); |
223 syslog(LOG_NOTICE, "Thread my_simulator_loop stopped"); |
207 my_simulator_state = 0; |
|
208 return 0; |
224 return 0; |
209 } |
225 } |
210 |
226 |
211 |
227 |
212 SM_DECL(simulate, (char *)"simulator") |
228 SM_DECL(simulate, (char *)"simulator") |
213 SM_STATES |
229 SM_STATES |
214 Init, |
230 Init, |
|
231 Pause, |
215 Waiting, |
232 Waiting, |
216 Run, |
233 Run, |
217 Websocket |
234 Websocket |
218 SM_NAMES |
235 SM_NAMES |
219 (char *)"Init", |
236 (char *)"Init", |
|
237 (char *)"Pause", |
220 (char *)"Waiting", |
238 (char *)"Waiting", |
221 (char *)"run", |
239 (char *)"run", |
222 (char *)"Websocket" |
240 (char *)"Websocket" |
223 SM_EDECL |
241 SM_EDECL |
224 simulator_list *simulator; |
242 simulator_list *simulator; |
237 /* |
255 /* |
238 * Heater and cooler have the air temperature |
256 * Heater and cooler have the air temperature |
239 */ |
257 */ |
240 simulator->s_heat_temp = simulator->s_cool_temp = simulator->room_temperature; |
258 simulator->s_heat_temp = simulator->s_cool_temp = simulator->room_temperature; |
241 } |
259 } |
|
260 my_simulator_state = THREAD_RUN; |
242 SM_PROCEED(Waiting); |
261 SM_PROCEED(Waiting); |
243 |
262 |
|
263 SM_STATE(Pause) |
|
264 |
|
265 my_simulator_state = THREAD_PAUSE; |
|
266 if (my_simulator_command == THREAD_OFF) { |
|
267 SM_SUCCESS; |
|
268 } else if (my_simulator_command == THREAD_RUN) { |
|
269 my_simulator_state = THREAD_RUN; |
|
270 SM_PROCEED(Waiting); |
|
271 } |
|
272 mDelay(50); |
|
273 |
244 SM_STATE(Waiting) |
274 SM_STATE(Waiting) |
245 |
275 |
246 if (my_simulator_shutdown) { |
276 if (my_simulator_command == THREAD_OFF) { |
247 SM_SUCCESS; |
277 SM_SUCCESS; |
248 } |
278 } else if (my_simulator_command == THREAD_PAUSE) { |
|
279 SM_PROCEED(Pause); |
|
280 } |
|
281 |
249 now = time(NULL); |
282 now = time(NULL); |
250 if (now != last) { |
283 if (now != last) { |
251 last = now; |
284 last = now; |
252 seconds++; |
285 seconds++; |
253 SM_PROCEED(Run); |
286 SM_PROCEED(Run); |