blob: ec32d3fcd845132690329bb9d8495ccd6937319f [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.
@available(added=7)
library fuchsia.hardware.light;
const LIGHT_NAME_LEN uint8 = 32;
type Capability = strict enum {
/// 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;
};
type Rgb = struct {
red float64;
green float64;
blue float64;
};
type Info = struct {
name string:LIGHT_NAME_LEN;
capability Capability;
};
type GroupInfo = struct {
name string:LIGHT_NAME_LEN;
count uint32;
capability Capability;
};
type LightError = strict enum {
OK = 0;
NOT_SUPPORTED = 1;
INVALID_INDEX = 2;
FAILED = 3;
};
@discoverable
closed 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.
strict GetNumLights() -> (struct {
count uint32;
});
/// 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.
strict GetNumLightGroups() -> (struct {
count uint32;
});
/// Returns info for the single light.
/// index: Index of the light defined by board. Must be less than value returned by GetNumLights.
strict GetInfo(struct {
index uint32;
}) -> (struct {
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.
strict GetCurrentSimpleValue(struct {
index uint32;
}) -> (struct {
value bool;
}) 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.
strict SetSimpleValue(struct {
index uint32;
value bool;
}) -> () error LightError;
/// Returns the current brightness value (0.0 - 1.0) of the light indicated by index, where 0.0
/// is minimum brightness and 1.0 is maximum.
/// 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.
strict GetCurrentBrightnessValue(struct {
index uint32;
}) -> (struct {
value float64;
}) error LightError;
/// Sets the current brightness value (0.0 - 1.0), where 0.0 is minimum brightness and 1.0 is
/// maximum.
/// 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.
strict SetBrightnessValue(struct {
index uint32;
value float64;
}) -> () 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.
strict GetCurrentRgbValue(struct {
index uint32;
}) -> (struct {
value Rgb;
}) 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.
strict SetRgbValue(struct {
index uint32;
value Rgb;
}) -> () error LightError;
/// Returns group info for the light group.
/// group_id: a number between 0 inclusive and the count received from GetNumLightGroups.
strict GetGroupInfo(struct {
group_id uint32;
}) -> (struct {
info GroupInfo;
}) 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.
strict GetGroupCurrentSimpleValue(struct {
group_id uint32;
}) -> (struct {
values vector<bool>:<MAX, optional>;
}) 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.
strict SetGroupSimpleValue(struct {
group_id uint32;
values vector<bool>:MAX;
}) -> () error LightError;
/// Returns an array of the current brightness values (0.0 - 1.0) for the light group, where 0.0
/// is minimum brightness and 1.0 is maximum.
/// 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.
strict GetGroupCurrentBrightnessValue(struct {
group_id uint32;
}) -> (struct {
values vector<float64>:<MAX, optional>;
}) error LightError;
/// Sets the current brightness values (0.0 - 1.0) for the light group through the values array,
/// where 0.0 is minimum brightness and 1.0 is maximum.
/// 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.
strict SetGroupBrightnessValue(struct {
group_id uint32;
values vector<float64>:MAX;
}) -> () 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.
strict GetGroupCurrentRgbValue(struct {
group_id uint32;
}) -> (struct {
values vector<Rgb>:<MAX, optional>;
}) 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.
strict SetGroupRgbValue(struct {
group_id uint32;
values vector<Rgb>:MAX;
}) -> () error LightError;
// TODO: Ideas for future expansion
// - Hardware blinking configuration, for lights that have hardware or MCU support for blinking.
};