blob: 117a5b24ae4e59cb250f261b8fca2deff54dfa4a [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;
/// Settings related to input to the device.
///
/// Supported SettingsEpitaph enums:
/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
@discoverable
protocol Input {
/// Gets the current |InputSettings|. Returns immediately on first call;
/// subsequent calls return when the value changes.
///
/// When any of the input devices' states change, this will return the
/// full [InputSettings] object, containing the states for all the
/// available input devices on the target device.
///
/// To find the state of a specific input device, the devices vector
/// contained in settings can be iterated through to find a specific
/// [DeviceType]. If there are multiple devices of the same [DeviceType],
/// the [InputDevice]'s device_name can be examined in conjunction with
/// the [DeviceType] to find the desired input device. Together, the
/// device_name and [DeviceType] uniquely identify an [InputDevice].
///
/// If this call fails, it is considered a fatal error and the channel
/// will be closed.
@transitional("Future replacement for Watch2")
Watch() -> (struct {
settings InputSettings;
});
/// Requests software input devices to set their software state. May
/// not necessarily change the overall state of the device, depending on
/// the hardware state. Will modify the software state of the existing
/// device if a known device_name and device_type are passed. Otherwise
/// it will add a new input device. Devices not included in the SetStates
/// call will not be modified.
@transitional("Future replacement for SetStates")
Set(struct {
input_states vector<InputState>:MAX;
}) -> (struct {}) error Error;
/// Gets the current |InputSettings|. Returns immediately on first call;
/// subsequent calls return when the value changes.
///
/// When any of the input devices' states change, this will return the
/// full [InputSettings] object, containing the states for all the
/// available input devices on the target device.
///
/// To find the state of a specific input device, the devices vector
/// contained in settings can be iterated through to find a specific
/// [DeviceType]. If there are multiple devices of the same [DeviceType],
/// the [InputDevice]'s device_name can be examined in conjunction with
/// the [DeviceType] to find the desired input device. Together, the
/// device_name and [DeviceType] uniquely identify an [InputDevice].
///
/// If this call fails, it is considered a fatal error and the channel
/// will be closed.
@transitional("Will be deprecated in favor of Watch")
Watch2() -> (struct {
settings InputSettings;
});
/// Requests software input devices to set their software state. May
/// not necessarily change the overall state of the device, depending on
/// the hardware state. Will modify the software state of the existing
/// device if a known device_name and device_type are passed. Otherwise
/// it will add a new input device. Devices not included in the SetStates
/// call will not be modified.
@transitional("Will be deprecated in favor of Set")
SetStates(struct {
input_states vector<InputState>:MAX;
}) -> (struct {}) error Error;
};
/// A series of flags determining the state of an input device mute toggle.
type ToggleStateFlags = strict bits : uint64 {
/// The input device exists and is neither muted nor disabled.
AVAILABLE = 0x01;
/// The input device is being used.
ACTIVE = 0x02;
/// The input device could be available if it was enabled, but it is muted.
MUTED = 0x04;
/// The input device is permanently disabled, e.g. by policy.
DISABLED = 0x08;
/// The state cannot be determined.
ERROR = 0x10;
};
type DeviceType = strict enum {
MICROPHONE = 1;
CAMERA = 2;
};
type DeviceStateSource = strict enum {
HARDWARE = 1;
SOFTWARE = 2;
};
/// Settings related to device input. New format for InputDeviceSettings.
///
/// InputSettings contains a list of input devices, e.g. Microphone and Camera
/// devices. There may be multiple devices of each type. If so, they will be
/// differentiated by the device_name. If there is only one device of a certain
/// [DeviceType], then the name defaults to the same as the device type, e.g.
/// DeviceType::Microphone -> "microphone".
type InputSettings = table {
1: devices vector<InputDevice>:MAX;
};
/// Contains the information for an input device. The device is uniquely identified
/// by the combination of device_name and device_type.
type InputDevice = table {
/// Uniquely identifies a device within a device type.
1: device_name string:MAX;
/// The type of input device (e.g. camera, microphone).
2: device_type DeviceType;
/// The state for each individual [DeviceStateSource].
3: source_states vector<SourceState>:MAX;
/// The software toggle states which are allowed to be changed for a device.
4: mutable_toggle_state ToggleStateFlags;
/// The overall state of the device, considering the combination
/// of the source states.
5: state DeviceState;
};
/// Holds the state for an |InputDevice|.
type DeviceState = table {
/// Controls the on/off state of the input device.
1: toggle_flags ToggleStateFlags;
};
/// Describes what the |source|'s |state| is.
type SourceState = table {
1: source DeviceStateSource;
2: state DeviceState;
};
/// A subset of |DeviceState|'s properties that clients may pass to change the
/// software state of an InputDevice.
type InputState = table {
1: name string:MAX;
2: device_type DeviceType;
3: state DeviceState;
};