From 9517677fb29b6d9524de6516ebb9a61faffe4f3b Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:54:25 +0100 Subject: [PATCH] Fix initial displaydimmer state --- tasmota/tasmota_xdrv_driver/xdrv_13_display.ino | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino b/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino index 5c4ce996e..bbd9802aa 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino @@ -237,6 +237,7 @@ uint16_t dsp_rad; uint16_t dsp_color; int16_t dsp_len; +bool disp_apply_display_dimmer_request = false; int8_t disp_power = -1; uint8_t disp_device = 0; uint8_t disp_refresh = 1; @@ -1840,15 +1841,12 @@ void DisplayLocalSensor(void) \*********************************************************************************************/ void DisplayInitDriver(void) { - - - XdspCall(FUNC_DISPLAY_INIT_DRIVER); // AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "Display model %d"), Settings->display_model); if (Settings->display_model) { -// ApplyDisplayDimmer(); // Not allowed here. Way too early in initi sequence. IE power state has not even been set at this point in time +// ApplyDisplayDimmer(); // Not allowed here. Way too early in init sequence. Global power state has not been set at this point in time #ifdef USE_MULTI_DISPLAY Set_display(0); @@ -1999,7 +1997,9 @@ void CmndDisplayMode(void) { // Apply the current display dimmer void ApplyDisplayDimmer(void) { + disp_apply_display_dimmer_request = true; if ((disp_power < 0) || !disp_device) { return; } // Not initialized yet + disp_apply_display_dimmer_request = false; uint8_t dimmer8 = changeUIntScale(GetDisplayDimmer(), 0, 100, 0, 255); uint16_t dimmer10_gamma = ledGamma10(dimmer8); @@ -2896,6 +2896,11 @@ bool Xdrv13(uint32_t function) case FUNC_PRE_INIT: DisplayInitDriver(); break; + case FUNC_INIT: + if (disp_apply_display_dimmer_request) { + ApplyDisplayDimmer(); // Allowed here. + } + break; case FUNC_EVERY_50_MSECOND: if (Settings->display_model) { XdspCall(FUNC_DISPLAY_EVERY_50_MSECOND); } break;