| // Copyright 2018 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.hidbus; |
| |
| using zx; |
| |
| const uint16 HID_MAX_DESC_LEN = 8192; |
| |
| enum HidDescriptionType : uint8 { |
| REPORT = 0x22; |
| }; |
| |
| enum HidReportType : uint8 { |
| INPUT = 1; |
| OUTPUT = 2; |
| FEATURE = 3; |
| }; |
| |
| enum HidProtocol : uint8 { |
| BOOT = 0; |
| REPORT = 1; |
| }; |
| |
| enum HidDeviceClass : uint8 { |
| OTHER = 0; |
| KBD = 1; |
| POINTER = 2; |
| KBD_POINTER = 3; |
| |
| FIRST = 0; |
| LAST = 3; |
| }; |
| |
| struct HidInfo { |
| uint8 dev_num; |
| HidDeviceClass device_class; |
| bool boot_device; |
| |
| uint32 vendor_id; |
| uint32 product_id; |
| uint32 version; |
| }; |
| |
| [Transport = "Banjo", BanjoLayout = "ddk-interface"] |
| protocol HidbusIfc { |
| /// Queues a report received by the hidbus device. |
| /// Timestamp should be whenever the report was created. Ideally it should |
| /// come from the driver's IRQ callback. If the driver doesn't have |
| /// something like that it should fill this with `zx_clock_get_monotonic()` |
| IoQueue([Buffer] vector<uint8> buf, zx.time timestamp) -> (); |
| }; |
| |
| [Transport = "Banjo", BanjoLayout = "ddk-protocol"] |
| protocol Hidbus { |
| /// Obtain information about the hidbus device and supported features. |
| /// Safe to call at any time. |
| Query(uint32 options) -> (zx.status s, HidInfo info); |
| /// Start the hidbus device. The device may begin queueing hid reports via |
| /// ifc->io_queue before this function returns. It is an error to start an |
| /// already-started hidbus device. |
| Start(HidbusIfc ifc) -> (zx.status s); |
| /// Stop the hidbus device. Safe to call if the hidbus is already stopped. |
| Stop() -> (); |
| GetDescriptor(HidDescriptionType desc_type) -> (zx.status s, [Buffer] vector<uint8> data); |
| GetReport(HidReportType rpt_type, uint8 rpt_id) -> (zx.status s, [Buffer] vector<uint8> data); |
| SetReport(HidReportType rpt_type, uint8 rpt_id, [Buffer] vector<uint8> data) -> (zx.status s); |
| GetIdle(uint8 rpt_id) -> (zx.status s, uint8 duration); |
| SetIdle(uint8 rpt_id, uint8 duration) -> (zx.status s); |
| GetProtocol() -> (zx.status s, HidProtocol protocol); |
| SetProtocol(HidProtocol protocol) -> (zx.status s); |
| }; |