blob: 9ff0dd996f38d5e052d38f296fedcdcb5f8c47bf [file] [log] [blame]
// 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 MAX_LIGHT_NAME_LENGTH uint8 = 32;
/// Enum describing the possible types of values for controlling a light.
type LightType = strict enum {
/// 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.
type LightState = table {
1: value LightValue;
};
/// Value of a light. Only one of the three values in the union will be present,
/// depending on the light's LightType.
type LightValue = strict union {
/// Lights with LightType.SIMPLE will have this value.
1: on bool;
/// 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. Not a
/// number (NaN), infinity or negative infinity will cause SetLightGroup to
/// fail with INVALID_VALUE.
2: brightness float64;
/// 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: color fuchsia.ui.types.ColorRgb;
};
/// Information about a controllable light group. A group may have one or more
/// lights.
type LightGroup = table {
/// Identifier for this light group, clients should pass this back into the
/// service to set the group's light values.
1: name string:MAX_LIGHT_NAME_LENGTH;
/// 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: enabled bool;
/// Defines the acceptable value type for controlling this light group.
3: type LightType;
/// States of the lights in this group.
4: lights vector<LightState>:MAX;
};
type LightError = strict enum {
/// 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
closed 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.
strict WatchLightGroups() -> (struct {
groups vector<LightGroup>:MAX;
});
/// 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. If the failure is due to an invalid light group name,
/// the channel will be closed with a NOT_FOUND epitaph.
strict WatchLightGroup(struct {
name string:MAX_LIGHT_NAME_LENGTH;
}) -> (struct {
group LightGroup;
});
/// 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.
strict SetLightGroupValues(struct {
name string:MAX_LIGHT_NAME_LENGTH;
state vector<LightState>:MAX;
}) -> () error LightError;
};