| // 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; |
| |
| using zx; |
| |
| const MAX_DEVICE_REPORT_COUNT uint32 = 50; |
| |
| /// The InputReport field to be populated by InputDevice.GetInputReport. |
| type DeviceType = flexible enum { |
| MOUSE = 0; |
| SENSOR = 1; |
| TOUCH = 2; |
| KEYBOARD = 3; |
| CONSUMER_CONTROL = 4; |
| }; |
| |
| /// Each `InputReportsReader` has its own FIFO of InputReports that it maintains. |
| /// When ReadInputReports is called it drains the InputReports FIFO. |
| /// If too many InputReports are created before the FIFO is drained, then |
| /// the oldest InputReport will be silently discarded. |
| protocol InputReportsReader { |
| /// This is a Hanging-Get function to read the reports in the |
| /// InputReport FIFO. This will not reply until there is at least one |
| /// report available. |
| /// If there is already one outstanding Hanging-Get, calling this |
| /// again will return ZX_ERR_ALREADY_BOUND. |
| ReadInputReports() -> (struct { |
| reports vector<InputReport>:MAX_DEVICE_REPORT_COUNT; |
| }) error zx.status; |
| }; |
| |
| /// An `InputDevice` driver represents a single physical input device. |
| /// The InputDevice maintains an internal FIFO of `MAX_DEVICE_REPORT_COUNT` |
| /// reports for each client that connects. Reports are removed from the FIFO |
| /// once they are read by the client. If the FIFO is full, it will drop the |
| /// oldest report to make room for an incoming report. |
| @discoverable |
| protocol InputDevice { |
| /// Open a new InputReportsReader on this device. Each reader receives |
| /// their own reports. |
| GetInputReportsReader(resource struct { |
| reader server_end:InputReportsReader; |
| }); |
| |
| /// Gets the device descriptor for this device. |
| GetDescriptor() -> (struct { |
| descriptor DeviceDescriptor; |
| }); |
| |
| /// Send a single output report to the device. This will throw an error |
| /// if the output report does not follow the OutputDescriptor. |
| SendOutputReport(struct { |
| report OutputReport; |
| }) -> (struct {}) error zx.status; |
| |
| /// Get the feature report for a given device. This requests the state of |
| /// the device's features. |
| GetFeatureReport() -> (struct { |
| report FeatureReport; |
| }) error zx.status; |
| |
| /// Set the feature report for a given device. This sets the state of |
| /// the device's features. |
| SetFeatureReport(struct { |
| report FeatureReport; |
| }) -> (struct {}) error zx.status; |
| |
| /// For general cases, InputReportReader is the preferred way of getting |
| /// InputReports. For devices that don't send InputReports naturally, this |
| /// method can be used to request a report from the device type indicated. |
| /// Does not block, and returns ZX_ERR_NOT_SUPPORTED if `GetInputReport` or |
| /// `device_type` are not supported. |
| GetInputReport(struct { |
| device_type DeviceType; |
| }) -> (struct { |
| report InputReport; |
| }) error zx.status; |
| }; |