diff --git a/display.go b/display.go index cf1a0cc..274bb8b 100644 --- a/display.go +++ b/display.go @@ -9,9 +9,14 @@ import ( "time" ) -var currentScreen = "ui_Boot_Screen" var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF +var ( + currentScreen = "ui_Boot_Screen" + displayedTexts = make(map[string]string) + screenStateLock = sync.Mutex{} +) + var ( dimTicker *time.Ticker offTicker *time.Ticker @@ -22,6 +27,8 @@ const ( 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) { _, err := CallCtrlAction("lv_scr_load", map[string]interface{}{"obj": screen}) if err != nil { @@ -31,8 +38,6 @@ func switchToScreen(screen string) { currentScreen = screen } -var displayedTexts = make(map[string]string) - func lvObjSetState(objName string, state string) (*CtrlResponse, error) { 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) { + screenStateLock.Lock() + defer screenStateLock.Unlock() + if newText != "" && newText != displayedTexts[objName] { _, _ = lvLabelSetText(objName, newText) displayedTexts[objName] = newText @@ -85,12 +93,23 @@ func updateLabelIfChanged(objName string, newText string) { } func switchToScreenIfDifferent(screenName string) { + screenStateLock.Lock() + defer screenStateLock.Unlock() + if currentScreen != screenName { displayLogger.Info().Str("from", currentScreen).Str("to", screenName).Msg("switching screen") switchToScreen(screenName) } } +func clearDisplayState() { + screenStateLock.Lock() + defer screenStateLock.Unlock() + + displayedTexts = make(map[string]string) + currentScreen = "ui_Boot_Screen" +} + var ( cloudBlinkLock sync.Mutex = sync.Mutex{} cloudBlinkStopped bool diff --git a/native.go b/native.go index e2da36a..92bb3a1 100644 --- a/native.go +++ b/native.go @@ -272,6 +272,13 @@ func restartNativeBinary(binaryPath string) error { nativeLogger.Warn().Err(err).Msg("failed to restart binary") } nativeCmd = cmd + + // reset the display state + time.Sleep(1 * time.Second) + clearDisplayState() + updateStaticContents() + requestDisplayUpdate(true) + return err }