11 |
11 |
12 spi_lobo_device_handle_t spi; ///< TFT screen SPI handler |
12 spi_lobo_device_handle_t spi; ///< TFT screen SPI handler |
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 struct tm timeinfo; ///< Current time structure |
17 struct tm timeinfo; ///< Current time structure |
17 char s_timer[10]; ///< Timer sctring buffer |
18 char s_timer[10]; ///< Timer string buffer |
18 char s_top_msg[64]; ///< Top message string buffer |
19 char s_top_msg[64]; ///< Top message string buffer |
19 |
20 |
20 extern float stageTemp; |
21 extern float stageTemp; |
21 extern uint16_t stageTime; |
22 extern uint16_t stageTime; |
22 extern uint16_t TimeWhirlPool; |
23 extern uint16_t TimeWhirlPool; |
28 extern uint16_t Steady; |
29 extern uint16_t Steady; |
29 esp_timer_handle_t timerHandle; ///< Timer handler |
30 esp_timer_handle_t timerHandle; ///< Timer handler |
30 extern bool _NewMinute; |
31 extern bool _NewMinute; |
31 extern bool _UseHLT; |
32 extern bool _UseHLT; |
32 extern bool System_TimeOk; |
33 extern bool System_TimeOk; |
|
34 extern const esp_app_desc_t *app_desc; |
33 |
35 |
34 static const char *TAG = "task_tft"; |
36 static const char *TAG = "task_tft"; |
35 |
37 |
36 #define SPI_BUS TFT_HSPI_HOST ///< SPI bus for the TFT, TFT_VSPI_HOST or TFT_HSPI_HOST |
38 #define SPI_BUS TFT_HSPI_HOST ///< SPI bus for the TFT, TFT_VSPI_HOST or TFT_HSPI_HOST |
37 |
39 |
38 extern int Main_Screen; |
40 extern int Main_Screen; |
|
41 extern int Sub_Screen; |
39 extern int Old_Screen; |
42 extern int Old_Screen; |
40 extern int MLT_pin; |
43 extern int MLT_pin; |
41 extern int HLT_pin; |
44 extern int HLT_pin; |
42 extern int Pump_pin; |
45 extern int Pump_pin; |
43 extern DS18B20_State *ds18b20_state; |
46 extern DS18B20_State *ds18b20_state; |
468 snprintf(hlt_power, 15, "%3d%%", driver_state->hlt_power); |
471 snprintf(hlt_power, 15, "%3d%%", driver_state->hlt_power); |
469 } else { |
472 } else { |
470 hlt_sp[0] = '\0'; |
473 hlt_sp[0] = '\0'; |
471 hlt_power[0] = '\0'; |
474 hlt_power[0] = '\0'; |
472 } |
475 } |
473 snprintf(msg, 1023, "{\"main\":\"%d\",\"mlt_led\":\"%d\",\"mlt_pv\":\"%7.3f\",\"mlt_sp\":\"%s\",\"mlt_power\":\"%s\"" \ |
476 snprintf(msg, 1023, "{\"main\":\"%d\",\"sub\":\"%d\",\"mlt_led\":\"%d\",\"mlt_pv\":\"%7.3f\",\"mlt_sp\":\"%s\",\"mlt_power\":\"%s\"" \ |
474 ",\"pump_led\":\"%d\",\"hlt_led\":\"%d\",\"hlt_pv\":\"%7.3f\",\"hlt_sp\":\"%s\",\"hlt_power\":\"%s\"" \ |
477 ",\"pump_led\":\"%d\",\"hlt_led\":\"%d\",\"hlt_pv\":\"%7.3f\",\"hlt_sp\":\"%s\",\"hlt_power\":\"%s\"" \ |
475 ",\"timer\":\"%s\",\"top_msg\":\"%s\"}", |
478 ",\"timer\":\"%s\",\"top_msg\":\"%s\"}", |
476 Main_Screen, (MLT_pin) ? 1:0, driver_state->mlt_pv, mlt_sp, mlt_power, |
479 Main_Screen, Sub_Screen, (MLT_pin) ? 1:0, driver_state->mlt_pv, mlt_sp, mlt_power, |
477 (Pump_pin) ? 1:0, (HLT_pin) ? 1:0, driver_state->hlt_pv, hlt_sp, hlt_power, |
480 (Pump_pin) ? 1:0, (HLT_pin) ? 1:0, driver_state->hlt_pv, hlt_sp, hlt_power, |
478 s_timer, s_top_msg); |
481 s_timer, s_top_msg); |
479 |
482 |
480 xSemaphoreGive(xSemaphoreDriver); |
483 xSemaphoreGive(xSemaphoreDriver); |
481 ws_server_send_text_client(client, msg, strlen(msg)); |
484 ws_server_send_text_client(client, msg, strlen(msg)); |
526 } |
529 } |
527 |
530 |
528 /* |
531 /* |
529 * With each screenchange, remove the timer too. |
532 * With each screenchange, remove the timer too. |
530 */ |
533 */ |
531 snprintf(msg, 31, "{\"main\":\"%d\",\"timer\":\"\"}", Main_Screen); |
534 Sub_Screen = 0; |
|
535 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); |
532 ws_server_send_text_clients("/ws", msg, strlen(msg)); |
536 ws_server_send_text_clients("/ws", msg, strlen(msg)); |
533 |
537 |
534 ESP_LOGI(TAG, "Change screen %d to %d", Old_Screen, Main_Screen); |
538 ESP_LOGI(TAG, "Change screen %d to %d", Old_Screen, Main_Screen); |
535 _bg = TFT_BLACK; |
539 _bg = TFT_BLACK; |
536 TFT_fillScreen(_bg); |
540 TFT_fillScreen(_bg); |
555 case MAIN_MODE_CALIBRATION: |
559 case MAIN_MODE_CALIBRATION: |
556 Calibration_Init(); |
560 Calibration_Init(); |
557 break; |
561 break; |
558 |
562 |
559 case MAIN_INFO: |
563 case MAIN_INFO: |
560 sprintf(temp_buf, "BrewBoard %s", VERSION); |
564 sprintf(temp_buf, "BrewBoard %s", app_desc->version); |
561 TopMessage(temp_buf); |
565 TopMessage(temp_buf); |
562 _fg = TFT_YELLOW; |
566 _fg = TFT_YELLOW; |
563 TFT_setFont(UBUNTU16_FONT, NULL); |
567 TFT_setFont(UBUNTU16_FONT, NULL); |
564 TFT_print("Written by Michiel Broek (C) 2018\r\n\n", 0, 50); |
568 TFT_print("Written by Michiel Broek (C) 2018\r\n\n", 0, 50); |
565 // ------------------------------------- |
569 // ------------------------------------- |
566 _fg = TFT_ORANGE; |
570 _fg = TFT_ORANGE; |
567 TFT_print("Parts are written by Chris Morgan,\r\n", 0, LASTY); |
571 TFT_print("Parts are written by Chris Morgan,\r\n", 0, LASTY); |
568 TFT_print("Brett Beauregard, Chris Garry, LoBo,\r\n", 0, LASTY); |
572 TFT_print("Brett Beauregard, Blake Felt, LoBo,\r\n", 0, LASTY); |
569 TFT_print("and David Antliff.\r\n", 0, LASTY); |
573 TFT_print("and David Antliff.\r\n", 0, LASTY); |
570 ShowInteger(1,140, "Free memory", " bytes", esp_get_free_heap_size()); |
574 ShowInteger(1,140, "Free memory", " bytes", esp_get_free_heap_size()); |
571 ShowText(1,158, "IDF version", (char *)esp_get_idf_version()); |
575 ShowText(1,158, "IDF version", (char *)esp_get_idf_version()); |
572 Buttons_Add(130, 200, 60, 40, "Ok", 0); |
576 Buttons_Add(130, 200, 60, 40, "Ok", 0); |
573 Buttons[0].dark = true; |
577 Buttons[0].dark = true; |
616 |
620 |
617 case MAIN_TOOLS_UPDATES: |
621 case MAIN_TOOLS_UPDATES: |
618 Updates_Init(); |
622 Updates_Init(); |
619 break; |
623 break; |
620 |
624 |
621 case MAIN_AUTO_INIT: |
625 case MAIN_AUTO_INIT1: |
|
626 case MAIN_AUTO_INIT2: |
622 case MAIN_AUTO_DELAYSTART: |
627 case MAIN_AUTO_DELAYSTART: |
623 case MAIN_AUTO_HEATUP: |
628 case MAIN_AUTO_HEATUP: |
624 case MAIN_AUTO_MASH_IN: |
629 case MAIN_AUTO_MASH_IN: |
625 case MAIN_AUTO_MASH_1: |
630 case MAIN_AUTO_MASH_1: |
626 case MAIN_AUTO_MASH_2: |
631 case MAIN_AUTO_MASH_2: |
664 if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) { |
669 if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) { |
665 HLT_info(71, 150, true, false); |
670 HLT_info(71, 150, true, false); |
666 } |
671 } |
667 switch (Buttons_Scan()) { |
672 switch (Buttons_Scan()) { |
668 case 0: Main_Screen = MAIN_MANUAL_INIT; break; |
673 case 0: Main_Screen = MAIN_MANUAL_INIT; break; |
669 case 1: Main_Screen = MAIN_AUTO_INIT; break; |
674 case 1: Main_Screen = MAIN_AUTO_INIT1; break; |
670 case 2: Main_Screen = MAIN_INFO; break; |
675 case 2: Main_Screen = MAIN_INFO; break; |
671 case 3: Main_Screen = MAIN_TOOLS; break; |
676 case 3: Main_Screen = MAIN_TOOLS; break; |
672 default: break; |
677 default: break; |
673 } |
678 } |
674 if (System_TimeOk) { |
679 if (System_TimeOk && (now != last)) { |
|
680 last = now; |
675 strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); |
681 strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); |
676 TFT_setFont(DEJAVU18_FONT, NULL); |
682 TFT_setFont(DEJAVU18_FONT, NULL); |
677 _bg = TFT_BLACK; |
683 _bg = TFT_BLACK; |
678 _fg = TFT_ORANGE; |
684 _fg = TFT_ORANGE; |
679 TFT_print(strftime_buf, CENTER, 125); |
685 TFT_print(strftime_buf, CENTER, 125); |
|
686 snprintf(msg, 63, "{\"timer\":\"%s\"}", strftime_buf); // Fix string termination and only send once/second. |
|
687 ws_server_send_text_clients("/ws", msg, strlen(msg)); |
680 } |
688 } |
681 break; |
689 break; |
682 |
690 |
683 case MAIN_MODE_CALIBRATION: |
691 case MAIN_MODE_CALIBRATION: |
684 Calibration_Loop(); |
692 Calibration_Loop(); |
733 if (Buttons_Scan() == 0) { |
741 if (Buttons_Scan() == 0) { |
734 Main_Screen = MAIN_MODE_FREE; |
742 Main_Screen = MAIN_MODE_FREE; |
735 } |
743 } |
736 break; |
744 break; |
737 |
745 |
738 case MAIN_AUTO_INIT: |
746 case MAIN_AUTO_INIT1: |
|
747 case MAIN_AUTO_INIT2: |
739 case MAIN_AUTO_DELAYSTART: |
748 case MAIN_AUTO_DELAYSTART: |
740 case MAIN_AUTO_HEATUP: |
749 case MAIN_AUTO_HEATUP: |
741 case MAIN_AUTO_MASH_IN: |
750 case MAIN_AUTO_MASH_IN: |
742 case MAIN_AUTO_MASH_1: |
751 case MAIN_AUTO_MASH_1: |
743 case MAIN_AUTO_MASH_2: |
752 case MAIN_AUTO_MASH_2: |