OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef DEVICE_USB_DEVICE_IMPL_H_ | 5 #ifndef DEVICE_USB_DEVICE_IMPL_H_ |
6 #define DEVICE_USB_DEVICE_IMPL_H_ | 6 #define DEVICE_USB_DEVICE_IMPL_H_ |
7 | 7 |
8 #include "base/callback_forward.h" | 8 #include "base/callback_forward.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
11 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
12 #include "device/devices_app/usb/public/interfaces/device.mojom.h" | 12 #include "device/devices_app/usb/public/interfaces/device.mojom.h" |
| 13 #include "device/devices_app/usb/public/interfaces/permission_provider.mojom.h" |
13 #include "device/usb/usb_device_handle.h" | 14 #include "device/usb/usb_device_handle.h" |
| 15 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" |
14 #include "third_party/mojo/src/mojo/public/cpp/bindings/callback.h" | 16 #include "third_party/mojo/src/mojo/public/cpp/bindings/callback.h" |
15 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" | 17 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" |
16 #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" | |
17 | 18 |
18 namespace net { | 19 namespace net { |
19 class IOBuffer; | 20 class IOBuffer; |
20 } | 21 } |
21 | 22 |
22 namespace device { | 23 namespace device { |
23 namespace usb { | 24 namespace usb { |
24 | 25 |
25 // Implementation of the public Device interface. Instances of this class are | 26 // Implementation of the public Device interface. Instances of this class are |
26 // constructed by DeviceManagerImpl and are strongly bound to their MessagePipe | 27 // constructed by DeviceManagerImpl and are strongly bound to their MessagePipe |
27 // lifetime. | 28 // lifetime. |
28 class DeviceImpl : public Device { | 29 class DeviceImpl : public Device { |
29 public: | 30 public: |
30 DeviceImpl(scoped_refptr<UsbDevice> device, | |
31 mojo::InterfaceRequest<Device> request); | |
32 ~DeviceImpl() override; | |
33 | |
34 private: | |
35 using MojoTransferInCallback = | 31 using MojoTransferInCallback = |
36 mojo::Callback<void(TransferStatus, mojo::Array<uint8_t>)>; | 32 mojo::Callback<void(TransferStatus, mojo::Array<uint8_t>)>; |
37 | 33 |
38 using MojoTransferOutCallback = mojo::Callback<void(TransferStatus)>; | 34 using MojoTransferOutCallback = mojo::Callback<void(TransferStatus)>; |
39 | 35 |
| 36 DeviceImpl(scoped_refptr<UsbDevice> device, |
| 37 PermissionProviderPtr permission_provider, |
| 38 mojo::InterfaceRequest<Device> request); |
| 39 ~DeviceImpl() override; |
| 40 |
| 41 private: |
40 // Closes the device if it's open. This will always set |device_handle_| to | 42 // Closes the device if it's open. This will always set |device_handle_| to |
41 // null. | 43 // null. |
42 void CloseHandle(); | 44 void CloseHandle(); |
43 | 45 |
| 46 // Checks interface permissions for control transfers. |
| 47 void HasControlTransferPermission(ControlTransferRecipient recipient, |
| 48 uint16_t index, |
| 49 const base::Callback<void(bool)>& callback); |
| 50 |
44 // Handles completion of an open request. | 51 // Handles completion of an open request. |
45 void OnOpen(const OpenCallback& callback, | 52 void OnOpen(const OpenCallback& callback, |
46 scoped_refptr<device::UsbDeviceHandle> handle); | 53 scoped_refptr<device::UsbDeviceHandle> handle); |
47 | 54 |
48 // Handles completion of an inbound transfer on the UsbDeviceHandle. | |
49 void OnTransferIn(const MojoTransferInCallback& callback, | |
50 UsbTransferStatus status, | |
51 scoped_refptr<net::IOBuffer> data, | |
52 size_t size); | |
53 | |
54 // Handles completion of an outbound transfer on the UsbDeviceHandle. | |
55 void OnTransferOut(const MojoTransferOutCallback& callback, | |
56 UsbTransferStatus status, | |
57 scoped_refptr<net::IOBuffer> data, | |
58 size_t size); | |
59 | |
60 // Handles completion of an inbound isochronous transfer on the | |
61 // UsbDeviceHandle. | |
62 void OnIsochronousTransferIn(const IsochronousTransferInCallback& callback, | |
63 uint32_t packet_length, | |
64 UsbTransferStatus status, | |
65 scoped_refptr<net::IOBuffer> data, | |
66 size_t size); | |
67 | |
68 // Handles completion of an outbound isochronous transfer on the | |
69 // UsbDeviceHandle. | |
70 void OnIsochronousTransferOut(const MojoTransferOutCallback& callback, | |
71 UsbTransferStatus status, | |
72 scoped_refptr<net::IOBuffer> data, | |
73 size_t size); | |
74 | |
75 // Device implementation: | 55 // Device implementation: |
76 void GetDeviceInfo(const GetDeviceInfoCallback& callback) override; | 56 void GetDeviceInfo(const GetDeviceInfoCallback& callback) override; |
77 void GetConfiguration(const GetConfigurationCallback& callback) override; | 57 void GetConfiguration(const GetConfigurationCallback& callback) override; |
78 void Open(const OpenCallback& callback) override; | 58 void Open(const OpenCallback& callback) override; |
79 void Close(const CloseCallback& callback) override; | 59 void Close(const CloseCallback& callback) override; |
80 void SetConfiguration(uint8_t value, | 60 void SetConfiguration(uint8_t value, |
81 const SetConfigurationCallback& callback) override; | 61 const SetConfigurationCallback& callback) override; |
82 void ClaimInterface(uint8_t interface_number, | 62 void ClaimInterface(uint8_t interface_number, |
83 const ClaimInterfaceCallback& callback) override; | 63 const ClaimInterfaceCallback& callback) override; |
84 void ReleaseInterface(uint8_t interface_number, | 64 void ReleaseInterface(uint8_t interface_number, |
(...skipping 25 matching lines...) Expand all Loading... |
110 uint32_t num_packets, | 90 uint32_t num_packets, |
111 uint32_t packet_length, | 91 uint32_t packet_length, |
112 uint32_t timeout, | 92 uint32_t timeout, |
113 const IsochronousTransferInCallback& callback) override; | 93 const IsochronousTransferInCallback& callback) override; |
114 void IsochronousTransferOut( | 94 void IsochronousTransferOut( |
115 uint8_t endpoint_number, | 95 uint8_t endpoint_number, |
116 mojo::Array<mojo::Array<uint8_t>> packets, | 96 mojo::Array<mojo::Array<uint8_t>> packets, |
117 uint32_t timeout, | 97 uint32_t timeout, |
118 const IsochronousTransferOutCallback& callback) override; | 98 const IsochronousTransferOutCallback& callback) override; |
119 | 99 |
120 mojo::StrongBinding<Device> binding_; | 100 mojo::Binding<Device> binding_; |
121 | 101 |
122 scoped_refptr<UsbDevice> device_; | 102 scoped_refptr<UsbDevice> device_; |
123 // The device handle. Will be null before the device is opened and after it | 103 // The device handle. Will be null before the device is opened and after it |
124 // has been closed. | 104 // has been closed. |
125 scoped_refptr<UsbDeviceHandle> device_handle_; | 105 scoped_refptr<UsbDeviceHandle> device_handle_; |
| 106 PermissionProviderPtr permission_provider_; |
126 | 107 |
127 base::WeakPtrFactory<DeviceImpl> weak_factory_; | 108 base::WeakPtrFactory<DeviceImpl> weak_factory_; |
128 | 109 |
129 DISALLOW_COPY_AND_ASSIGN(DeviceImpl); | 110 DISALLOW_COPY_AND_ASSIGN(DeviceImpl); |
130 }; | 111 }; |
131 | 112 |
132 } // namespace usb | 113 } // namespace usb |
133 } // namespace device | 114 } // namespace device |
134 | 115 |
135 #endif // DEVICE_USB_DEVICE_IMPL_H_ | 116 #endif // DEVICE_USB_DEVICE_IMPL_H_ |
OLD | NEW |