mirror of https://github.com/jetkvm/kvm.git
feat(display.go): use tickers to countdown to dim/off
As suggested by tutman in https://github.com/jetkvm/kvm/pull/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.
This commit is contained in:
parent
daaddefe51
commit
79bac39b6b
73
display.go
73
display.go
|
@ -10,9 +10,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var currentScreen = "ui_Boot_Screen"
|
var currentScreen = "ui_Boot_Screen"
|
||||||
var lastWakeTime = time.Now()
|
|
||||||
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
|
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
|
||||||
|
|
||||||
|
var dim_ticker *time.Ticker
|
||||||
|
var off_ticker *time.Ticker
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TOUCHSCREEN_DEVICE string = "/dev/input/event1"
|
TOUCHSCREEN_DEVICE string = "/dev/input/event1"
|
||||||
BACKLIGHT_CONTROL_CLASS string = "/sys/class/backlight/backlight/brightness"
|
BACKLIGHT_CONTROL_CLASS string = "/sys/class/backlight/backlight/brightness"
|
||||||
|
@ -119,34 +121,30 @@ func setDisplayBrightness(brightness int) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// displayTimeoutTick checks the time the display was last woken, and compares that to the
|
// tick_displayDim() is called when when dim ticker expires, it simply reduces the brightness
|
||||||
// config's displayTimeout values to decide whether or not to dim/switch off the display.
|
// of the display by half of the max brightness.
|
||||||
func displayTimeoutTick() {
|
func tick_displayDim() {
|
||||||
tn := time.Now()
|
err := setDisplayBrightness(config.DisplayMaxBrightness / 2)
|
||||||
td := tn.Sub(lastWakeTime).Milliseconds()
|
if err != nil {
|
||||||
|
fmt.Printf("display: failed to dim display: %s\n", err)
|
||||||
if td > config.DisplayOffAfterMs && config.DisplayOffAfterMs != 0 && (backlightState == 1 || backlightState == 0) {
|
|
||||||
// Display fully off
|
|
||||||
|
|
||||||
backlightState = 2
|
|
||||||
err := setDisplayBrightness(0)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("display: timeout: Failed to switch off backlight: %s\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if td > config.DisplayDimAfterMs && config.DisplayDimAfterMs != 0 && backlightState == 0 {
|
|
||||||
// Display dimming
|
|
||||||
|
|
||||||
// Get 50% of max brightness, rounded up.
|
|
||||||
dimBright := config.DisplayMaxBrightness / 2
|
|
||||||
fmt.Printf("display: timeout: target dim brightness: %v\n", dimBright)
|
|
||||||
|
|
||||||
backlightState = 1
|
|
||||||
err := setDisplayBrightness(dimBright)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("display: timeout: Failed to dim backlight: %s\n", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dim_ticker.Stop()
|
||||||
|
|
||||||
|
backlightState = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// tick_displayOff() is called when the off ticker expires, it turns off the display
|
||||||
|
// by setting the brightness to zero.
|
||||||
|
func tick_displayOff() {
|
||||||
|
err := setDisplayBrightness(0)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("display: failed to turn off display: %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
off_ticker.Stop()
|
||||||
|
|
||||||
|
backlightState = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
// wakeDisplay sets the display brightness back to config.DisplayMaxBrightness and stores the time the display
|
// wakeDisplay sets the display brightness back to config.DisplayMaxBrightness and stores the time the display
|
||||||
|
@ -165,7 +163,8 @@ func wakeDisplay() {
|
||||||
fmt.Printf("display wake failed, %s\n", err)
|
fmt.Printf("display wake failed, %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
lastWakeTime = time.Now()
|
dim_ticker.Reset(time.Duration(config.DisplayDimAfterMs) * time.Millisecond)
|
||||||
|
off_ticker.Reset(time.Duration(config.DisplayOffAfterMs) * time.Millisecond)
|
||||||
backlightState = 0
|
backlightState = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,14 +209,20 @@ func init() {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
// Start display auto-sleeping ticker
|
LoadConfig()
|
||||||
ticker := time.NewTicker(1 * time.Second)
|
// Start display auto-sleeping tickers
|
||||||
defer ticker.Stop()
|
dim_ticker = time.NewTicker(time.Duration(config.DisplayDimAfterMs) * time.Millisecond)
|
||||||
|
defer dim_ticker.Stop()
|
||||||
|
|
||||||
|
off_ticker = time.NewTicker(time.Duration(config.DisplayOffAfterMs) * time.Millisecond)
|
||||||
|
defer off_ticker.Stop()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ticker.C:
|
case <-dim_ticker.C:
|
||||||
displayTimeoutTick()
|
tick_displayDim()
|
||||||
|
case <-off_ticker.C:
|
||||||
|
tick_displayOff()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
Loading…
Reference in New Issue