@@ -10,9 +10,11 @@ import (
1010)
1111
1212var  currentScreen  =  "ui_Boot_Screen" 
13- var  lastWakeTime  =  time .Now ()
1413var  backlightState  =  0  // 0 - NORMAL, 1 - DIMMED, 2 - OFF 
1514
15+ var  dim_ticker  * time.Ticker 
16+ var  off_ticker  * time.Ticker 
17+ 
1618const  (
1719	TOUCHSCREEN_DEVICE       string  =  "/dev/input/event1" 
1820	BACKLIGHT_CONTROL_CLASS  string  =  "/sys/class/backlight/backlight/brightness" 
@@ -115,38 +117,34 @@ func setDisplayBrightness(brightness int) error {
115117		return  err 
116118	}
117119
118- 	fmt .Printf ("display: set brightness to %v" , brightness )
120+ 	fmt .Printf ("display: set brightness to %v\n " , brightness )
119121	return  nil 
120122}
121123
122- // displayTimeoutTick checks the time the display was last woken, and compares that to the 
123- // config's displayTimeout values to decide whether or not to dim/switch off the display. 
124- func  displayTimeoutTick () {
125- 	tn  :=  time .Now ()
126- 	td  :=  tn .Sub (lastWakeTime ).Milliseconds ()
124+ // tick_displayDim() is called when when dim ticker expires, it simply reduces the brightness 
125+ // of the display by half of the max brightness. 
126+ func  tick_displayDim () {
127+ 	err  :=  setDisplayBrightness (config .DisplayMaxBrightness  /  2 )
128+ 	if  err  !=  nil  {
129+ 		fmt .Printf ("display: failed to dim display: %s\n " , err )
130+ 	}
127131
128- 	if  td  >  config .DisplayOffAfterMs  &&  config .DisplayOffAfterMs  !=  0  &&  (backlightState  ==  1  ||  backlightState  ==  0 ) {
129- 		// Display fully off 
132+ 	dim_ticker .Stop ()
130133
131- 		backlightState  =  2 
132- 		err  :=  setDisplayBrightness (0 )
133- 		if  err  !=  nil  {
134- 			fmt .Printf ("display: timeout: Failed to switch off backlight: %s\n " , err )
135- 		}
134+ 	backlightState  =  1 
135+ }
136136
137- 	} else  if  td  >  config .DisplayDimAfterMs  &&  config .DisplayDimAfterMs  !=  0  &&  backlightState  ==  0  {
138- 		// Display dimming 
137+ // tick_displayOff() is called when the off ticker expires, it turns off the display 
138+ // by setting the brightness to zero. 
139+ func  tick_displayOff () {
140+ 	err  :=  setDisplayBrightness (0 )
141+ 	if  err  !=  nil  {
142+ 		fmt .Printf ("display: failed to turn off display: %s\n " , err )
143+ 	}
139144
140- 		// Get 50% of max brightness, rounded up. 
141- 		dimBright  :=  config .DisplayMaxBrightness  /  2 
142- 		fmt .Printf ("display: timeout: target dim brightness: %v\n " , dimBright )
145+ 	off_ticker .Stop ()
143146
144- 		backlightState  =  1 
145- 		err  :=  setDisplayBrightness (dimBright )
146- 		if  err  !=  nil  {
147- 			fmt .Printf ("display: timeout: Failed to dim backlight: %s\n " , err )
148- 		}
149- 	}
147+ 	backlightState  =  2 
150148}
151149
152150// wakeDisplay sets the display brightness back to config.DisplayMaxBrightness and stores the time the display 
@@ -165,7 +163,8 @@ func wakeDisplay() {
165163		fmt .Printf ("display wake failed, %s\n " , err )
166164	}
167165
168- 	lastWakeTime  =  time .Now ()
166+ 	dim_ticker .Reset (time .Duration (config .DisplayDimAfterMs ) *  time .Millisecond )
167+ 	off_ticker .Reset (time .Duration (config .DisplayOffAfterMs ) *  time .Millisecond )
169168	backlightState  =  0 
170169}
171170
@@ -210,14 +209,20 @@ func init() {
210209	}()
211210
212211	go  func () {
213- 		// Start display auto-sleeping ticker 
214- 		ticker  :=  time .NewTicker (1  *  time .Second )
215- 		defer  ticker .Stop ()
212+ 		LoadConfig ()
213+ 		// Start display auto-sleeping tickers 
214+ 		dim_ticker  =  time .NewTicker (time .Duration (config .DisplayDimAfterMs ) *  time .Millisecond )
215+ 		defer  dim_ticker .Stop ()
216+ 
217+ 		off_ticker  =  time .NewTicker (time .Duration (config .DisplayOffAfterMs ) *  time .Millisecond )
218+ 		defer  off_ticker .Stop ()
216219
217220		for  {
218221			select  {
219- 			case  <- ticker .C :
220- 				displayTimeoutTick ()
222+ 			case  <- dim_ticker .C :
223+ 				tick_displayDim ()
224+ 			case  <- off_ticker .C :
225+ 				tick_displayOff ()
221226			}
222227		}
223228	}()
0 commit comments