mirror of https://github.com/jetkvm/kvm.git
fix(display): reset display state after native binary is restarted (#654)
* fix(usbgadget): add lock for logWithSupression * fix(display): reset display state after native binary is restarted
This commit is contained in:
parent
353099001f
commit
9fcf74b398
25
display.go
25
display.go
|
@ -9,9 +9,14 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var currentScreen = "ui_Boot_Screen"
|
|
||||||
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
|
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
|
||||||
|
|
||||||
|
var (
|
||||||
|
currentScreen = "ui_Boot_Screen"
|
||||||
|
displayedTexts = make(map[string]string)
|
||||||
|
screenStateLock = sync.Mutex{}
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
dimTicker *time.Ticker
|
dimTicker *time.Ticker
|
||||||
offTicker *time.Ticker
|
offTicker *time.Ticker
|
||||||
|
@ -22,6 +27,8 @@ const (
|
||||||
backlightControlClass string = "/sys/class/backlight/backlight/brightness"
|
backlightControlClass string = "/sys/class/backlight/backlight/brightness"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// do not call this function directly, use switchToScreenIfDifferent instead
|
||||||
|
// this function is not thread safe
|
||||||
func switchToScreen(screen string) {
|
func switchToScreen(screen string) {
|
||||||
_, err := CallCtrlAction("lv_scr_load", map[string]interface{}{"obj": screen})
|
_, err := CallCtrlAction("lv_scr_load", map[string]interface{}{"obj": screen})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -31,8 +38,6 @@ func switchToScreen(screen string) {
|
||||||
currentScreen = screen
|
currentScreen = screen
|
||||||
}
|
}
|
||||||
|
|
||||||
var displayedTexts = make(map[string]string)
|
|
||||||
|
|
||||||
func lvObjSetState(objName string, state string) (*CtrlResponse, error) {
|
func lvObjSetState(objName string, state string) (*CtrlResponse, error) {
|
||||||
return CallCtrlAction("lv_obj_set_state", map[string]interface{}{"obj": objName, "state": state})
|
return CallCtrlAction("lv_obj_set_state", map[string]interface{}{"obj": objName, "state": state})
|
||||||
}
|
}
|
||||||
|
@ -78,6 +83,9 @@ func lvDispSetRotation(rotation string) (*CtrlResponse, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateLabelIfChanged(objName string, newText string) {
|
func updateLabelIfChanged(objName string, newText string) {
|
||||||
|
screenStateLock.Lock()
|
||||||
|
defer screenStateLock.Unlock()
|
||||||
|
|
||||||
if newText != "" && newText != displayedTexts[objName] {
|
if newText != "" && newText != displayedTexts[objName] {
|
||||||
_, _ = lvLabelSetText(objName, newText)
|
_, _ = lvLabelSetText(objName, newText)
|
||||||
displayedTexts[objName] = newText
|
displayedTexts[objName] = newText
|
||||||
|
@ -85,12 +93,23 @@ func updateLabelIfChanged(objName string, newText string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func switchToScreenIfDifferent(screenName string) {
|
func switchToScreenIfDifferent(screenName string) {
|
||||||
|
screenStateLock.Lock()
|
||||||
|
defer screenStateLock.Unlock()
|
||||||
|
|
||||||
if currentScreen != screenName {
|
if currentScreen != screenName {
|
||||||
displayLogger.Info().Str("from", currentScreen).Str("to", screenName).Msg("switching screen")
|
displayLogger.Info().Str("from", currentScreen).Str("to", screenName).Msg("switching screen")
|
||||||
switchToScreen(screenName)
|
switchToScreen(screenName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func clearDisplayState() {
|
||||||
|
screenStateLock.Lock()
|
||||||
|
defer screenStateLock.Unlock()
|
||||||
|
|
||||||
|
displayedTexts = make(map[string]string)
|
||||||
|
currentScreen = "ui_Boot_Screen"
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
cloudBlinkLock sync.Mutex = sync.Mutex{}
|
cloudBlinkLock sync.Mutex = sync.Mutex{}
|
||||||
cloudBlinkStopped bool
|
cloudBlinkStopped bool
|
||||||
|
|
|
@ -272,6 +272,13 @@ func restartNativeBinary(binaryPath string) error {
|
||||||
nativeLogger.Warn().Err(err).Msg("failed to restart binary")
|
nativeLogger.Warn().Err(err).Msg("failed to restart binary")
|
||||||
}
|
}
|
||||||
nativeCmd = cmd
|
nativeCmd = cmd
|
||||||
|
|
||||||
|
// reset the display state
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
clearDisplayState()
|
||||||
|
updateStaticContents()
|
||||||
|
requestDisplayUpdate(true)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue