From 95acdba5fa62952a9b933eec5ff82f9bd7800562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Fri, 14 Apr 2023 21:31:12 +0000 Subject: [PATCH] Fix lcd_update() FW crashes Change in memory: Flash: +10 bytes SRAM: 0 bytes --- Firmware/Marlin_main.cpp | 3 +++ Firmware/lcd.cpp | 12 ++++++------ Firmware/lcd.h | 4 ++++ Firmware/ultralcd.cpp | 9 ++++++--- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index a124c9be0..4c5934a33 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9464,6 +9464,9 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s check_axes_activity(); MMU2::mmu2.mmu_loop(); + lcd_knob_update(); + backlight_update(); + // handle longpress if(lcd_longpress_trigger) { diff --git a/Firmware/lcd.cpp b/Firmware/lcd.cpp index bec189d1b..0cbd5ac2b 100644 --- a/Firmware/lcd.cpp +++ b/Firmware/lcd.cpp @@ -690,11 +690,7 @@ void lcd_quick_feedback(void) lcd_beeper_quick_feedback(); } -void lcd_update(uint8_t lcdDrawUpdateOverride) -{ - if (lcd_draw_update < lcdDrawUpdateOverride) - lcd_draw_update = lcdDrawUpdateOverride; - +void lcd_knob_update() { if (lcd_backlight_wake_trigger) { lcd_backlight_wake_trigger = false; backlight_wake(); @@ -711,8 +707,12 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) lcd_draw_update = 1; } } +} - backlight_update(); +void lcd_update(uint8_t lcdDrawUpdateOverride) +{ + if (lcd_draw_update < lcdDrawUpdateOverride) + lcd_draw_update = lcdDrawUpdateOverride; if (!lcd_update_enabled) return; diff --git a/Firmware/lcd.h b/Firmware/lcd.h index eee69e97d..aedfc38d3 100644 --- a/Firmware/lcd.h +++ b/Firmware/lcd.h @@ -123,6 +123,10 @@ extern void lcd_beeper_quick_feedback(void); //Cause an LCD refresh, and give the user visual or audible feedback that something has happened extern void lcd_quick_feedback(void); +/// @brief Check whether knob is rotated or clicked and update relevant +///variables. Flags are set by lcd_buttons_update in ISR context. +extern void lcd_knob_update(); + extern void lcd_update(uint8_t lcdDrawUpdateOverride); extern void lcd_update_enable(uint8_t enabled); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a53a25ba1..f634d677c 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2213,7 +2213,8 @@ uint8_t lcd_alright() { lcd_consume_click(); while (1) { - delay_keep_alive(0); + manage_heater(); + manage_inactivity(true); if (lcd_encoder) { @@ -4713,7 +4714,8 @@ uint8_t choose_menu_P(const char *header, const char *item, const char *last_ite KEEPALIVE_STATE(PAUSED_FOR_USER); while (1) { - delay_keep_alive(0); + manage_heater(); + manage_inactivity(true); if (lcd_encoder) { @@ -4805,7 +4807,8 @@ char reset_menu() { lcd_puts_at_P(1, i, item[first + i]); } - delay_keep_alive(0); + manage_heater(); + manage_inactivity(true); if (lcd_encoder) { if (lcd_encoder < 0) {