main/task_tft.c

changeset 56
756d1a63d129
parent 54
7b134c27fadb
child 57
6c5211c0120b
equal deleted inserted replaced
55:38e1c91bfd88 56:756d1a63d129
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;
488 488
489 489
490 490
491 void task_tft(void *pvParameter) 491 void task_tft(void *pvParameter)
492 { 492 {
493 char msg[64]; 493 char msg[96];
494 494
495 ESP_LOGI(TAG, "Initialize TFT/Touch task"); 495 ESP_LOGI(TAG, "Initialize TFT/Touch task");
496 496
497 /* 497 /*
498 * Task loop. Read touchscreen events. 498 * Task loop. Read touchscreen events.
525 525
526 /* 526 /*
527 * With each screenchange, remove the timer too. 527 * With each screenchange, remove the timer too.
528 */ 528 */
529 Sub_Screen = 0; 529 Sub_Screen = 0;
530 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); 530 snprintf(msg, 95, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
531 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg)); 531 ws_server_send_text_clients((char *)"/ws", msg, strlen(msg));
532 532
533 ESP_LOGI(TAG, "Change screen %d to %d", Old_Screen, Main_Screen); 533 ESP_LOGI(TAG, "Change screen %d to %d", Old_Screen, Main_Screen);
534 _bg = TFT_BLACK; 534 _bg = TFT_BLACK;
535 TFT_fillScreen(_bg); 535 TFT_fillScreen(_bg);
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:

mercurial