Compare commits

..

1 Commits

Author SHA1 Message Date
Marc Brooks a2a8d99397
Merge ba23da6973 into 37b1a8bf34 2025-09-12 11:35:56 +02:00
3 changed files with 32 additions and 60 deletions

View File

@ -1,7 +1,6 @@
package kvm package kvm
import ( import (
"context"
"errors" "errors"
"fmt" "fmt"
"os" "os"
@ -111,6 +110,12 @@ func clearDisplayState() {
currentScreen = "ui_Boot_Screen" currentScreen = "ui_Boot_Screen"
} }
var (
cloudBlinkLock sync.Mutex = sync.Mutex{}
cloudBlinkStopped bool
cloudBlinkTicker *time.Ticker
)
func updateDisplay() { func updateDisplay() {
updateLabelIfChanged("ui_Home_Content_Ip", networkState.IPv4String()) updateLabelIfChanged("ui_Home_Content_Ip", networkState.IPv4String())
if usbState == "configured" { if usbState == "configured" {
@ -147,81 +152,48 @@ func updateDisplay() {
stopCloudBlink() stopCloudBlink()
case CloudConnectionStateConnecting: case CloudConnectionStateConnecting:
_, _ = lvImgSetSrc("ui_Home_Header_Cloud_Status_Icon", "cloud.png") _, _ = lvImgSetSrc("ui_Home_Header_Cloud_Status_Icon", "cloud.png")
restartCloudBlink() startCloudBlink()
case CloudConnectionStateConnected: case CloudConnectionStateConnected:
_, _ = lvImgSetSrc("ui_Home_Header_Cloud_Status_Icon", "cloud.png") _, _ = lvImgSetSrc("ui_Home_Header_Cloud_Status_Icon", "cloud.png")
stopCloudBlink() stopCloudBlink()
} }
} }
const ( func startCloudBlink() {
cloudBlinkInterval = 2 * time.Second if cloudBlinkTicker == nil {
cloudBlinkDuration = 1 * time.Second cloudBlinkTicker = time.NewTicker(2 * time.Second)
) } else {
// do nothing if the blink isn't stopped
if cloudBlinkStopped {
cloudBlinkLock.Lock()
defer cloudBlinkLock.Unlock()
var ( cloudBlinkStopped = false
cloudBlinkTicker *time.Ticker cloudBlinkTicker.Reset(2 * time.Second)
cloudBlinkCancel context.CancelFunc }
cloudBlinkLock = sync.Mutex{} }
)
func doCloudBlink(ctx context.Context) { go func() {
for range cloudBlinkTicker.C { for range cloudBlinkTicker.C {
if cloudConnectionState != CloudConnectionStateConnecting { if cloudConnectionState != CloudConnectionStateConnecting {
continue continue
} }
_, _ = lvObjFadeOut("ui_Home_Header_Cloud_Status_Icon", 1000)
_, _ = lvObjFadeOut("ui_Home_Header_Cloud_Status_Icon", uint32(cloudBlinkDuration.Milliseconds())) time.Sleep(1000 * time.Millisecond)
_, _ = lvObjFadeIn("ui_Home_Header_Cloud_Status_Icon", 1000)
select { time.Sleep(1000 * time.Millisecond)
case <-ctx.Done():
return
case <-time.After(cloudBlinkDuration):
} }
}()
_, _ = lvObjFadeIn("ui_Home_Header_Cloud_Status_Icon", uint32(cloudBlinkDuration.Milliseconds()))
select {
case <-ctx.Done():
return
case <-time.After(cloudBlinkDuration):
}
}
}
func restartCloudBlink() {
stopCloudBlink()
startCloudBlink()
}
func startCloudBlink() {
cloudBlinkLock.Lock()
defer cloudBlinkLock.Unlock()
if cloudBlinkTicker == nil {
cloudBlinkTicker = time.NewTicker(cloudBlinkInterval)
} else {
cloudBlinkTicker.Reset(cloudBlinkInterval)
}
ctx, cancel := context.WithCancel(context.Background())
cloudBlinkCancel = cancel
go doCloudBlink(ctx)
} }
func stopCloudBlink() { func stopCloudBlink() {
cloudBlinkLock.Lock()
defer cloudBlinkLock.Unlock()
if cloudBlinkCancel != nil {
cloudBlinkCancel()
cloudBlinkCancel = nil
}
if cloudBlinkTicker != nil { if cloudBlinkTicker != nil {
cloudBlinkTicker.Stop() cloudBlinkTicker.Stop()
} }
cloudBlinkLock.Lock()
defer cloudBlinkLock.Unlock()
cloudBlinkStopped = true
} }
var ( var (

Binary file not shown.

View File

@ -1 +1 @@
01db2bbcd0bad46c3e21eb3cc5687d15df2153c3d8e2d4665b37acb55f0b5a57 6dabd0e657dd099280d9173069687786a4a8c9c25cf7f9e7ce2f940cab67c521