| // 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.usb.device; |
| |
| using zx; |
| |
| /// sizeof(usb_device_descriptor_t) |
| const uint32 DEVICE_DESC_SIZE = 18; |
| |
| /// UINT16_MAX |
| const uint32 MAX_CONFIG_DESC_SIZE = 65536; |
| |
| /// See GetStringDescriptor description below |
| const uint32 MAX_STRING_DESC_SIZE = 384; |
| |
| [ForDeprecatedCBindings] |
| protocol Device { |
| /// Returns the speed of the USB device as a usb_speed_t value. |
| GetDeviceSpeed() -> (uint32 speed); |
| |
| /// Returns the device's USB device descriptor. |
| GetDeviceDescriptor() -> (array<uint8>:DEVICE_DESC_SIZE desc); |
| |
| /// Returns the total size of the USB configuration descriptor for the given configuration. |
| GetConfigurationDescriptorSize(uint8 config) -> (zx.status s, uint16 size); |
| |
| /// Returns the device's USB configuration descriptor for the given configuration. |
| GetConfigurationDescriptor(uint8 config) -> (zx.status s, |
| vector<uint8>:MAX_CONFIG_DESC_SIZE desc); |
| |
| /// Fetches a string descriptor from the USB device. |
| /// |
| /// desc_id : The ID of the string descriptor to fetch, or 0 to fetch |
| /// the language table instead. |
| /// |
| /// lang_id : The language ID of the string descriptor to fetch. |
| /// If no matching language ID is present in the device's language |
| /// ID table, the first entry of the language ID table will |
| /// be substituted. |
| /// actual_lang_id : The actual language ID of the string fetched, or 0 for |
| /// the language ID table. |
| /// |
| /// The worst case size for the payload of a language ID table should be 252 |
| /// bytes, meaning that a 256 byte buffer should always be enough to hold any |
| /// language ID table. |
| /// |
| /// The worst case size for a UTF-8 encoded string descriptor payload should be |
| /// 378 bytes (126 UTF-16 code units with a worst case expansion factor of 3) |
| GetStringDescriptor(uint8 desc_id, uint16 lang_id) -> (zx.status s, |
| string:MAX_STRING_DESC_SIZE desc, |
| uint16 actual_lang_id); |
| |
| /// Selects an alternate setting for an interface on a USB device. |
| SetInterface(uint8 interface_number, uint8 alt_setting) -> (zx.status s); |
| |
| /// Returns an implementation specific device ID for a USB device. |
| /// For informational purposes only. |
| GetDeviceId() -> (uint32 device_id); |
| |
| /// Returns the implementation specific device ID for the hub that a USB device is connected to. |
| /// For informational purposes only. |
| GetHubDeviceId() -> (uint32 hub_device_id); |
| |
| /// Returns the device's current configuration. |
| GetConfiguration() -> (uint8 configuration); |
| |
| /// Sets the device's current configuration. |
| SetConfiguration(uint8 configuration) -> (zx.status s); |
| }; |