1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_USB_USB_INTERFACE_H_ 6 #define CHROME_BROWSER_USB_USB_INTERFACE_H_ 7 8 #include "base/memory/ref_counted.h" 9 10 struct libusb_config_descriptor; 11 struct libusb_endpoint_descriptor; 12 struct libusb_interface; 13 struct libusb_interface_descriptor; 14 15 typedef libusb_config_descriptor* PlatformUsbConfigDescriptor; 16 typedef const libusb_endpoint_descriptor* PlatformUsbEndpointDescriptor; 17 typedef const libusb_interface* PlatformUsbInterface; 18 typedef const libusb_interface_descriptor* PlatformUsbInterfaceDescriptor; 19 20 enum UsbTransferType { 21 USB_TRANSFER_CONTROL = 0, 22 USB_TRANSFER_ISOCHRONOUS, 23 USB_TRANSFER_BULK, 24 USB_TRANSFER_INTERRUPT, 25 }; 26 27 enum UsbEndpointDirection { 28 USB_DIRECTION_INBOUND = 0, 29 USB_DIRECTION_OUTBOUND, 30 }; 31 32 enum UsbSynchronizationType { 33 USB_SYNCHRONIZATION_NONE = 0, 34 USB_SYNCHRONIZATION_ASYNCHRONOUS, 35 USB_SYNCHRONIZATION_ADAPTIVE, 36 USB_SYNCHRONIZATION_SYNCHRONOUS, 37 }; 38 39 enum UsbUsageType { 40 USB_USAGE_DATA = 0, 41 USB_USAGE_FEEDBACK, 42 USB_USAGE_EXPLICIT_FEEDBACK 43 }; 44 45 class UsbDevice; 46 class UsbConfigDescriptor; 47 class UsbInterfaceDescriptor; 48 class UsbInterfaceAltSettingDescriptor; 49 50 class UsbEndpointDescriptor 51 : public base::RefCounted<const UsbEndpointDescriptor> { 52 public: 53 int GetAddress() const; 54 UsbEndpointDirection GetDirection() const; 55 int GetMaximumPacketSize() const; 56 UsbSynchronizationType GetSynchronizationType() const; 57 UsbTransferType GetTransferType() const; 58 UsbUsageType GetUsageType() const; 59 int GetPollingInterval() const; 60 61 private: 62 friend class base::RefCounted<const UsbEndpointDescriptor>; 63 friend class UsbInterfaceAltSettingDescriptor; 64 65 UsbEndpointDescriptor( 66 scoped_refptr<const UsbConfigDescriptor> config, 67 PlatformUsbEndpointDescriptor descriptor); 68 ~UsbEndpointDescriptor(); 69 70 scoped_refptr<const UsbConfigDescriptor> config_; 71 PlatformUsbEndpointDescriptor descriptor_; 72 73 DISALLOW_COPY_AND_ASSIGN(UsbEndpointDescriptor); 74 }; 75 76 class UsbInterfaceAltSettingDescriptor 77 : public base::RefCounted<const UsbInterfaceAltSettingDescriptor> { 78 public: 79 size_t GetNumEndpoints() const; 80 scoped_refptr<const UsbEndpointDescriptor> GetEndpoint(size_t index) const; 81 82 int GetInterfaceNumber() const; 83 int GetAlternateSetting() const; 84 int GetInterfaceClass() const; 85 int GetInterfaceSubclass() const; 86 int GetInterfaceProtocol() const; 87 88 private: 89 friend class base::RefCounted<const UsbInterfaceAltSettingDescriptor>; 90 friend class UsbInterfaceDescriptor; 91 92 UsbInterfaceAltSettingDescriptor( 93 scoped_refptr<const UsbConfigDescriptor> config, 94 PlatformUsbInterfaceDescriptor descriptor); 95 ~UsbInterfaceAltSettingDescriptor(); 96 97 scoped_refptr<const UsbConfigDescriptor> config_; 98 PlatformUsbInterfaceDescriptor descriptor_; 99 100 DISALLOW_COPY_AND_ASSIGN(UsbInterfaceAltSettingDescriptor); 101 }; 102 103 class UsbInterfaceDescriptor 104 : public base::RefCounted<const UsbInterfaceDescriptor> { 105 public: 106 size_t GetNumAltSettings() const; 107 scoped_refptr<const UsbInterfaceAltSettingDescriptor> GetAltSetting( 108 size_t index) const; 109 110 private: 111 friend class base::RefCounted<const UsbInterfaceDescriptor>; 112 friend class UsbConfigDescriptor; 113 114 UsbInterfaceDescriptor(scoped_refptr<const UsbConfigDescriptor> config, 115 PlatformUsbInterface usbInterface); 116 ~UsbInterfaceDescriptor(); 117 118 scoped_refptr<const UsbConfigDescriptor> config_; 119 PlatformUsbInterface interface_; 120 121 DISALLOW_COPY_AND_ASSIGN(UsbInterfaceDescriptor); 122 }; 123 124 class UsbConfigDescriptor : public base::RefCounted<UsbConfigDescriptor> { 125 public: 126 size_t GetNumInterfaces() const; 127 scoped_refptr<const UsbInterfaceDescriptor> GetInterface(size_t index) const; 128 129 private: 130 friend class base::RefCounted<UsbConfigDescriptor>; 131 friend class UsbDevice; 132 133 explicit UsbConfigDescriptor(PlatformUsbConfigDescriptor config); 134 ~UsbConfigDescriptor(); 135 136 PlatformUsbConfigDescriptor config_; 137 138 DISALLOW_COPY_AND_ASSIGN(UsbConfigDescriptor); 139 }; 140 141 #endif // CHROME_BROWSER_USB_USB_INTERFACE_H_ 142