Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / components / usb_service / usb_device_impl.h
1 // Copyright 2014 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 COMPONENTS_USB_SERVICE_USB_DEVICE_IMPL_H_
6 #define COMPONENTS_USB_SERVICE_USB_DEVICE_IMPL_H_
7
8 #include <vector>
9
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/threading/thread_checker.h"
13 #include "components/usb_service/usb_device.h"
14
15 struct libusb_device;
16 struct libusb_config_descriptor;
17
18 namespace usb_service {
19
20 class UsbDeviceHandleImpl;
21 class UsbContext;
22
23 typedef libusb_device* PlatformUsbDevice;
24 typedef libusb_config_descriptor* PlatformUsbConfigDescriptor;
25
26 class UsbDeviceImpl : public UsbDevice {
27  public:
28 // UsbDevice implementation:
29 #if defined(OS_CHROMEOS)
30   virtual void RequestUsbAccess(
31       int interface_id,
32       const base::Callback<void(bool success)>& callback) OVERRIDE;
33 #endif  // OS_CHROMEOS
34   virtual scoped_refptr<UsbDeviceHandle> Open() OVERRIDE;
35   virtual bool Close(scoped_refptr<UsbDeviceHandle> handle) OVERRIDE;
36   virtual scoped_refptr<UsbConfigDescriptor> ListInterfaces() OVERRIDE;
37
38  protected:
39   friend class UsbServiceImpl;
40
41   // Called by UsbServiceImpl only;
42   UsbDeviceImpl(scoped_refptr<UsbContext> context,
43                 PlatformUsbDevice platform_device,
44                 uint16 vendor_id,
45                 uint16 product_id,
46                 uint32 unique_id);
47
48   virtual ~UsbDeviceImpl();
49
50   // Called only be UsbService.
51   void OnDisconnect();
52
53  private:
54   base::ThreadChecker thread_checker_;
55   PlatformUsbDevice platform_device_;
56
57   // Retain the context so that it will not be released before UsbDevice.
58   scoped_refptr<UsbContext> context_;
59
60   // Opened handles.
61   typedef std::vector<scoped_refptr<UsbDeviceHandleImpl> > HandlesVector;
62   HandlesVector handles_;
63
64   DISALLOW_COPY_AND_ASSIGN(UsbDeviceImpl);
65 };
66
67 }  // namespace usb_service
68
69 #endif  // COMPONENTS_USB_SERVICE_USB_DEVICE_IMPL_H_