diff --git a/Firmware/lcd.cpp b/Firmware/lcd.cpp index 93c410c8c..5c0159050 100644 --- a/Firmware/lcd.cpp +++ b/Firmware/lcd.cpp @@ -15,6 +15,7 @@ #include "fastio.h" //-// #include "sound.h" +#include "backlight.h" #define LCD_DEFAULT_DELAY 100 @@ -638,6 +639,7 @@ int8_t lcd_encoder_diff = 0; uint8_t lcd_buttons = 0; uint8_t lcd_button_pressed = 0; uint8_t lcd_update_enabled = 1; +static bool lcd_backlight_wake_trigger; // Flag set by interrupt when the knob is pressed or rotated uint32_t lcd_next_update_millis = 0; @@ -695,8 +697,16 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) { if (lcd_draw_update < lcdDrawUpdateOverride) lcd_draw_update = lcdDrawUpdateOverride; - if (!lcd_update_enabled) - return; + + if (lcd_backlight_wake_trigger) { + lcd_backlight_wake_trigger = false; + backlight_wake(); + } + + backlight_update(); + + if (!lcd_update_enabled) return; + if (lcd_lcdupdate_func) lcd_lcdupdate_func(); } @@ -742,6 +752,7 @@ void lcd_buttons_update(void) if (!buttonBlanking.running() || buttonBlanking.expired(BUTTON_BLANKING_TIME)) { buttonBlanking.start(); safetyTimer.start(); + lcd_backlight_wake_trigger = true; // flag event, knob pressed if ((lcd_button_pressed == 0) && (lcd_long_press_active == 0)) { longPressTimer.start(); @@ -803,6 +814,10 @@ void lcd_buttons_update(void) lcd_encoder_diff--; break; } + + if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) { + lcd_backlight_wake_trigger = true; // flag event, knob rotated + } } lcd_encoder_bits = enc; } diff --git a/Firmware/sound.cpp b/Firmware/sound.cpp index 5cb736683..9630aacb7 100644 --- a/Firmware/sound.cpp +++ b/Firmware/sound.cpp @@ -56,7 +56,6 @@ Sound_SaveMode(); //if critical is true then silend and once mode is ignored void __attribute__((noinline)) Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){ - backlight_wake(); if (critical || eSoundMode != e_SOUND_MODE_SILENT) { if(!tone_) { WRITE(BEEPER, HIGH); @@ -127,7 +126,6 @@ static void Sound_DoSound_Blind_Alert(void) static void Sound_DoSound_Encoder_Move(void) { - backlight_wake(); uint8_t nI; for(nI=0;nI<5;nI++) @@ -141,7 +139,6 @@ uint8_t nI; static void Sound_DoSound_Echo(void) { - backlight_wake(); uint8_t nI; for(nI=0;nI<10;nI++) @@ -163,7 +160,6 @@ WRITE(BEEPER,LOW); static void Sound_DoSound_Alert(bool bOnce) { - backlight_wake(); uint8_t nI,nMax; nMax=bOnce?1:3; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a315aae58..0d8bab7a6 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -7441,7 +7441,6 @@ void menu_lcd_longpress_func(void) // Wake up the LCD backlight and, // start LCD inactivity timer lcd_timeoutToStatus.start(); - backlight_wake(); if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z || menu_block_mask != MENU_BLOCK_NONE || Stopped) { // disable longpress during re-entry, while homing, calibration or if a serious error @@ -7546,7 +7545,6 @@ void menu_lcd_lcdupdate_func(void) } } #endif//CARDINSERTED - backlight_update(); if (lcd_next_update_millis < _millis()) { if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) @@ -7557,13 +7555,11 @@ void menu_lcd_lcdupdate_func(void) Sound_MakeSound(e_SOUND_TYPE_EncoderMove); lcd_encoder_diff = 0; lcd_timeoutToStatus.start(); - backlight_wake(); } if (LCD_CLICKED) { lcd_timeoutToStatus.start(); - backlight_wake(); } (*menu_menu)();