// Copyright (c) 2012 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 CHROME_BROWSER_USB_USB_INTERFACE_H_ #define CHROME_BROWSER_USB_USB_INTERFACE_H_ #include "base/memory/ref_counted.h" struct libusb_config_descriptor; struct libusb_endpoint_descriptor; struct libusb_interface; struct libusb_interface_descriptor; typedef libusb_config_descriptor* PlatformUsbConfigDescriptor; typedef const libusb_endpoint_descriptor* PlatformUsbEndpointDescriptor; typedef const libusb_interface* PlatformUsbInterface; typedef const libusb_interface_descriptor* PlatformUsbInterfaceDescriptor; 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 }; class UsbDevice; class UsbConfigDescriptor; class UsbInterfaceDescriptor; class UsbInterfaceAltSettingDescriptor; class UsbEndpointDescriptor : public base::RefCounted<const UsbEndpointDescriptor> { public: int GetAddress() const; UsbEndpointDirection GetDirection() const; int GetMaximumPacketSize() const; UsbSynchronizationType GetSynchronizationType() const; UsbTransferType GetTransferType() const; UsbUsageType GetUsageType() const; int GetPollingInterval() const; private: friend class base::RefCounted<const UsbEndpointDescriptor>; friend class UsbInterfaceAltSettingDescriptor; UsbEndpointDescriptor( scoped_refptr<const UsbConfigDescriptor> config, PlatformUsbEndpointDescriptor descriptor); ~UsbEndpointDescriptor(); scoped_refptr<const UsbConfigDescriptor> config_; PlatformUsbEndpointDescriptor descriptor_; DISALLOW_COPY_AND_ASSIGN(UsbEndpointDescriptor); }; class UsbInterfaceAltSettingDescriptor : public base::RefCounted<const UsbInterfaceAltSettingDescriptor> { public: size_t GetNumEndpoints() const; scoped_refptr<const UsbEndpointDescriptor> GetEndpoint(size_t index) const; int GetInterfaceNumber() const; int GetAlternateSetting() const; int GetInterfaceClass() const; int GetInterfaceSubclass() const; int GetInterfaceProtocol() const; private: friend class base::RefCounted<const UsbInterfaceAltSettingDescriptor>; friend class UsbInterfaceDescriptor; UsbInterfaceAltSettingDescriptor( scoped_refptr<const UsbConfigDescriptor> config, PlatformUsbInterfaceDescriptor descriptor); ~UsbInterfaceAltSettingDescriptor(); scoped_refptr<const UsbConfigDescriptor> config_; PlatformUsbInterfaceDescriptor descriptor_; DISALLOW_COPY_AND_ASSIGN(UsbInterfaceAltSettingDescriptor); }; class UsbInterfaceDescriptor : public base::RefCounted<const UsbInterfaceDescriptor> { public: size_t GetNumAltSettings() const; scoped_refptr<const UsbInterfaceAltSettingDescriptor> GetAltSetting( size_t index) const; private: friend class base::RefCounted<const UsbInterfaceDescriptor>; friend class UsbConfigDescriptor; UsbInterfaceDescriptor(scoped_refptr<const UsbConfigDescriptor> config, PlatformUsbInterface usbInterface); ~UsbInterfaceDescriptor(); scoped_refptr<const UsbConfigDescriptor> config_; PlatformUsbInterface interface_; DISALLOW_COPY_AND_ASSIGN(UsbInterfaceDescriptor); }; class UsbConfigDescriptor : public base::RefCounted<UsbConfigDescriptor> { public: size_t GetNumInterfaces() const; scoped_refptr<const UsbInterfaceDescriptor> GetInterface(size_t index) const; private: friend class base::RefCounted<UsbConfigDescriptor>; friend class UsbDevice; explicit UsbConfigDescriptor(PlatformUsbConfigDescriptor config); ~UsbConfigDescriptor(); PlatformUsbConfigDescriptor config_; DISALLOW_COPY_AND_ASSIGN(UsbConfigDescriptor); }; #endif // CHROME_BROWSER_USB_USB_INTERFACE_H_