feat(rpc): implement display backlight control methods

This commit is contained in:
Cameron Fleming 2025-01-27 20:49:41 +00:00
parent cabe5b07ab
commit 309d30d3c3
1 changed files with 23 additions and 10 deletions

View File

@ -225,13 +225,14 @@ func rpcTryUpdate() error {
return nil
}
func rpcSetBacklightSettings(data *BacklightSettings) error {
func rpcSetBacklightSettings(params BacklightSettings) error {
LoadConfig()
blConfig := *data
blConfig := params
if blConfig.MaxBrightness > 100 || blConfig.MaxBrightness < 0 {
return fmt.Errorf("maxBrightness must be between 0 and 100")
// NOTE: by default, the frontend limits the brightness to 64, as that's what the device originally shipped with.
if blConfig.MaxBrightness > 255 || blConfig.MaxBrightness < 0 {
return fmt.Errorf("maxBrightness must be between 0 and 255")
}
if blConfig.DimAfter < 0 {
@ -243,12 +244,24 @@ func rpcSetBacklightSettings(data *BacklightSettings) error {
}
config.DisplayMaxBrightness = blConfig.MaxBrightness
config.DisplayDimAfterMs = int64(blConfig.DimAfter)
config.DisplayOffAfterMs = int64(blConfig.OffAfter)
config.DisplayDimAfterSec = blConfig.DimAfter
config.DisplayOffAfterSec = blConfig.OffAfter
if err := SaveConfig(); err != nil {
return fmt.Errorf("failed to save config: %w", err)
}
log.Printf("rpc: display: settings applied, max_brightness: %d, dim after: %ds, off after: %ds", config.DisplayMaxBrightness, config.DisplayDimAfterSec, config.DisplayOffAfterSec)
// If the device started up with auto-dim and/or auto-off set to zero, the display init
// method will not have started the tickers. So in case that has changed, attempt to start the tickers now.
startBacklightTickers()
// Wake the display after the settings are altered, this ensures the tickers
// are reset to the new settings, and will bring the display up to maxBrightness.
// Calling with force set to true, to ignore the current state of the display, and force
// it to reset the tickers.
wakeDisplay(true)
return nil
}
@ -257,8 +270,8 @@ func rpcGetBacklightSettings() (*BacklightSettings, error) {
return &BacklightSettings{
MaxBrightness: config.DisplayMaxBrightness,
DimAfter: int(config.DisplayDimAfterMs),
OffAfter: int(config.DisplayOffAfterMs),
DimAfter: int(config.DisplayDimAfterSec),
OffAfter: int(config.DisplayOffAfterSec),
}, nil
}
@ -422,7 +435,7 @@ func callRPCHandler(handler RPCHandler, params map[string]interface{}) (interfac
}
args[i] = reflect.ValueOf(newStruct).Elem()
} else {
return nil, fmt.Errorf("invalid parameter type for: %s", paramName)
return nil, fmt.Errorf("invalid parameter type for: %s, type: %s", paramName, paramType.Kind())
}
} else {
args[i] = convertedValue.Convert(paramType)
@ -597,6 +610,6 @@ var rpcHandlers = map[string]RPCHandler{
"getWakeOnLanDevices": {Func: rpcGetWakeOnLanDevices},
"setWakeOnLanDevices": {Func: rpcSetWakeOnLanDevices, Params: []string{"params"}},
"resetConfig": {Func: rpcResetConfig},
"setBacklightSettings": {Func: rpcSetBacklightSettings, Params: []string{"settings"}},
"setBacklightSettings": {Func: rpcSetBacklightSettings, Params: []string{"params"}},
"getBacklightSettings": {Func: rpcGetBacklightSettings},
}