| 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 #include "device/devices_app/usb/device_impl.h" | 5 #include "device/devices_app/usb/device_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/callback.h" | 11 #include "base/callback.h" |
| 11 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
| 12 #include "device/devices_app/usb/type_converters.h" | 13 #include "device/devices_app/usb/type_converters.h" |
| 13 #include "device/usb/usb_descriptors.h" | 14 #include "device/usb/usb_descriptors.h" |
| 14 #include "device/usb/usb_device.h" | 15 #include "device/usb/usb_device.h" |
| 15 #include "net/base/io_buffer.h" | 16 #include "net/base/io_buffer.h" |
| 16 | 17 |
| 17 namespace device { | 18 namespace device { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 size_t buffer_size) { | 68 size_t buffer_size) { |
| 68 mojo::Array<uint8_t> data; | 69 mojo::Array<uint8_t> data; |
| 69 if (buffer) { | 70 if (buffer) { |
| 70 // TODO(rockot/reillyg): We should change UsbDeviceHandle to use a | 71 // TODO(rockot/reillyg): We should change UsbDeviceHandle to use a |
| 71 // std::vector<uint8_t> instead of net::IOBuffer. Then we could move | 72 // std::vector<uint8_t> instead of net::IOBuffer. Then we could move |
| 72 // instead of copy. | 73 // instead of copy. |
| 73 std::vector<uint8_t> bytes(buffer_size); | 74 std::vector<uint8_t> bytes(buffer_size); |
| 74 std::copy(buffer->data(), buffer->data() + buffer_size, bytes.begin()); | 75 std::copy(buffer->data(), buffer->data() + buffer_size, bytes.begin()); |
| 75 data.Swap(&bytes); | 76 data.Swap(&bytes); |
| 76 } | 77 } |
| 77 callback->Run(mojo::ConvertTo<TransferStatus>(status), data.Pass()); | 78 callback->Run(mojo::ConvertTo<TransferStatus>(status), std::move(data)); |
| 78 } | 79 } |
| 79 | 80 |
| 80 void OnControlTransferInPermissionCheckComplete( | 81 void OnControlTransferInPermissionCheckComplete( |
| 81 scoped_refptr<UsbDeviceHandle> device_handle, | 82 scoped_refptr<UsbDeviceHandle> device_handle, |
| 82 ControlTransferParamsPtr params, | 83 ControlTransferParamsPtr params, |
| 83 int length, | 84 int length, |
| 84 int timeout, | 85 int timeout, |
| 85 scoped_ptr<Device::ControlTransferInCallback> callback, | 86 scoped_ptr<Device::ControlTransferInCallback> callback, |
| 86 bool allowed) { | 87 bool allowed) { |
| 87 if (allowed) { | 88 if (allowed) { |
| 88 scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(length); | 89 scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(length); |
| 89 device_handle->ControlTransfer( | 90 device_handle->ControlTransfer( |
| 90 USB_DIRECTION_INBOUND, | 91 USB_DIRECTION_INBOUND, |
| 91 mojo::ConvertTo<UsbDeviceHandle::TransferRequestType>(params->type), | 92 mojo::ConvertTo<UsbDeviceHandle::TransferRequestType>(params->type), |
| 92 mojo::ConvertTo<UsbDeviceHandle::TransferRecipient>(params->recipient), | 93 mojo::ConvertTo<UsbDeviceHandle::TransferRecipient>(params->recipient), |
| 93 params->request, params->value, params->index, buffer, length, timeout, | 94 params->request, params->value, params->index, buffer, length, timeout, |
| 94 base::Bind(&OnTransferIn, base::Passed(&callback))); | 95 base::Bind(&OnTransferIn, base::Passed(&callback))); |
| 95 } else { | 96 } else { |
| 96 mojo::Array<uint8_t> data; | 97 mojo::Array<uint8_t> data; |
| 97 callback->Run(TRANSFER_STATUS_PERMISSION_DENIED, data.Pass()); | 98 callback->Run(TRANSFER_STATUS_PERMISSION_DENIED, std::move(data)); |
| 98 } | 99 } |
| 99 } | 100 } |
| 100 | 101 |
| 101 void OnTransferOut(scoped_ptr<MojoTransferOutCallback> callback, | 102 void OnTransferOut(scoped_ptr<MojoTransferOutCallback> callback, |
| 102 UsbTransferStatus status, | 103 UsbTransferStatus status, |
| 103 scoped_refptr<net::IOBuffer> buffer, | 104 scoped_refptr<net::IOBuffer> buffer, |
| 104 size_t buffer_size) { | 105 size_t buffer_size) { |
| 105 callback->Run(mojo::ConvertTo<TransferStatus>(status)); | 106 callback->Run(mojo::ConvertTo<TransferStatus>(status)); |
| 106 } | 107 } |
| 107 | 108 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 137 mojo::Array<mojo::Array<uint8_t>> packets(num_packets); | 138 mojo::Array<mojo::Array<uint8_t>> packets(num_packets); |
| 138 if (buffer) { | 139 if (buffer) { |
| 139 for (size_t i = 0; i < num_packets; ++i) { | 140 for (size_t i = 0; i < num_packets; ++i) { |
| 140 size_t packet_index = i * packet_size; | 141 size_t packet_index = i * packet_size; |
| 141 std::vector<uint8_t> bytes(packet_size); | 142 std::vector<uint8_t> bytes(packet_size); |
| 142 std::copy(buffer->data() + packet_index, | 143 std::copy(buffer->data() + packet_index, |
| 143 buffer->data() + packet_index + packet_size, bytes.begin()); | 144 buffer->data() + packet_index + packet_size, bytes.begin()); |
| 144 packets[i].Swap(&bytes); | 145 packets[i].Swap(&bytes); |
| 145 } | 146 } |
| 146 } | 147 } |
| 147 callback->Run(mojo::ConvertTo<TransferStatus>(status), packets.Pass()); | 148 callback->Run(mojo::ConvertTo<TransferStatus>(status), std::move(packets)); |
| 148 } | 149 } |
| 149 | 150 |
| 150 void OnIsochronousTransferOut( | 151 void OnIsochronousTransferOut( |
| 151 scoped_ptr<Device::IsochronousTransferOutCallback> callback, | 152 scoped_ptr<Device::IsochronousTransferOutCallback> callback, |
| 152 UsbTransferStatus status, | 153 UsbTransferStatus status, |
| 153 scoped_refptr<net::IOBuffer> buffer, | 154 scoped_refptr<net::IOBuffer> buffer, |
| 154 size_t buffer_size) { | 155 size_t buffer_size) { |
| 155 callback->Run(mojo::ConvertTo<TransferStatus>(status)); | 156 callback->Run(mojo::ConvertTo<TransferStatus>(status)); |
| 156 } | 157 } |
| 157 | 158 |
| 158 } // namespace | 159 } // namespace |
| 159 | 160 |
| 160 DeviceImpl::DeviceImpl(scoped_refptr<UsbDevice> device, | 161 DeviceImpl::DeviceImpl(scoped_refptr<UsbDevice> device, |
| 161 PermissionProviderPtr permission_provider, | 162 PermissionProviderPtr permission_provider, |
| 162 mojo::InterfaceRequest<Device> request) | 163 mojo::InterfaceRequest<Device> request) |
| 163 : binding_(this, request.Pass()), | 164 : binding_(this, std::move(request)), |
| 164 device_(device), | 165 device_(device), |
| 165 permission_provider_(permission_provider.Pass()), | 166 permission_provider_(std::move(permission_provider)), |
| 166 weak_factory_(this) { | 167 weak_factory_(this) { |
| 167 // This object owns itself and will be destroyed if either the message pipe | 168 // This object owns itself and will be destroyed if either the message pipe |
| 168 // it is bound to is closed or the PermissionProvider it depends on is | 169 // it is bound to is closed or the PermissionProvider it depends on is |
| 169 // unavailable. | 170 // unavailable. |
| 170 binding_.set_connection_error_handler([this]() { delete this; }); | 171 binding_.set_connection_error_handler([this]() { delete this; }); |
| 171 permission_provider_.set_connection_error_handler([this]() { delete this; }); | 172 permission_provider_.set_connection_error_handler([this]() { delete this; }); |
| 172 } | 173 } |
| 173 | 174 |
| 174 DeviceImpl::~DeviceImpl() { | 175 DeviceImpl::~DeviceImpl() { |
| 175 CloseHandle(); | 176 CloseHandle(); |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 memcpy(packet, packets[i].storage().data(), packets[i].size()); | 447 memcpy(packet, packets[i].storage().data(), packets[i].size()); |
| 447 } | 448 } |
| 448 device_handle_->IsochronousTransfer( | 449 device_handle_->IsochronousTransfer( |
| 449 USB_DIRECTION_OUTBOUND, endpoint_address, buffer, transfer_size, | 450 USB_DIRECTION_OUTBOUND, endpoint_address, buffer, transfer_size, |
| 450 static_cast<uint32_t>(packets.size()), packet_size, timeout, | 451 static_cast<uint32_t>(packets.size()), packet_size, timeout, |
| 451 base::Bind(&OnIsochronousTransferOut, base::Passed(&callback_ptr))); | 452 base::Bind(&OnIsochronousTransferOut, base::Passed(&callback_ptr))); |
| 452 } | 453 } |
| 453 | 454 |
| 454 } // namespace usb | 455 } // namespace usb |
| 455 } // namespace device | 456 } // namespace device |
| OLD | NEW |