From aaed3765a1aab50e03c4eec15ce5b47fd99cd0fe Mon Sep 17 00:00:00 2001 From: mmdolze Date: Tue, 24 Feb 2009 21:41:04 +0000 Subject: [PATCH] Only update the backlight setting if a change is necessary --- ChangeLog | 1 + server/drivers/hd44780-low.h | 1 + server/drivers/hd44780.c | 14 +++++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index b329e95..d534635 100644 --- a/ChangeLog +++ b/ChangeLog @@ -63,6 +63,7 @@ v.0.5dev (ongoing development) + serialVFD driver: support Siemens/Wincor Nixdorf BA63/66 (Stefan Herdler) + new client lcdident.pl (Ethan Dicks) * server: prevent stalling if time goes backwards (M. Vallevand) + * hd44780 driver: update the backlight setting only on change v.0.5.2 * fix switching on/off the Load screen in lcdproc client using the menu diff --git a/server/drivers/hd44780-low.h b/server/drivers/hd44780-low.h index 2896563..a6b55b8 100644 --- a/server/drivers/hd44780-low.h +++ b/server/drivers/hd44780-low.h @@ -195,6 +195,7 @@ typedef struct hd44780_private_data { int contrast; // Contrast setting (range 0 - 1000) int brightness; // Brightness when backlight is "on" (range 0 - 1000) int offbrightness; // Brightness when backlight is "off" (range 0 - 1000) + int backlightstate; // Saves the last backlight state } PrivateData; diff --git a/server/drivers/hd44780.c b/server/drivers/hd44780.c index 8c2f7b2..45758c2 100644 --- a/server/drivers/hd44780.c +++ b/server/drivers/hd44780.c @@ -158,6 +158,7 @@ HD44780_init(Driver *drvthis) p->cellheight = 8; /* Do not change this !!! This is a controller property, not a display property !!! */ p->cellwidth = 5; p->ccmode = standard; + p->backlightstate = -1; // Init to invalid value //// READ THE CONFIG FILE @@ -842,7 +843,9 @@ HD44780_set_brightness(Driver *drvthis, int state, int promille) else { p->offbrightness = promille; } - //HD44780_backlight(drvthis, state); + + // Make last backlight state invalid to force update on next rendering + p->backlightstate = -1; } @@ -856,13 +859,14 @@ HD44780_backlight(Driver *drvthis, int on) { PrivateData *p = (PrivateData *) drvthis->private_data; - // not sure if this is the correct solution. - // alternative: return immediately - if (!p->have_backlight) - on = 0; + // Immediately return if no backlight is available or no change is necessary + if (!p->have_backlight || p->backlightstate == on) + return; if (p->hd44780_functions->backlight != NULL) p->hd44780_functions->backlight(p, on); + + p->backlightstate = on; }