|  | // 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 uint32 MAX_DEVICE_REPORT_COUNT = 50; | 
|  |  | 
|  | /// 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() -> (vector<InputReport>:MAX_DEVICE_REPORT_COUNT reports) 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. | 
|  | protocol InputDevice { | 
|  | /// Open a new InputReportsReader on this device. Each reader receives | 
|  | /// their own reports. | 
|  | GetInputReportsReader(request<InputReportsReader> reader); | 
|  |  | 
|  | /// Gets the device descriptor for this device. | 
|  | GetDescriptor() -> (DeviceDescriptor descriptor); | 
|  |  | 
|  | /// Send a single output report to the device. This will throw an error | 
|  | /// if the output report does not follow the OutputDescriptor. | 
|  | SendOutputReport(OutputReport report) -> () error zx.status; | 
|  |  | 
|  | /// Get the feature report for a given device. This requests the state of | 
|  | /// the device's features. | 
|  | GetFeatureReport() -> (FeatureReport report) error zx.status; | 
|  |  | 
|  | /// Set the feature report for a given device. This sets the state of | 
|  | /// the device's features. | 
|  | SetFeatureReport(FeatureReport report) -> () error zx.status; | 
|  | }; |