blob: 0dbc9091b47f4b17f195d2b1e54777e5e434c71a [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.input.report;
/// A hardcoded number of max reports. Because report ID is only 8 bits, only 255
/// different reports are allowed at a time.
const MAX_REPORT_COUNT uint32 = 255;
/// A hardcoded number of max sensor values. This should be increased in the future
/// if we ever see a sensor with more values.
const SENSOR_MAX_VALUES uint32 = 100;
/// Each sensor value has a corresponding SensorType, which explains what the
/// value is measuring in the world.
type SensorType = flexible enum : uint32 {
/// Acceleration on the X axis.
ACCELEROMETER_X = 1;
/// Acceleration on the Y axis.
ACCELEROMETER_Y = 2;
/// Acceleration on the Z axis.
ACCELEROMETER_Z = 3;
/// Strength of the Magnetic Field in the X axis.
MAGNETOMETER_X = 4;
/// Strength of the Magnetic Field in the Y axis.
MAGNETOMETER_Y = 5;
/// Strength of the Magnetic Field in the Z axis.
MAGNETOMETER_Z = 6;
/// Angular Velocity in the X direction moving counter-clockwise.
GYROSCOPE_X = 7;
/// Angular Velocity in the Y direction moving counter-clockwise.
GYROSCOPE_Y = 8;
/// Angular Velocity in the Z direction moving counter-clockwise.
GYROSCOPE_Z = 9;
/// Ambient level of Light.
LIGHT_ILLUMINANCE = 10;
/// Ambient level of Red Light.
LIGHT_RED = 11;
/// Ambient level of Green Light.
LIGHT_GREEN = 12;
/// Ambient level of Blue Light.
LIGHT_BLUE = 13;
};
/// A `SensorAxis` is a normal `Axis` with an additional `SensorType` to describe what the
/// axis is measuring.
type SensorAxis = struct {
axis Axis;
type SensorType;
};
/// Describes the format of the input report that will be sent from the sensor
/// to the device.
type SensorInputDescriptor = table {
/// Each `SensorAxis` in `values` describes what a sensor is measuring and its range.
/// These will directly correspond to the values in `SensorReport`.
1: values vector<SensorAxis>:SENSOR_MAX_VALUES;
/// ReportID of current descriptor. Report with same report ID should be
/// associated with this descriptor.
2: report_id uint8;
};
/// `SensorReportingState` determines when a sensor will send reports.
type SensorReportingState = flexible enum : uint32 {
/// No events will be sent from the sensor.
REPORT_NO_EVENTS = 1;
/// All events will be sent from the sensor. For most sensors, this
/// frequency can be set by `report_interval`.
REPORT_ALL_EVENTS = 2;
/// Only events that cross a threshold will be reported.
REPORT_THRESHOLD_EVENTS = 3;
};
/// Describes the format of the sensor's feature report. Feature reports can be
/// requested from the sensor, or sent to the sensor.
type SensorFeatureDescriptor = table {
/// Describes the minimum and maximum reporting interval this sensor
/// supports.
1: report_interval Axis;
/// If this is true then SensorFeatureReport supports setting a
/// SensorReportingState.
3: supports_reporting_state bool;
/// Sets the sensitivity for the given `SensorType`.
2: sensitivity vector<SensorAxis>:SENSOR_MAX_VALUES;
/// Sets the high threshold values for the given `SensorType`.
4: threshold_high vector<SensorAxis>:SENSOR_MAX_VALUES;
/// Sets the low threshold values for the given `SensorType`.
5: threshold_low vector<SensorAxis>:SENSOR_MAX_VALUES;
/// Describes the minimum and maximum sampling rate this sensor supports.
6: sampling_rate Axis;
/// ReportID of current descriptor. Report with same report ID should be
/// associated with this descriptor.
7: report_id uint8;
};
/// The capabilities of a sensor device.
type SensorDescriptor = table {
1: input vector<SensorInputDescriptor>:MAX_REPORT_COUNT;
2: feature vector<SensorFeatureDescriptor>:MAX_REPORT_COUNT;
};
/// `SensorReport` gives the values measured by a sensor at a given point in time.
type SensorInputReport = table {
/// The ordering of `values` will always directly correspond to the ordering of
/// the values in `SensorDescriptor`.
1: values vector<int64>:SENSOR_MAX_VALUES;
};
/// A SensorFeatureReport describes the features of a given sensor. If a
/// FeatureReport is sent to the Input Device it sets the configuration of the device.
/// If a FeatureReport is requested from the Input Device it shows the device's
/// current configuration.
type SensorFeatureReport = table {
/// The time between reports sent by the sensor.
1: report_interval int64;
/// This determines when the sensor will send reports.
3: reporting_state SensorReportingState;
/// The sensitivity for various `SensorType`. This vector must be given in
/// the order of the descriptor's `sensitivity` vector.
2: sensitivity vector<int64>:SENSOR_MAX_VALUES;
/// The high thresholds for various `SensorType`. This vector must be given in
/// the order of the descriptor's `threshold_high` vector.
4: threshold_high vector<int64>:SENSOR_MAX_VALUES;
/// The low thresholds for various `SensorType`. This vector must be given in
/// the order of the descriptor's `threshold_low` vector.
5: threshold_low vector<int64>:SENSOR_MAX_VALUES;
/// The rate at which the sensor is sampled.
6: sampling_rate int64;
};