diff --git a/jsonrpc.go b/jsonrpc.go index 738ee47..349ad83 100644 --- a/jsonrpc.go +++ b/jsonrpc.go @@ -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}, }