diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 6cadd41a2..86066273c 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9437,6 +9437,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 c21c555fd..4f75d0930 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2208,7 +2208,8 @@ uint8_t lcd_alright() { lcd_consume_click(); while (1) { - delay_keep_alive(0); + manage_heater(); + manage_inactivity(true); if (lcd_encoder) { @@ -4696,7 +4697,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) { @@ -4787,7 +4789,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) { @@ -6906,6 +6909,7 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite, manage_heater(); + manage_inactivity(true); _delay(100); } while (!lcd_clicked());