blob: e1dc7f9077410bede461a5cdd4c0cf103296f58c [file] [log] [blame]
// Copyright 2019 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.hardware.light;
const uint8 LIGHT_NAME_LEN = 32;
enum Capability {
/// This capability indicates that the light supports setting brightness to a uint8_t value.
/// If this capability is not supported, the light only supports off and on state.
BRIGHTNESS = 1;
/// This capability indicates that the light supports setting an RGB value.
RGB = 2;
/// No capabilities
SIMPLE = 3;
};
struct Rgb {
uint8 red;
uint8 green;
uint8 blue;
};
struct Info {
string:LIGHT_NAME_LEN name;
Capability capability;
};
struct GroupInfo {
string:LIGHT_NAME_LEN name;
uint32 count;
Capability capability;
};
enum LightError {
OK = 0;
NOT_SUPPORTED = 1;
INVALID_INDEX = 2;
FAILED = 3;
};
[Discoverable]
protocol Light {
/// Returns the total number of physical lights.
/// This will typically be 1 for a simple LED light, but may be greater than one for an array of
/// lights or a more complicated lighting device.
/// The multiple lights are addressed using "index" parameter in the calls below.
GetNumLights() -> (uint32 count);
/// Returns the total number of light groups (does not count single lights).
/// The light groups are addressed using "group_id" parameter in the calls below.
GetNumLightGroups() -> (uint32 count);
/// Returns info for the single light.
/// index: Index of the light defined by board. Must be less than value returned by GetNumLights.
GetInfo(uint32 index) -> (Info info) error LightError;
/// Returns the current value. If the light is ON, the value is True. If the light is OFF,
/// the value is False.
/// If the capability 'SIMPLE' is not supported by this light, returns NOT_SUPPORTED.
/// Use GetInfo to check if light supports this operation.
/// index: a number between 0 inclusive and the count received from GetNumLights.
GetCurrentSimpleValue(uint32 index) -> (bool value) error LightError;
/// Sets the current value. Value should be set to 'TRUE' to turn on the light. Value should be
/// set to 'FALSE' to turn off the light.
/// If the capability 'SIMPLE' is not supported by this light, returns NOT_SUPPORTED.
/// Use GetInfo to check if light supports this operation.
/// index: a number between 0 inclusive and the count received from GetNumLights.
SetSimpleValue(uint32 index, bool value) -> () error LightError;
/// Returns the current brightness value (0 - 255) of the light indicated by index.
/// If the capability 'BRIGHTNESS' is not supported by this light, returns NOT_SUPPORTED.
/// Use GetInfo to check if light supports this operation.
/// index: a number between 0 inclusive and the count received from GetNumLights.
GetCurrentBrightnessValue(uint32 index) -> (uint8 value) error LightError;
/// Sets the current brightness value (0 - 255).
/// If the capability 'BRIGHTNESS' is not supported by this light, returns NOT_SUPPORTED.
/// Use GetInfo to check if light supports this operation.
/// index: a number between 0 inclusive and the count received from GetNumLights.
SetBrightnessValue(uint32 index, uint8 value) -> () error LightError;
/// Returns the current RGB value for the single light.
/// If the capability 'RGB' is not supported by this light, returns NOT_SUPPORTED.
/// Use GetInfo to check if light supports this operation.
/// index: a number between 0 inclusive and the count received from GetNumLights.
GetCurrentRgbValue(uint32 index) -> (Rgb value) error LightError;
/// Sets the current RGB value.
/// If the capability 'RGB' is not supported by this light, returns NOT_SUPPORTED.
/// Use GetInfo to check if light supports this operation.
/// index: a number between 0 inclusive and the count received from GetNumLights.
SetRgbValue(uint32 index, Rgb value) -> () error LightError;
/// Returns group info for the light group.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
GetGroupInfo(uint32 group_id) -> (GroupInfo info) error LightError;
/// Returns an array of the current values.If the light is ON, the value is True. If the light
/// is OFF, the value is False.
/// If group_id is invalid, INVALID_INDEX will be returned.
/// If the capability 'SIMPLE' is not supported by this group, returns NOT_SUPPORTED.
/// Use GetGroupInfo to check if group supports this operation.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
GetGroupCurrentSimpleValue(uint32 group_id) -> (vector<bool>:MAX? values) error LightError;
/// Sets the current values through the values array. Value should be set to 'TRUE' to turn on
/// the light. Value should be set to 'FALSE' to turn off the light.
/// If group_id is invalid, INVALID_INDEX will be returned.
/// If the capability 'SIMPLE' is not supported by this group, returns NOT_SUPPORTED.
/// Use GetGroupInfo to check if group supports this operation.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
SetGroupSimpleValue(uint32 group_id, vector<bool>:MAX values) -> () error LightError;
/// Returns an array of the current brightness values (0 - 255) for the light group.
/// If group_id is invalid, INVALID_INDEX will be returned.
/// If the capability 'BRIGHTNESS' is not supported by this group, returns NOT_SUPPORTED.
/// Use GetGroupInfo to check if group supports this operation.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
GetGroupCurrentBrightnessValue(uint32 group_id) -> (vector<uint8>:MAX? values) error LightError;
/// Sets the current brightness values (0 - 255) for the light group through the values array.
/// If group_id is invalid, INVALID_INDEX will be returned.
/// If the capability 'BRIGHTNESS' is not supported by this group, returns NOT_SUPPORTED.
/// Use GetGroupInfo to check if group supports this operation.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
SetGroupBrightnessValue(uint32 group_id, vector<uint8>:MAX values) -> () error LightError;
/// Returns an array of the current RGB values for the light group.
/// If group_id is invalid, INVALID_INDEX will be returned.
/// If the capability 'RGB' is not supported by this group, returns NOT_SUPPORTED.
/// Use GetGroupInfo to check if group supports this operation.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
GetGroupCurrentRgbValue(uint32 group_id) -> (vector<Rgb>:MAX? values) error LightError;
/// Sets the current RGB value for the light group.
/// If group_id is invalid, INVALID_INDEX will be returned.
/// If the capability 'RGB' is not supported by this group, returns NOT_SUPPORTED.
/// Use GetGroupInfo to check if group supports this operation.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
SetGroupRgbValue(uint32 group_id, vector<Rgb>:MAX values) -> () error LightError;
// TODO: Ideas for future expansion
// - Hardware blinking configuration, for lights that have hardware or MCU support for blinking.
};