// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DEVICE_USB_USB_DESCRIPTORS_H_ #define DEVICE_USB_USB_DESCRIPTORS_H_ #include <stdint.h> #include <vector> namespace device { enum UsbTransferType { USB_TRANSFER_CONTROL = 0, USB_TRANSFER_ISOCHRONOUS, USB_TRANSFER_BULK, USB_TRANSFER_INTERRUPT, }; enum UsbEndpointDirection { USB_DIRECTION_INBOUND = 0, USB_DIRECTION_OUTBOUND, }; enum UsbSynchronizationType { USB_SYNCHRONIZATION_NONE = 0, USB_SYNCHRONIZATION_ASYNCHRONOUS, USB_SYNCHRONIZATION_ADAPTIVE, USB_SYNCHRONIZATION_SYNCHRONOUS, }; enum UsbUsageType { USB_USAGE_DATA = 0, USB_USAGE_FEEDBACK, USB_USAGE_EXPLICIT_FEEDBACK }; struct UsbEndpointDescriptor { UsbEndpointDescriptor(); ~UsbEndpointDescriptor(); typedef std::vector<UsbEndpointDescriptor>::const_iterator Iterator; uint8_t address; UsbEndpointDirection direction; uint16_t maximum_packet_size; UsbSynchronizationType synchronization_type; UsbTransferType transfer_type; UsbUsageType usage_type; uint16_t polling_interval; std::vector<uint8_t> extra_data; }; struct UsbInterfaceDescriptor { UsbInterfaceDescriptor(); ~UsbInterfaceDescriptor(); typedef std::vector<UsbInterfaceDescriptor>::const_iterator Iterator; uint8_t interface_number; uint8_t alternate_setting; uint8_t interface_class; uint8_t interface_subclass; uint8_t interface_protocol; std::vector<UsbEndpointDescriptor> endpoints; std::vector<uint8_t> extra_data; }; struct UsbConfigDescriptor { UsbConfigDescriptor(); ~UsbConfigDescriptor(); uint8_t configuration_value; bool self_powered; bool remote_wakeup; uint16_t maximum_power; std::vector<UsbInterfaceDescriptor> interfaces; std::vector<uint8_t> extra_data; }; } // namespace device #endif // DEVICE_USB_USB_DESCRIPTORS_H_