From fb1e264df7fbd43feabd3ebb1e464a7c3cf8235a Mon Sep 17 00:00:00 2001 From: suchmememanyskill <38142618+suchmememanyskill@users.noreply.github.com> Date: Sun, 10 Mar 2024 01:08:47 +0100 Subject: [PATCH] Display M117 message on screen --- CYD-Klipper/platformio.ini | 3 ++ CYD-Klipper/src/core/data_setup.cpp | 12 ++++--- CYD-Klipper/src/ui/ui_utils.cpp | 51 +++++++++++++++++++++++++++++ CYD-Klipper/src/ui/ui_utils.h | 3 +- 4 files changed, 64 insertions(+), 5 deletions(-) diff --git a/CYD-Klipper/platformio.ini b/CYD-Klipper/platformio.ini index b6dfe46..1472295 100644 --- a/CYD-Klipper/platformio.ini +++ b/CYD-Klipper/platformio.ini @@ -17,6 +17,7 @@ lib_deps = https://github.com/suchmememanyskill/esp32-smartdisplay bblanchon/ArduinoJson@^7.0.0 plageoj/UrlEncode@^1.0.1 + erriez/ErriezCRC32 @ ^1.0.1 monitor_filters = esp32_exception_decoder build_flags = -DLV_CONF_PATH="../../../../src/conf/lv_conf.h" @@ -32,6 +33,7 @@ lib_deps = https://github.com/PaulStoffregen/XPT2046_Touchscreen.git bblanchon/ArduinoJson@^7.0.0 plageoj/UrlEncode@^1.0.1 + erriez/ErriezCRC32 @ ^1.0.1 [env:esp32-3248S035C] board = esp32-3248S035C @@ -42,6 +44,7 @@ lib_deps = https://github.com/OperatorB/gt911-arduino-fixed-reset.git bblanchon/ArduinoJson@^7.0.0 plageoj/UrlEncode@^1.0.1 + erriez/ErriezCRC32 @ ^1.0.1 [env:esp32-2432S028Rv1-SD] board = esp32-2432S028RV1-smartdisplay diff --git a/CYD-Klipper/src/core/data_setup.cpp b/CYD-Klipper/src/core/data_setup.cpp index 89e2f5a..69ec09b 100644 --- a/CYD-Klipper/src/core/data_setup.cpp +++ b/CYD-Klipper/src/core/data_setup.cpp @@ -7,6 +7,7 @@ #include "macros_query.h" #include #include "http_client.h" +#include "../ui/ui_utils.h" const char *printer_state_messages[] = { "Error", @@ -112,7 +113,7 @@ void fetch_printer_data() { freeze_request_thread(); PRINTER_CONFIG *config = get_current_printer_config(); - SETUP_HTTP_CLIENT("/printer/objects/query?extruder&heater_bed&toolhead&gcode_move&virtual_sdcard&print_stats&webhooks&fan") + SETUP_HTTP_CLIENT("/printer/objects/query?extruder&heater_bed&toolhead&gcode_move&virtual_sdcard&print_stats&webhooks&fan&display_status") int httpCode = client.GET(); delay(10); @@ -235,8 +236,11 @@ void fetch_printer_data() } } - // TODO: make a call to /server/files/metadata to get more accurate time estimates - // https://moonraker.readthedocs.io/en/latest/web_api/#server-administration + if (status.containsKey("display_status")) + { + const char* message = status["display_status"]["message"]; + lv_create_popup_message(message, 10000); + } if (printer.state == PRINTER_STATE_PRINTING && printer.print_progress > 0) { @@ -418,5 +422,5 @@ void data_setup() macros_query_setup(); freeze_render_thread(); - xTaskCreatePinnedToCore(data_loop_background, "data_loop_background", 5000, NULL, 0, &background_loop, 0); + xTaskCreatePinnedToCore(data_loop_background, "data_loop_background", 5000, NULL, 2, &background_loop, 0); } diff --git a/CYD-Klipper/src/ui/ui_utils.cpp b/CYD-Klipper/src/ui/ui_utils.cpp index c43592b..a6d0e21 100644 --- a/CYD-Klipper/src/ui/ui_utils.cpp +++ b/CYD-Klipper/src/ui/ui_utils.cpp @@ -2,6 +2,7 @@ #include "ui_utils.h" #include "../core/data_setup.h" #include "../core/lv_setup.h" +#include lv_obj_t* lv_create_empty_panel(lv_obj_t* root) { lv_obj_t* panel = lv_obj_create(root); @@ -199,4 +200,54 @@ void lv_create_custom_menu_label(const char *label_text, lv_obj_t* root_panel, c lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_text(label, text); lv_create_custom_menu_entry(label_text, label, root_panel, false); +} + +uint32_t message_hash = 0; +lv_timer_t* timer = NULL; + +void on_timer_destroy(lv_event_t * e) +{ + lv_timer_del(timer); + timer = NULL; + Serial.println("Timer destroy"); +} + +void timer_callback(lv_timer_t *timer) +{ + lv_obj_t * panel = (lv_obj_t *)timer->user_data; + lv_obj_del(panel); + Serial.println("Timer callback"); +} + +void lv_create_popup_message(const char* message, uint16_t timeout_ms) +{ + Serial.println("Hello"); + if (message == nullptr || timer != NULL) + { + return; + } + + uint32_t new_hash = crc32String(message); + + if (new_hash == message_hash) + { + return; + } + + message_hash = new_hash; + + lv_obj_t* panel = lv_obj_create(lv_scr_act()); + lv_obj_set_style_pad_all(panel, CYD_SCREEN_GAP_PX, CYD_SCREEN_GAP_PX); + lv_obj_set_size(panel, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, LV_SIZE_CONTENT); + lv_layout_flex_column(panel, LV_FLEX_ALIGN_CENTER); + lv_obj_align(panel, LV_ALIGN_TOP_RIGHT, -CYD_SCREEN_GAP_PX, CYD_SCREEN_GAP_PX); + lv_obj_add_event_cb(panel, on_timer_destroy, LV_EVENT_DELETE, NULL); + lv_obj_set_style_border_color(panel, lv_color_hex(0xFF0000), 0); + + lv_obj_t* label = lv_label_create(panel); + lv_label_set_text_fmt(label, "%s", message); + lv_obj_set_size(label, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 6, LV_SIZE_CONTENT); + lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP); + + timer = lv_timer_create(timer_callback, timeout_ms, panel); } \ No newline at end of file diff --git a/CYD-Klipper/src/ui/ui_utils.h b/CYD-Klipper/src/ui/ui_utils.h index 295a2cf..8c4239c 100644 --- a/CYD-Klipper/src/ui/ui_utils.h +++ b/CYD-Klipper/src/ui/ui_utils.h @@ -43,4 +43,5 @@ void lv_create_custom_menu_entry(const char* label_text, lv_obj_t* object, lv_ob void lv_create_custom_menu_button(const char *label_text, lv_obj_t* root_panel, lv_event_cb_t on_click, const char *btn_text, void * user_data = NULL); void lv_create_custom_menu_switch(const char *label_text, lv_obj_t* root_panel, lv_event_cb_t on_toggle, bool state, void * user_data = NULL); void lv_create_custom_menu_dropdown(const char *label_text, lv_obj_t *root_panel, lv_event_cb_t on_change, const char *options, int index, void * user_data = NULL); -void lv_create_custom_menu_label(const char *label_text, lv_obj_t* root_panel, const char *text); \ No newline at end of file +void lv_create_custom_menu_label(const char *label_text, lv_obj_t* root_panel, const char *text); +void lv_create_popup_message(const char* message, uint16_t timeout_ms); \ No newline at end of file