// 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_