|  | // 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.peripheral; | 
|  |  | 
|  | using zx; | 
|  |  | 
|  | const MAX_FUNCTION_DESCRIPTORS uint32 = 32; | 
|  | const MAX_CONFIG_DESCRIPTORS uint32 = 5; | 
|  | const MAX_STRING_DESCRIPTORS uint32 = 255; | 
|  |  | 
|  | const MAX_STRING_LENGTH uint32 = 127; | 
|  |  | 
|  | @for_deprecated_c_bindings | 
|  | type FunctionDescriptor = struct { | 
|  | interface_class uint8; | 
|  | interface_subclass uint8; | 
|  | interface_protocol uint8; | 
|  | }; | 
|  |  | 
|  | alias ConfigurationDescriptor = vector<FunctionDescriptor>:MAX_FUNCTION_DESCRIPTORS; | 
|  |  | 
|  | /// The fields in DeviceDescriptor match those in usb_descriptor_t in the USB specification, | 
|  | /// except for the string fields. | 
|  | type DeviceDescriptor = struct { | 
|  | bcd_usb uint16; | 
|  | b_device_class uint8; | 
|  | b_device_sub_class uint8; | 
|  | b_device_protocol uint8; | 
|  | b_max_packet_size0 uint8; | 
|  | id_vendor uint16; | 
|  | id_product uint16; | 
|  | bcd_device uint16; | 
|  | manufacturer string:MAX_STRING_LENGTH; | 
|  | product string:MAX_STRING_LENGTH; | 
|  | serial string:MAX_STRING_LENGTH; | 
|  | b_num_configurations uint8; | 
|  | }; | 
|  |  | 
|  | /// Events protocol that is used as a callback to inform the client | 
|  | /// of the completion of various server-side events. | 
|  | /// This callback interface can be registered using the SetStateChangeListener | 
|  | /// method on the Device protocol. | 
|  | @for_deprecated_c_bindings | 
|  | protocol Events { | 
|  | /// Invoked when a function registers | 
|  | FunctionRegistered() -> (); | 
|  | /// Invoked when all functions have been cleared. | 
|  | FunctionsCleared(); | 
|  | }; | 
|  |  | 
|  | protocol Device { | 
|  | /// Sets the device's descriptors, adds the functions and creates the child devices for the | 
|  | /// configuration's interfaces. | 
|  | /// At least one function descriptor must be provided. | 
|  | SetConfiguration(struct { | 
|  | device_desc DeviceDescriptor; | 
|  | config_descriptors vector<ConfigurationDescriptor>:MAX_CONFIG_DESCRIPTORS; | 
|  | }) -> (struct {}) error zx.status; | 
|  |  | 
|  | /// Tells the device to remove the child devices for the configuration's interfaces | 
|  | /// and reset the list of functions to empty. | 
|  | /// The caller should wait for the `FunctionsCleared` event. | 
|  | ClearFunctions() -> (); | 
|  | /// Adds a state change listener that is invoked when a state change completes. | 
|  | SetStateChangeListener(resource struct { | 
|  | listener server_end:Events; | 
|  | }); | 
|  | }; |