@@ -9,9 +9,14 @@ import (
9
9
"time"
10
10
)
11
11
12
- var currentScreen = "ui_Boot_Screen"
13
12
var backlightState = 0 // 0 - NORMAL, 1 - DIMMED, 2 - OFF
14
13
14
+ var (
15
+ currentScreen = "ui_Boot_Screen"
16
+ displayedTexts = make (map [string ]string )
17
+ screenStateLock = sync.Mutex {}
18
+ )
19
+
15
20
var (
16
21
dimTicker * time.Ticker
17
22
offTicker * time.Ticker
@@ -22,6 +27,8 @@ const (
22
27
backlightControlClass string = "/sys/class/backlight/backlight/brightness"
23
28
)
24
29
30
+ // do not call this function directly, use switchToScreenIfDifferent instead
31
+ // this function is not thread safe
25
32
func switchToScreen (screen string ) {
26
33
_ , err := CallCtrlAction ("lv_scr_load" , map [string ]interface {}{"obj" : screen })
27
34
if err != nil {
@@ -31,8 +38,6 @@ func switchToScreen(screen string) {
31
38
currentScreen = screen
32
39
}
33
40
34
- var displayedTexts = make (map [string ]string )
35
-
36
41
func lvObjSetState (objName string , state string ) (* CtrlResponse , error ) {
37
42
return CallCtrlAction ("lv_obj_set_state" , map [string ]interface {}{"obj" : objName , "state" : state })
38
43
}
@@ -78,19 +83,33 @@ func lvDispSetRotation(rotation string) (*CtrlResponse, error) {
78
83
}
79
84
80
85
func updateLabelIfChanged (objName string , newText string ) {
86
+ screenStateLock .Lock ()
87
+ defer screenStateLock .Unlock ()
88
+
81
89
if newText != "" && newText != displayedTexts [objName ] {
82
90
_ , _ = lvLabelSetText (objName , newText )
83
91
displayedTexts [objName ] = newText
84
92
}
85
93
}
86
94
87
95
func switchToScreenIfDifferent (screenName string ) {
96
+ screenStateLock .Lock ()
97
+ defer screenStateLock .Unlock ()
98
+
88
99
if currentScreen != screenName {
89
100
displayLogger .Info ().Str ("from" , currentScreen ).Str ("to" , screenName ).Msg ("switching screen" )
90
101
switchToScreen (screenName )
91
102
}
92
103
}
93
104
105
+ func clearDisplayState () {
106
+ screenStateLock .Lock ()
107
+ defer screenStateLock .Unlock ()
108
+
109
+ displayedTexts = make (map [string ]string )
110
+ currentScreen = "ui_Boot_Screen"
111
+ }
112
+
94
113
var (
95
114
cloudBlinkLock sync.Mutex = sync.Mutex {}
96
115
cloudBlinkStopped bool
0 commit comments