| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.settings; |
| |
| using fuchsia.ui.types; |
| |
| const uint8 MAX_LIGHT_NAME_LENGTH = 32; |
| |
| /// Enum describing the possible types of values for controlling a light. |
| enum LightType { |
| /// This type of light supports setting brightness to a uint8_t value. |
| BRIGHTNESS = 1; |
| |
| /// This type of light supports setting an RGB value. |
| RGB = 2; |
| |
| /// Light can only be turned on or off. |
| SIMPLE = 3; |
| }; |
| |
| /// State of a given light. |
| table LightState { |
| 1: LightValue value; |
| }; |
| |
| /// Value of a light. Only one of the three values in the union will be present, |
| /// depending on the light's LightType. |
| union LightValue { |
| /// Lights with LightType.SIMPLE will have this value. |
| 1: bool on; |
| |
| /// Lights with LightType.BRIGHTNESS will have this value, a floating point |
| /// value 0.0 to 1.0 inclusive, where 0.0 means the light is off. |
| 2: float64 brightness; |
| |
| /// Lights with LightType.RGB will have this value. |
| /// |
| /// Each color channel should be a value between 0.0 and 1.0 inclusive. |
| /// Values outside this range will cause SetLightGroup to fail with |
| /// INVALID_VALUE. |
| 3: fuchsia.ui.types.ColorRgb color; |
| }; |
| |
| /// Information about a controllable light group. A group may have one or more |
| /// lights. |
| table LightGroup { |
| /// Identifier for this light group, clients should pass this back into the |
| /// service to set the group's light values. |
| 1: string:MAX_LIGHT_NAME_LENGTH name; |
| |
| /// True if the light group is enabled and changes will be visible to the |
| /// user. False if the light group is forced off by hardware. If the light |
| /// group is disabled, its value can still be set, but the change may not be |
| /// visible until the light group is back on. |
| 2: bool enabled; |
| |
| /// Defines the acceptable value type for controlling this light group. |
| 3: LightType type; |
| |
| /// States of the lights in this group. |
| 4: vector<LightState>:MAX lights; |
| }; |
| |
| enum LightError { |
| /// Call failed for unspecified reasons. |
| FAILED = 1; |
| |
| /// Call not supported, this setting may not be present on this . |
| UNSUPPORTED = 2; |
| |
| /// An invalid/unknown light group name was provided. |
| INVALID_NAME = 3; |
| |
| /// An invalid LightValue was provided that did not match the light group's |
| /// LightType or did not match the requirements for the value type. |
| INVALID_VALUE = 4; |
| }; |
| |
| [Discoverable] |
| protocol Light { |
| /// Fetches information on the controllable light groups on the device. |
| /// Returns immediately on first call; subsequent calls return when the |
| /// value changes. |
| /// |
| /// If this call fails, it is considered a fatal error and the channel |
| /// will be closed. |
| WatchLightGroups() -> (vector<LightGroup>:MAX groups); |
| |
| /// Fetches information on an individual light group on the device with the |
| /// given name. Returns immediately on first call; subsequent calls return |
| /// when the value changes. |
| /// |
| /// If this call fails, it is considered a fatal error and the channel |
| /// will be closed. |
| WatchLightGroup(string:MAX_LIGHT_NAME_LENGTH name) -> (LightGroup group); |
| |
| /// Sets the values for the lights in the group with the given name. |
| /// |
| /// If the provided value does not match the light group's type, this |
| /// call will fail. |
| /// |
| /// The requested changes may not take immediate effect if |
| /// the light is forced to a certain state by the device's hardware. This |
| /// call will still succeed, but the light's value may not change. |
| SetLightGroupValues(string:MAX_LIGHT_NAME_LENGTH name, vector<LightState>:MAX state) -> () error LightError; |
| }; |