13 spi_lobo_device_handle_t tsspi = NULL; ///< Touchscreen SPI handler |
13 spi_lobo_device_handle_t tsspi = NULL; ///< Touchscreen SPI handler |
14 extern sButton Buttons[MAXBUTTONS]; ///< 40 buttons on a screen. |
14 extern sButton Buttons[MAXBUTTONS]; ///< 40 buttons on a screen. |
15 time_t now; ///< Current time |
15 time_t now; ///< Current time |
16 time_t last = 0; ///< Last time |
16 time_t last = 0; ///< Last time |
17 struct tm timeinfo; ///< Current time structure |
17 struct tm timeinfo; ///< Current time structure |
18 char s_timer[10]; ///< Timer string buffer |
18 char s_timer[16]; ///< Timer string buffer |
19 char s_top_msg[64]; ///< Top message string buffer |
19 char s_top_msg[64]; ///< Top message string buffer |
20 |
20 |
21 extern float stageTemp; |
21 extern float stageTemp; |
22 extern uint16_t stageTime; |
22 extern uint16_t stageTime; |
23 extern uint16_t TimeWhirlPool; |
23 extern uint16_t TimeWhirlPool; |
217 |
217 |
218 if (Time != _oldTime) { |
218 if (Time != _oldTime) { |
219 _fg = TFT_GREEN; |
219 _fg = TFT_GREEN; |
220 TFT_setFont(FONT_7SEG, NULL); |
220 TFT_setFont(FONT_7SEG, NULL); |
221 set_7seg_font_atrib(12, 2, 1, TFT_DARKGREY); |
221 set_7seg_font_atrib(12, 2, 1, TFT_DARKGREY); |
222 snprintf(s_timer, 9, "%02d:%02d:%02d", Hours, Minutes, Seconds); |
222 snprintf(s_timer, 15, "%02d:%02d:%02d", Hours, Minutes, Seconds); |
223 TFT_print(s_timer, X, Y); |
223 TFT_print(s_timer, X, Y); |
224 _oldTime = Time; |
224 _oldTime = Time; |
225 snprintf(msg, 31, "{\"timer\":\"%s\"}", s_timer); |
225 snprintf(msg, 31, "{\"timer\":\"%s\"}", s_timer); |
226 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
226 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
227 } |
227 } |
229 |
229 |
230 |
230 |
231 |
231 |
232 void TopMessage(char *text) |
232 void TopMessage(char *text) |
233 { |
233 { |
234 char msg[64]; |
234 char msg[96]; |
235 |
235 |
236 snprintf(s_top_msg, 63, "%s", text); |
236 snprintf(s_top_msg, 63, "%s", text); |
237 _fg = TFT_YELLOW; |
237 _fg = TFT_YELLOW; |
238 font_transparent = 1; |
238 font_transparent = 1; |
239 TFT_setFont(DEJAVU24_FONT, NULL); |
239 TFT_setFont(DEJAVU24_FONT, NULL); |
240 TFT_fillRect(0, 0, 319, 25, TFT_NAVY); |
240 TFT_fillRect(0, 0, 319, 25, TFT_NAVY); |
241 TFT_print(s_top_msg, CENTER, 2); |
241 TFT_print(s_top_msg, CENTER, 2); |
242 font_transparent = 0; |
242 font_transparent = 0; |
243 snprintf(msg, 63, "{\"top_msg\":\"%s\"}", s_top_msg); |
243 snprintf(msg, 95, "{\"top_msg\":\"%s\"}", s_top_msg); |
244 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
244 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
245 } |
245 } |
246 |
246 |
247 |
247 |
248 |
248 |
249 void MLT_info(int x, int y, bool update) |
249 void MLT_info(int x, int y, bool update) |
250 { |
250 { |
251 char ctemp[16], csp[16], cpower[16], msg[32]; |
251 char ctemp[16], csp[16], cpower[16], msg[96]; |
252 static char ltemp[16], lsp[16], lpower[16]; |
252 static char ltemp[16], lsp[16], lpower[16]; |
253 bool con, cpwr, cpump = false; |
253 bool con, cpwr, cpump = false; |
254 static bool lon, lpwr, lpump; |
254 static bool lon, lpwr, lpump; |
255 |
255 |
256 _bg = (color_t){ 48, 48, 48 }; |
256 _bg = (color_t){ 48, 48, 48 }; |
288 TFT_fillCircle(x + 166, y + 11, 8, _led); |
288 TFT_fillCircle(x + 166, y + 11, 8, _led); |
289 } else { |
289 } else { |
290 TFT_fillCircle(x + 166, y + 11, 8, _bg); |
290 TFT_fillCircle(x + 166, y + 11, 8, _bg); |
291 } |
291 } |
292 lon = con; |
292 lon = con; |
293 snprintf(msg, 31, "{\"mlt_led\":\"%s\"}", con ? "1":"0"); |
293 snprintf(msg, 95, "{\"mlt_led\":\"%s\"}", con ? "1":"0"); |
294 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
294 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
295 } |
295 } |
296 |
296 |
297 cpump = (Pump_pin) ? true : false; |
297 cpump = (Pump_pin) ? true : false; |
298 if ((cpump != lpump) || (! update)) { |
298 if ((cpump != lpump) || (! update)) { |
300 TFT_fillCircle(x + 146, y + 11, 8, _pump); |
300 TFT_fillCircle(x + 146, y + 11, 8, _pump); |
301 } else { |
301 } else { |
302 TFT_fillCircle(x + 146, y + 11, 8, _bg); |
302 TFT_fillCircle(x + 146, y + 11, 8, _bg); |
303 } |
303 } |
304 lpump = cpump; |
304 lpump = cpump; |
305 snprintf(msg, 31, "{\"pump_led\":\"%s\"}", cpump ? "1":"0"); |
305 snprintf(msg, 95, "{\"pump_led\":\"%s\"}", cpump ? "1":"0"); |
306 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
306 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
307 } |
307 } |
308 |
308 |
309 if (equipment.SSR2 == SSR2_ON_IDLE) { |
309 if (equipment.SSR2 == SSR2_ON_IDLE) { |
310 cpwr = (HLT_pin) ? true : false; |
310 cpwr = (HLT_pin) ? true : false; |
313 TFT_fillCircle(x + 126, y + 11, 8, _pwr); |
313 TFT_fillCircle(x + 126, y + 11, 8, _pwr); |
314 } else { |
314 } else { |
315 TFT_fillCircle(x + 126, y + 11, 8, _bg); |
315 TFT_fillCircle(x + 126, y + 11, 8, _bg); |
316 } |
316 } |
317 lpwr = cpwr; |
317 lpwr = cpwr; |
318 snprintf(msg, 31, "{\"hlt_led\":\"%s\"}", cpwr ? "1":"0"); |
318 snprintf(msg, 95, "{\"hlt_led\":\"%s\"}", cpwr ? "1":"0"); |
319 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
319 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
320 } |
320 } |
321 } |
321 } |
322 |
322 |
323 if (strcmp(ctemp, ltemp) || (! update)) { |
323 if (strcmp(ctemp, ltemp) || (! update)) { |
324 TFT_setFont(USER_FONT, "/spiffs/fonts/Grotesk24x48.fon"); |
324 TFT_setFont(USER_FONT, "/spiffs/fonts/Grotesk24x48.fon"); |
325 TFT_print(ctemp, x + 5, y + 23); |
325 TFT_print(ctemp, x + 5, y + 23); |
326 strncpy(ltemp, ctemp, 16); |
326 strncpy(ltemp, ctemp, 16); |
327 snprintf(msg, 31, "{\"mlt_pv\":\"%s\"}", ctemp); |
327 snprintf(msg, 95, "{\"mlt_pv\":\"%s\"}", ctemp); |
328 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
328 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
329 } |
329 } |
330 |
330 |
331 TFT_setFont(DEJAVU18_FONT, NULL); |
331 TFT_setFont(DEJAVU18_FONT, NULL); |
332 if (strcmp(csp, lsp) || (! update)) { |
332 if (strcmp(csp, lsp) || (! update)) { |
333 TFT_clearStringRect(x + 5, y + 70, (char *)"123.45 sp"); |
333 TFT_clearStringRect(x + 5, y + 70, (char *)"123.45 sp"); |
334 TFT_print(csp, x + 5, y + 70); |
334 TFT_print(csp, x + 5, y + 70); |
335 strncpy(lsp, csp, 16); |
335 strncpy(lsp, csp, 16); |
336 snprintf(msg, 31, "{\"mlt_sp\":\"%s\"}", csp); |
336 snprintf(msg, 95, "{\"mlt_sp\":\"%s\"}", csp); |
337 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
337 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
338 } |
338 } |
339 if (strcmp(cpower, lpower) || (! update)) { |
339 if (strcmp(cpower, lpower) || (! update)) { |
340 TFT_clearStringRect(x + 120, y + 70, (char *)"100%"); |
340 TFT_clearStringRect(x + 120, y + 70, (char *)"100%"); |
341 TFT_print(cpower, x + 120, y + 70); |
341 TFT_print(cpower, x + 120, y + 70); |
342 strncpy(lpower, cpower, 16); |
342 strncpy(lpower, cpower, 16); |
343 snprintf(msg, 31, "{\"mlt_power\":\"%s\"}", cpower); |
343 snprintf(msg, 95, "{\"mlt_power\":\"%s\"}", cpower); |
344 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
344 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
345 } |
345 } |
346 } |
346 } |
347 |
347 |
348 |
348 |
349 |
349 |
350 void HLT_info(int x, int y, bool update, bool small) |
350 void HLT_info(int x, int y, bool update, bool small) |
351 { |
351 { |
352 char ctemp[16], csp[16], cpower[16], msg[32]; |
352 char ctemp[16], csp[16], cpower[16], msg[96]; |
353 static char ltemp[16], lsp[16], lpower[16]; |
353 static char ltemp[16], lsp[16], lpower[16]; |
354 bool con = false; |
354 bool con = false; |
355 static bool lon; |
355 static bool lon; |
356 uint8_t H; |
356 uint8_t H; |
357 |
357 |
389 TFT_fillCircle(x + 166, y + 11, 8, _led); |
389 TFT_fillCircle(x + 166, y + 11, 8, _led); |
390 } else { |
390 } else { |
391 TFT_fillCircle(x + 166, y + 11, 8, _bg); |
391 TFT_fillCircle(x + 166, y + 11, 8, _bg); |
392 } |
392 } |
393 lon = con; |
393 lon = con; |
394 snprintf(msg, 31, "{\"hlt_led\":\"%s\"}", con ? "1":"0"); |
394 snprintf(msg, 95, "{\"hlt_led\":\"%s\"}", con ? "1":"0"); |
395 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
395 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
396 } |
396 } |
397 |
397 |
398 if (strcmp(ltemp, ctemp) || (! update)) { |
398 if (strcmp(ltemp, ctemp) || (! update)) { |
399 if (small) { |
399 if (small) { |
402 } else { |
402 } else { |
403 TFT_setFont(USER_FONT, "/spiffs/fonts/Grotesk24x48.fon"); |
403 TFT_setFont(USER_FONT, "/spiffs/fonts/Grotesk24x48.fon"); |
404 TFT_print(ctemp, x + 5, y + 23); |
404 TFT_print(ctemp, x + 5, y + 23); |
405 } |
405 } |
406 strncpy(ltemp, ctemp, 16); |
406 strncpy(ltemp, ctemp, 16); |
407 snprintf(msg, 31, "{\"hlt_pv\":\"%s\"}", ctemp); |
407 snprintf(msg, 95, "{\"hlt_pv\":\"%s\"}", ctemp); |
408 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
408 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
409 } |
409 } |
410 |
410 |
411 H = (small) ? 50 : 70; |
411 H = (small) ? 50 : 70; |
412 TFT_setFont(DEJAVU18_FONT, NULL); |
412 TFT_setFont(DEJAVU18_FONT, NULL); |
413 if (strcmp(csp, lsp) || (! update)) { |
413 if (strcmp(csp, lsp) || (! update)) { |
414 TFT_clearStringRect(x + 5, y + H, (char *)"123.45 sp"); |
414 TFT_clearStringRect(x + 5, y + H, (char *)"123.45 sp"); |
415 TFT_print(csp, x + 5, y + H); |
415 TFT_print(csp, x + 5, y + H); |
416 strncpy(lsp, csp, 16); |
416 strncpy(lsp, csp, 16); |
417 snprintf(msg, 31, "{\"hlt_sp\":\"%s\"}", csp); |
417 snprintf(msg, 95, "{\"hlt_sp\":\"%s\"}", csp); |
418 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
418 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
419 } |
419 } |
420 if (strcmp(cpower, lpower) || (! update)) { |
420 if (strcmp(cpower, lpower) || (! update)) { |
421 TFT_clearStringRect(x + 120, y + H, (char *)"100%"); |
421 TFT_clearStringRect(x + 120, y + H, (char *)"100%"); |
422 TFT_print(cpower, x + 120, y + H); |
422 TFT_print(cpower, x + 120, y + H); |
423 strncpy(lpower, cpower, 16); |
423 strncpy(lpower, cpower, 16); |
424 snprintf(msg, 31, "{\"hlt_power\":\"%s\"}", cpower); |
424 snprintf(msg, 95, "{\"hlt_power\":\"%s\"}", cpower); |
425 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
425 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
426 } |
426 } |
427 } |
427 } |
428 |
428 |
429 |
429 |
435 |
435 |
436 if (counts == 0) |
436 if (counts == 0) |
437 counts = 1; // Prevent division by zero. |
437 counts = 1; // Prevent division by zero. |
438 |
438 |
439 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { |
439 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { |
440 snprintf(json_log->time, 8, "%02d:%02d", Hour, Minute); |
440 snprintf(json_log->time, 11, "%02d:%02d", Hour, Minute); |
441 json_log->mlt_sp = driver_state->mlt_sp; |
441 json_log->mlt_sp = driver_state->mlt_sp; |
442 json_log->mlt_pv = driver_state->mlt_pv; |
442 json_log->mlt_pv = driver_state->mlt_pv; |
443 json_log->mlt_power = power_MLT / counts; |
443 json_log->mlt_power = power_MLT / counts; |
444 json_log->mlt_tempreached = TempReached ? 1:0; |
444 json_log->mlt_tempreached = TempReached ? 1:0; |
445 json_log->pump_run = driver_state->pump_run; |
445 json_log->pump_run = driver_state->pump_run; |
671 case 3: Main_Screen = MAIN_TOOLS; break; |
671 case 3: Main_Screen = MAIN_TOOLS; break; |
672 default: break; |
672 default: break; |
673 } |
673 } |
674 if (System_TimeOk && (now != last)) { |
674 if (System_TimeOk && (now != last)) { |
675 last = now; |
675 last = now; |
676 strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); |
676 //strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); |
|
677 strftime(strftime_buf, sizeof(strftime_buf), "%a %e %b %Y %T", &timeinfo); |
677 _bg = TFT_BLACK; |
678 _bg = TFT_BLACK; |
678 _fg = TFT_ORANGE; |
679 _fg = TFT_ORANGE; |
679 TFT_setFont(DEJAVU18_FONT, NULL); |
680 TFT_setFont(DEJAVU18_FONT, NULL); |
680 TFT_print(strftime_buf, CENTER, 125); |
681 snprintf(msg, 95, " %s ", strftime_buf); |
681 snprintf(msg, 63, "{\"timer\":\"%s\"}", strftime_buf); // Fix string termination and only send once/second. |
682 TFT_print(msg, CENTER, 125); |
|
683 snprintf(msg, 95, "{\"timer\":\"%s\"}", strftime_buf); // Fix string termination and only send once/second. |
682 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
684 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); |
683 } |
685 } |
684 break; |
686 break; |
685 |
687 |
686 case MAIN_MODE_CALIBRATION: |
688 case MAIN_MODE_CALIBRATION: |