Skip to content

Commit d21afe5

Browse files
committed
feat(display.go): use tickers to countdown to dim/off
As suggested by tutman in jetkvm#17, use tickers set to the duration of dim/off to avoid a loop running every second. The tickers are reset to the dim/off times whenever wakeDisplay() is called.
1 parent 2bb6ded commit d21afe5

File tree

1 file changed

+36
-31
lines changed

1 file changed

+36
-31
lines changed

display.go

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import (
1010
)
1111

1212
var currentScreen = "ui_Boot_Screen"
13-
var lastWakeTime = time.Now()
1413
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
1514

15+
var dim_ticker *time.Ticker
16+
var off_ticker *time.Ticker
17+
1618
const (
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

Comments
 (0)