diff -Nur vdr-graphlcd-pre-0.2.0-skinning-branch_rev278/display.c vdr-graphlcd-pre-0.2.0-skinning-branch_rev278wa/display.c --- vdr-graphlcd-pre-0.2.0-skinning-branch_rev278/display.c 2009-06-30 00:28:06.000000000 +0200 +++ vdr-graphlcd-pre-0.2.0-skinning-branch_rev278wa/display.c 2009-06-30 00:51:57.000000000 +0200 @@ -44,6 +44,10 @@ mLastState = StateNormal; mShowVolume = false; + + nCurrentBrightness = -1; + LastTimeBrightness = 0; + bBrightnessActive = true; } cGraphLCDDisplay::~cGraphLCDDisplay() @@ -173,6 +177,13 @@ mUpdate = true; } + // update display if BrightnessDelay is exceeded + if ((nCurrentBrightness == GraphLCDSetup.BrightnessActive) && + ((cTimeMs::Now() - LastTimeBrightness) > (uint64_t) (GraphLCDSetup.BrightnessDelay*1000))) + { + mUpdate = true; + } + if (mUpdate) { mUpdateAt = 0; @@ -206,6 +217,7 @@ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height(), mScreen->LineSize()); mLcd->Refresh(false); mLastTimeMs = currTimeMs; + SetBrightness(); } else { @@ -297,3 +309,41 @@ } UpdateIn(100); } + +void cGraphLCDDisplay::SetBrightness() +{ + //mutex.Lock(); + bool bActive = bBrightnessActive + || (mState != StateNormal) + || (GraphLCDSetup.ShowVolume && mShowVolume) + || (GraphLCDSetup.ShowMessages && mGraphLCDState->ShowMessage()) + || (GraphLCDSetup.BrightnessDelay == 900); + if (bActive) + { + LastTimeBrightness = cTimeMs::Now(); + bBrightnessActive = false; + } + if ((bActive ? GraphLCDSetup.BrightnessActive : GraphLCDSetup.BrightnessIdle) != nCurrentBrightness) + { + if (bActive) + { + mLcd->SetBrightness(GraphLCDSetup.BrightnessActive); + nCurrentBrightness = GraphLCDSetup.BrightnessActive; + } + else + { + if (GraphLCDSetup.BrightnessDelay < 1 + || ((cTimeMs::Now() - LastTimeBrightness) > (uint64_t) (GraphLCDSetup.BrightnessDelay*1000))) + { + mLcd->SetBrightness(GraphLCDSetup.BrightnessIdle); + nCurrentBrightness = GraphLCDSetup.BrightnessIdle; + } + } + } + //mutex.Unlock(); +} + +void cGraphLCDDisplay::ForceUpdateBrightness() { + bBrightnessActive = true; + SetBrightness(); +} diff -Nur vdr-graphlcd-pre-0.2.0-skinning-branch_rev278/display.h vdr-graphlcd-pre-0.2.0-skinning-branch_rev278wa/display.h --- vdr-graphlcd-pre-0.2.0-skinning-branch_rev278/display.h 2009-06-30 00:28:06.000000000 +0200 +++ vdr-graphlcd-pre-0.2.0-skinning-branch_rev278wa/display.h 2009-06-30 00:51:58.000000000 +0200 @@ -53,6 +53,8 @@ void SetMenuCurrent(); const GLCD::cBitmap * GetScreen() const { return mScreen; } + void ForceUpdateBrightness(); + protected: virtual void Action(); @@ -75,6 +77,12 @@ bool mShowVolume; void UpdateIn(uint64_t msec); + + /** set brightness depending on user activity */ + void SetBrightness(); + uint64_t LastTimeBrightness; + int nCurrentBrightness; + bool bBrightnessActive; }; #endif diff -Nur vdr-graphlcd-pre-0.2.0-skinning-branch_rev278/state.c vdr-graphlcd-pre-0.2.0-skinning-branch_rev278wa/state.c --- vdr-graphlcd-pre-0.2.0-skinning-branch_rev278/state.c 2009-06-30 00:28:06.000000000 +0200 +++ vdr-graphlcd-pre-0.2.0-skinning-branch_rev278wa/state.c 2009-06-30 00:52:07.000000000 +0200 @@ -566,6 +566,7 @@ //printf("graphlcd plugin: cGraphLCDState::OsdChannel %s\n", Text); if (GraphLCDSetup.PluginActive) { + mDisplay->ForceUpdateBrightness(); if (Text) mDisplay->Update(); }