usb_interface.h revision a3f7b4e666c476898878fa745f637129375cd889
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#include "base/memory/scoped_ptr.h"
10
11struct libusb_config_descriptor;
12struct libusb_endpoint_descriptor;
13struct libusb_interface;
14struct libusb_interface_descriptor;
15
16typedef libusb_config_descriptor* PlatformUsbConfigDescriptor;
17typedef const libusb_endpoint_descriptor* PlatformUsbEndpointDescriptor;
18typedef const libusb_interface* PlatformUsbInterface;
19typedef const libusb_interface_descriptor* PlatformUsbInterfaceDescriptor;
20
21class UsbDeviceHandle;
22
23enum UsbTransferType {
24  USB_TRANSFER_CONTROL = 0,
25  USB_TRANSFER_ISOCHRONOUS,
26  USB_TRANSFER_BULK,
27  USB_TRANSFER_INTERRUPT,
28};
29
30enum UsbEndpointDirection {
31  USB_DIRECTION_INBOUND = 0,
32  USB_DIRECTION_OUTBOUND,
33};
34
35enum UsbSynchronizationType {
36  USB_SYNCHRONIZATION_NONE = 0,
37  USB_SYNCHRONIZATION_ASYNCHRONOUS,
38  USB_SYNCHRONIZATION_ADAPTIVE,
39  USB_SYNCHRONIZATION_SYNCHRONOUS,
40};
41
42enum UsbUsageType {
43  USB_USAGE_DATA = 0,
44  USB_USAGE_FEEDBACK,
45  USB_USAGE_EXPLICIT_FEEDBACK
46};
47
48class UsbConfigDescriptor;
49
50class UsbEndpointDescriptor : public base::RefCounted<UsbEndpointDescriptor> {
51 public:
52  UsbEndpointDescriptor(scoped_refptr<const UsbConfigDescriptor> config,
53      PlatformUsbEndpointDescriptor descriptor);
54
55  int GetAddress() const;
56  UsbEndpointDirection GetDirection() const;
57  int GetMaximumPacketSize() const;
58  UsbSynchronizationType GetSynchronizationType() const;
59  UsbTransferType GetTransferType() const;
60  UsbUsageType GetUsageType() const;
61  int GetPollingInterval() const;
62
63 private:
64  friend class base::RefCounted<UsbEndpointDescriptor>;
65  ~UsbEndpointDescriptor();
66
67  scoped_refptr<const UsbConfigDescriptor> config_;
68  PlatformUsbEndpointDescriptor descriptor_;
69};
70
71class UsbInterfaceDescriptor
72    : public base::RefCounted<UsbInterfaceDescriptor> {
73 public:
74  UsbInterfaceDescriptor(scoped_refptr<const UsbConfigDescriptor> config,
75      PlatformUsbInterfaceDescriptor descriptor);
76
77  size_t GetNumEndpoints() const;
78  scoped_refptr<const UsbEndpointDescriptor>
79      GetEndpoint(size_t index) const;
80
81  int GetInterfaceNumber() const;
82  int GetAlternateSetting() const;
83  int GetInterfaceClass() const;
84  int GetInterfaceSubclass() const;
85  int GetInterfaceProtocol() const;
86
87 private:
88  friend class base::RefCounted<UsbInterfaceDescriptor>;
89  ~UsbInterfaceDescriptor();
90
91  scoped_refptr<const UsbConfigDescriptor> config_;
92  PlatformUsbInterfaceDescriptor descriptor_;
93};
94
95class UsbInterface : public base::RefCounted<UsbInterface> {
96 public:
97  UsbInterface(scoped_refptr<const UsbConfigDescriptor> config,
98      PlatformUsbInterface usbInterface);
99
100  size_t GetNumAltSettings() const;
101  scoped_refptr<const UsbInterfaceDescriptor>
102      GetAltSetting(size_t index) const;
103
104 private:
105  friend class base::RefCounted<UsbInterface>;
106  ~UsbInterface();
107
108  scoped_refptr<const UsbConfigDescriptor> config_;
109  PlatformUsbInterface interface_;
110};
111
112class UsbConfigDescriptor : public base::RefCounted<UsbConfigDescriptor> {
113 public:
114  UsbConfigDescriptor();
115
116  void Reset(PlatformUsbConfigDescriptor config);
117
118  size_t GetNumInterfaces() const;
119
120  scoped_refptr<const UsbInterface>
121      GetInterface(size_t index) const;
122
123 private:
124  friend class base::RefCounted<UsbConfigDescriptor>;
125  ~UsbConfigDescriptor();
126
127  PlatformUsbConfigDescriptor config_;
128};
129
130#endif  // CHROME_BROWSER_USB_USB_INTERFACE_H_
131