Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: device/devices_app/usb/device_impl.cc

Issue 1352683006: Move device opening from DeviceManager to Device. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « device/devices_app/usb/device_impl.h ('k') | device/devices_app/usb/device_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "device/devices_app/usb/device_impl.h" 5 #include "device/devices_app/usb/device_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "device/devices_app/usb/type_converters.h" 10 #include "device/devices_app/usb/type_converters.h"
(...skipping 21 matching lines...) Expand all
32 } 32 }
33 33
34 scoped_refptr<net::IOBuffer> CreateTransferBuffer(size_t size) { 34 scoped_refptr<net::IOBuffer> CreateTransferBuffer(size_t size) {
35 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer( 35 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(
36 std::max(static_cast<size_t>(1u), static_cast<size_t>(size))); 36 std::max(static_cast<size_t>(1u), static_cast<size_t>(size)));
37 return buffer; 37 return buffer;
38 } 38 }
39 39
40 } // namespace 40 } // namespace
41 41
42 DeviceImpl::DeviceImpl(scoped_refptr<UsbDeviceHandle> device_handle, 42 DeviceImpl::DeviceImpl(scoped_refptr<UsbDevice> device,
43 mojo::InterfaceRequest<Device> request) 43 mojo::InterfaceRequest<Device> request)
44 : binding_(this, request.Pass()), 44 : binding_(this, request.Pass()), device_(device), weak_factory_(this) {}
45 device_handle_(device_handle),
46 weak_factory_(this) {
47 }
48 45
49 DeviceImpl::~DeviceImpl() { 46 DeviceImpl::~DeviceImpl() {
50 CloseHandle(); 47 CloseHandle();
51 } 48 }
52 49
53 void DeviceImpl::CloseHandle() { 50 void DeviceImpl::CloseHandle() {
54 if (device_handle_) 51 if (device_handle_)
55 device_handle_->Close(); 52 device_handle_->Close();
56 device_handle_ = nullptr; 53 device_handle_ = nullptr;
57 } 54 }
58 55
56 void DeviceImpl::OnOpen(const OpenCallback& callback,
57 scoped_refptr<UsbDeviceHandle> handle) {
58 device_handle_ = handle;
59 callback.Run(handle ? OPEN_DEVICE_ERROR_OK : OPEN_DEVICE_ERROR_ACCESS_DENIED);
60 }
61
59 void DeviceImpl::OnTransferIn(const MojoTransferInCallback& callback, 62 void DeviceImpl::OnTransferIn(const MojoTransferInCallback& callback,
60 UsbTransferStatus status, 63 UsbTransferStatus status,
61 scoped_refptr<net::IOBuffer> buffer, 64 scoped_refptr<net::IOBuffer> buffer,
62 size_t buffer_size) { 65 size_t buffer_size) {
63 mojo::Array<uint8_t> data; 66 mojo::Array<uint8_t> data;
64 if (buffer) { 67 if (buffer) {
65 // TODO(rockot/reillyg): We should change UsbDeviceHandle to use a 68 // TODO(rockot/reillyg): We should change UsbDeviceHandle to use a
66 // std::vector<uint8_t> instead of net::IOBuffer. Then we could move 69 // std::vector<uint8_t> instead of net::IOBuffer. Then we could move
67 // instead of copy. 70 // instead of copy.
68 std::vector<uint8_t> bytes(buffer_size); 71 std::vector<uint8_t> bytes(buffer_size);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 103 }
101 104
102 void DeviceImpl::OnIsochronousTransferOut( 105 void DeviceImpl::OnIsochronousTransferOut(
103 const MojoTransferOutCallback& callback, 106 const MojoTransferOutCallback& callback,
104 UsbTransferStatus status, 107 UsbTransferStatus status,
105 scoped_refptr<net::IOBuffer> buffer, 108 scoped_refptr<net::IOBuffer> buffer,
106 size_t buffer_size) { 109 size_t buffer_size) {
107 callback.Run(mojo::ConvertTo<TransferStatus>(status)); 110 callback.Run(mojo::ConvertTo<TransferStatus>(status));
108 } 111 }
109 112
113 void DeviceImpl::GetDeviceInfo(const GetDeviceInfoCallback& callback) {
114 callback.Run(DeviceInfo::From(*device_));
115 }
116
117 void DeviceImpl::GetConfiguration(const GetConfigurationCallback& callback) {
118 const UsbConfigDescriptor* config = device_->GetActiveConfiguration();
119 callback.Run(config ? ConfigurationInfo::From(*config) : nullptr);
120 }
121
122 void DeviceImpl::Open(const OpenCallback& callback) {
123 device_->Open(
124 base::Bind(&DeviceImpl::OnOpen, weak_factory_.GetWeakPtr(), callback));
125 }
126
110 void DeviceImpl::Close(const CloseCallback& callback) { 127 void DeviceImpl::Close(const CloseCallback& callback) {
111 CloseHandle(); 128 CloseHandle();
112 callback.Run(); 129 callback.Run();
113 } 130 }
114 131
115 void DeviceImpl::GetDeviceInfo(const GetDeviceInfoCallback& callback) {
116 if (!device_handle_) {
117 callback.Run(DeviceInfoPtr());
118 return;
119 }
120
121 // TODO(rockot/reillyg): Converting configuration info should be done in the
122 // TypeConverter, but GetConfiguration() is non-const so we do it here for
123 // now.
124 DeviceInfoPtr info = DeviceInfo::From(*device_handle_->GetDevice());
125 const std::vector<UsbConfigDescriptor>& configs =
126 device_handle_->GetDevice()->configurations();
127 info->configurations = mojo::Array<ConfigurationInfoPtr>::New(configs.size());
128 for (size_t i = 0; i < configs.size(); ++i) {
129 info->configurations[i] = ConfigurationInfo::From(configs[i]);
130 }
131 callback.Run(info.Pass());
132 }
133
134 void DeviceImpl::SetConfiguration(uint8_t value, 132 void DeviceImpl::SetConfiguration(uint8_t value,
135 const SetConfigurationCallback& callback) { 133 const SetConfigurationCallback& callback) {
136 if (!device_handle_) { 134 if (!device_handle_) {
137 callback.Run(false); 135 callback.Run(false);
138 return; 136 return;
139 } 137 }
140 138
141 device_handle_->SetConfiguration(value, WrapMojoCallback(callback)); 139 device_handle_->SetConfiguration(value, WrapMojoCallback(callback));
142 } 140 }
143 141
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 } 317 }
320 device_handle_->IsochronousTransfer( 318 device_handle_->IsochronousTransfer(
321 USB_DIRECTION_OUTBOUND, endpoint_address, buffer, transfer_size, 319 USB_DIRECTION_OUTBOUND, endpoint_address, buffer, transfer_size,
322 static_cast<uint32_t>(packets.size()), packet_size, timeout, 320 static_cast<uint32_t>(packets.size()), packet_size, timeout,
323 base::Bind(&DeviceImpl::OnIsochronousTransferOut, 321 base::Bind(&DeviceImpl::OnIsochronousTransferOut,
324 weak_factory_.GetWeakPtr(), callback)); 322 weak_factory_.GetWeakPtr(), callback));
325 } 323 }
326 324
327 } // namespace usb 325 } // namespace usb
328 } // namespace device 326 } // namespace device
OLDNEW
« no previous file with comments | « device/devices_app/usb/device_impl.h ('k') | device/devices_app/usb/device_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698