Skip to content

Commit 9fcf74b

Browse files
authored
fix(display): reset display state after native binary is restarted (jetkvm#654)
* fix(usbgadget): add lock for logWithSupression * fix(display): reset display state after native binary is restarted
1 parent 3530990 commit 9fcf74b

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

display.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ import (
99
"time"
1010
)
1111

12-
var currentScreen = "ui_Boot_Screen"
1312
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
1413

14+
var (
15+
currentScreen = "ui_Boot_Screen"
16+
displayedTexts = make(map[string]string)
17+
screenStateLock = sync.Mutex{}
18+
)
19+
1520
var (
1621
dimTicker *time.Ticker
1722
offTicker *time.Ticker
@@ -22,6 +27,8 @@ const (
2227
backlightControlClass string = "/sys/class/backlight/backlight/brightness"
2328
)
2429

30+
// do not call this function directly, use switchToScreenIfDifferent instead
31+
// this function is not thread safe
2532
func switchToScreen(screen string) {
2633
_, err := CallCtrlAction("lv_scr_load", map[string]interface{}{"obj": screen})
2734
if err != nil {
@@ -31,8 +38,6 @@ func switchToScreen(screen string) {
3138
currentScreen = screen
3239
}
3340

34-
var displayedTexts = make(map[string]string)
35-
3641
func lvObjSetState(objName string, state string) (*CtrlResponse, error) {
3742
return CallCtrlAction("lv_obj_set_state", map[string]interface{}{"obj": objName, "state": state})
3843
}
@@ -78,19 +83,33 @@ func lvDispSetRotation(rotation string) (*CtrlResponse, error) {
7883
}
7984

8085
func updateLabelIfChanged(objName string, newText string) {
86+
screenStateLock.Lock()
87+
defer screenStateLock.Unlock()
88+
8189
if newText != "" && newText != displayedTexts[objName] {
8290
_, _ = lvLabelSetText(objName, newText)
8391
displayedTexts[objName] = newText
8492
}
8593
}
8694

8795
func switchToScreenIfDifferent(screenName string) {
96+
screenStateLock.Lock()
97+
defer screenStateLock.Unlock()
98+
8899
if currentScreen != screenName {
89100
displayLogger.Info().Str("from", currentScreen).Str("to", screenName).Msg("switching screen")
90101
switchToScreen(screenName)
91102
}
92103
}
93104

105+
func clearDisplayState() {
106+
screenStateLock.Lock()
107+
defer screenStateLock.Unlock()
108+
109+
displayedTexts = make(map[string]string)
110+
currentScreen = "ui_Boot_Screen"
111+
}
112+
94113
var (
95114
cloudBlinkLock sync.Mutex = sync.Mutex{}
96115
cloudBlinkStopped bool

native.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,13 @@ func restartNativeBinary(binaryPath string) error {
272272
nativeLogger.Warn().Err(err).Msg("failed to restart binary")
273273
}
274274
nativeCmd = cmd
275+
276+
// reset the display state
277+
time.Sleep(1 * time.Second)
278+
clearDisplayState()
279+
updateStaticContents()
280+
requestDisplayUpdate(true)
281+
275282
return err
276283
}
277284

0 commit comments

Comments
 (0)