| // 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.hardware.hiddevice; |
| |
| using zx; |
| |
| enum HidReportType : uint8 { |
| INPUT = 1; |
| OUTPUT = 2; |
| FEATURE = 3; |
| }; |
| |
| const uint16 HID_MAX_DESC_LEN = 8192; |
| const uint16 HID_MAX_REPORT_LEN = 8192; |
| const uint16 HID_MAX_REPORT_IDS = 256; |
| |
| [Transport = "Banjo", BanjoLayout = "ddk-interface"] |
| protocol HidReportListener { |
| /// Sends a single report to the listener. This comes with a timestamp that was gotten |
| /// from the computer's monotonic clock. |
| ReceiveReport(vector<uint8>:HID_MAX_REPORT_LEN report, zx.time report_time); |
| }; |
| |
| struct HidDeviceInfo { |
| uint32 vendor_id; |
| uint32 product_id; |
| uint32 version; |
| }; |
| |
| [Transport = "Banjo", BanjoLayout = "ddk-protocol"] |
| protocol HidDevice { |
| /// Register a listener to begin receiving HID Reports. At the moment only a single listener |
| /// is supported. It is an error to call this without unregistering. |
| RegisterListener(HidReportListener listener) -> (zx.status s); |
| |
| /// Unregister the listener. |
| UnregisterListener(); |
| |
| GetHidDeviceInfo() -> (HidDeviceInfo info); |
| |
| GetDescriptor() -> (zx.status s, vector<uint8>:HID_MAX_DESC_LEN descriptor); |
| |
| /// Request a given report. Can be used to get FEATURE and INPUT reports. Getting an OUTPUT |
| /// report is an error. This should be used most frequently to get FEATURE reports, |
| /// since most devices will send normal INPUT reports through the Listener API. |
| GetReport(HidReportType rpt_type, uint8 rpt_id) -> (zx.status s, vector<uint8>:HID_MAX_REPORT_LEN |
| report); |
| |
| /// Set a given report. Only FEATURE and OUTPUT type reports can be set. Setting an INPUT |
| /// report is an error. |
| SetReport(HidReportType rpt_type, uint8 rpt_id, vector<uint8>:HID_MAX_REPORT_LEN report) -> (zx.status s); |
| }; |