| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/usb/usb_device_handle.h" | 5 #include "device/usb/usb_device_handle.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 EXPECT_TRUE(interface); | 140 EXPECT_TRUE(interface); |
| 141 EXPECT_EQ(0, interface->interface_number); | 141 EXPECT_EQ(0, interface->interface_number); |
| 142 interface = handle->FindInterfaceByEndpoint(0x01); | 142 interface = handle->FindInterfaceByEndpoint(0x01); |
| 143 EXPECT_TRUE(interface); | 143 EXPECT_TRUE(interface); |
| 144 EXPECT_EQ(0, interface->interface_number); | 144 EXPECT_EQ(0, interface->interface_number); |
| 145 EXPECT_FALSE(handle->FindInterfaceByEndpoint(0x82)); | 145 EXPECT_FALSE(handle->FindInterfaceByEndpoint(0x82)); |
| 146 EXPECT_FALSE(handle->FindInterfaceByEndpoint(0x02)); | 146 EXPECT_FALSE(handle->FindInterfaceByEndpoint(0x02)); |
| 147 | 147 |
| 148 scoped_refptr<net::IOBufferWithSize> in_buffer(new net::IOBufferWithSize(64)); | 148 scoped_refptr<net::IOBufferWithSize> in_buffer(new net::IOBufferWithSize(64)); |
| 149 TestCompletionCallback in_completion; | 149 TestCompletionCallback in_completion; |
| 150 handle->GenericTransfer(USB_DIRECTION_INBOUND, 0x81, in_buffer.get(), | 150 handle->GenericTransfer(UsbTransferDirection::INBOUND, 0x81, in_buffer.get(), |
| 151 in_buffer->size(), | 151 in_buffer->size(), |
| 152 5000, // 5 second timeout | 152 5000, // 5 second timeout |
| 153 in_completion.callback()); | 153 in_completion.callback()); |
| 154 | 154 |
| 155 scoped_refptr<net::IOBufferWithSize> out_buffer( | 155 scoped_refptr<net::IOBufferWithSize> out_buffer( |
| 156 new net::IOBufferWithSize(in_buffer->size())); | 156 new net::IOBufferWithSize(in_buffer->size())); |
| 157 TestCompletionCallback out_completion; | 157 TestCompletionCallback out_completion; |
| 158 for (int i = 0; i < out_buffer->size(); ++i) { | 158 for (int i = 0; i < out_buffer->size(); ++i) { |
| 159 out_buffer->data()[i] = i; | 159 out_buffer->data()[i] = i; |
| 160 } | 160 } |
| 161 | 161 |
| 162 handle->GenericTransfer(USB_DIRECTION_OUTBOUND, 0x01, out_buffer.get(), | 162 handle->GenericTransfer(UsbTransferDirection::OUTBOUND, 0x01, |
| 163 out_buffer->size(), | 163 out_buffer.get(), out_buffer->size(), |
| 164 5000, // 5 second timeout | 164 5000, // 5 second timeout |
| 165 out_completion.callback()); | 165 out_completion.callback()); |
| 166 out_completion.WaitForResult(); | 166 out_completion.WaitForResult(); |
| 167 ASSERT_EQ(USB_TRANSFER_COMPLETED, out_completion.status()); | 167 ASSERT_EQ(UsbTransferStatus::COMPLETED, out_completion.status()); |
| 168 EXPECT_EQ(static_cast<size_t>(out_buffer->size()), | 168 EXPECT_EQ(static_cast<size_t>(out_buffer->size()), |
| 169 out_completion.transferred()); | 169 out_completion.transferred()); |
| 170 | 170 |
| 171 in_completion.WaitForResult(); | 171 in_completion.WaitForResult(); |
| 172 ASSERT_EQ(USB_TRANSFER_COMPLETED, in_completion.status()); | 172 ASSERT_EQ(UsbTransferStatus::COMPLETED, in_completion.status()); |
| 173 EXPECT_EQ(static_cast<size_t>(in_buffer->size()), | 173 EXPECT_EQ(static_cast<size_t>(in_buffer->size()), |
| 174 in_completion.transferred()); | 174 in_completion.transferred()); |
| 175 for (size_t i = 0; i < in_completion.transferred(); ++i) { | 175 for (size_t i = 0; i < in_completion.transferred(); ++i) { |
| 176 EXPECT_EQ(out_buffer->data()[i], in_buffer->data()[i]) | 176 EXPECT_EQ(out_buffer->data()[i], in_buffer->data()[i]) |
| 177 << "Mismatch at index " << i << "."; | 177 << "Mismatch at index " << i << "."; |
| 178 } | 178 } |
| 179 | 179 |
| 180 TestResultCallback release_interface; | 180 TestResultCallback release_interface; |
| 181 handle->ReleaseInterface(0, release_interface.callback()); | 181 handle->ReleaseInterface(0, release_interface.callback()); |
| 182 ASSERT_TRUE(release_interface.WaitForResult()); | 182 ASSERT_TRUE(release_interface.WaitForResult()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 209 handle->FindInterfaceByEndpoint(0x82); | 209 handle->FindInterfaceByEndpoint(0x82); |
| 210 EXPECT_TRUE(interface); | 210 EXPECT_TRUE(interface); |
| 211 EXPECT_EQ(1, interface->interface_number); | 211 EXPECT_EQ(1, interface->interface_number); |
| 212 interface = handle->FindInterfaceByEndpoint(0x02); | 212 interface = handle->FindInterfaceByEndpoint(0x02); |
| 213 EXPECT_TRUE(interface); | 213 EXPECT_TRUE(interface); |
| 214 EXPECT_EQ(1, interface->interface_number); | 214 EXPECT_EQ(1, interface->interface_number); |
| 215 | 215 |
| 216 scoped_refptr<net::IOBufferWithSize> in_buffer( | 216 scoped_refptr<net::IOBufferWithSize> in_buffer( |
| 217 new net::IOBufferWithSize(512)); | 217 new net::IOBufferWithSize(512)); |
| 218 TestCompletionCallback in_completion; | 218 TestCompletionCallback in_completion; |
| 219 handle->GenericTransfer(USB_DIRECTION_INBOUND, 0x82, in_buffer.get(), | 219 handle->GenericTransfer(UsbTransferDirection::INBOUND, 0x82, in_buffer.get(), |
| 220 in_buffer->size(), | 220 in_buffer->size(), |
| 221 5000, // 5 second timeout | 221 5000, // 5 second timeout |
| 222 in_completion.callback()); | 222 in_completion.callback()); |
| 223 | 223 |
| 224 scoped_refptr<net::IOBufferWithSize> out_buffer( | 224 scoped_refptr<net::IOBufferWithSize> out_buffer( |
| 225 new net::IOBufferWithSize(in_buffer->size())); | 225 new net::IOBufferWithSize(in_buffer->size())); |
| 226 TestCompletionCallback out_completion; | 226 TestCompletionCallback out_completion; |
| 227 for (int i = 0; i < out_buffer->size(); ++i) { | 227 for (int i = 0; i < out_buffer->size(); ++i) { |
| 228 out_buffer->data()[i] = i; | 228 out_buffer->data()[i] = i; |
| 229 } | 229 } |
| 230 | 230 |
| 231 handle->GenericTransfer(USB_DIRECTION_OUTBOUND, 0x02, out_buffer.get(), | 231 handle->GenericTransfer(UsbTransferDirection::OUTBOUND, 0x02, |
| 232 out_buffer->size(), | 232 out_buffer.get(), out_buffer->size(), |
| 233 5000, // 5 second timeout | 233 5000, // 5 second timeout |
| 234 out_completion.callback()); | 234 out_completion.callback()); |
| 235 out_completion.WaitForResult(); | 235 out_completion.WaitForResult(); |
| 236 ASSERT_EQ(USB_TRANSFER_COMPLETED, out_completion.status()); | 236 ASSERT_EQ(UsbTransferStatus::COMPLETED, out_completion.status()); |
| 237 EXPECT_EQ(static_cast<size_t>(out_buffer->size()), | 237 EXPECT_EQ(static_cast<size_t>(out_buffer->size()), |
| 238 out_completion.transferred()); | 238 out_completion.transferred()); |
| 239 | 239 |
| 240 in_completion.WaitForResult(); | 240 in_completion.WaitForResult(); |
| 241 ASSERT_EQ(USB_TRANSFER_COMPLETED, in_completion.status()); | 241 ASSERT_EQ(UsbTransferStatus::COMPLETED, in_completion.status()); |
| 242 EXPECT_EQ(static_cast<size_t>(in_buffer->size()), | 242 EXPECT_EQ(static_cast<size_t>(in_buffer->size()), |
| 243 in_completion.transferred()); | 243 in_completion.transferred()); |
| 244 for (size_t i = 0; i < in_completion.transferred(); ++i) { | 244 for (size_t i = 0; i < in_completion.transferred(); ++i) { |
| 245 EXPECT_EQ(out_buffer->data()[i], in_buffer->data()[i]) | 245 EXPECT_EQ(out_buffer->data()[i], in_buffer->data()[i]) |
| 246 << "Mismatch at index " << i << "."; | 246 << "Mismatch at index " << i << "."; |
| 247 } | 247 } |
| 248 | 248 |
| 249 TestResultCallback release_interface; | 249 TestResultCallback release_interface; |
| 250 handle->ReleaseInterface(1, release_interface.callback()); | 250 handle->ReleaseInterface(1, release_interface.callback()); |
| 251 ASSERT_TRUE(release_interface.WaitForResult()); | 251 ASSERT_TRUE(release_interface.WaitForResult()); |
| 252 | 252 |
| 253 handle->Close(); | 253 handle->Close(); |
| 254 } | 254 } |
| 255 | 255 |
| 256 TEST_F(UsbDeviceHandleTest, ControlTransfer) { | 256 TEST_F(UsbDeviceHandleTest, ControlTransfer) { |
| 257 if (!UsbTestGadget::IsTestEnabled()) | 257 if (!UsbTestGadget::IsTestEnabled()) |
| 258 return; | 258 return; |
| 259 | 259 |
| 260 std::unique_ptr<UsbTestGadget> gadget = | 260 std::unique_ptr<UsbTestGadget> gadget = |
| 261 UsbTestGadget::Claim(io_thread_->task_runner()); | 261 UsbTestGadget::Claim(io_thread_->task_runner()); |
| 262 ASSERT_TRUE(gadget.get()); | 262 ASSERT_TRUE(gadget.get()); |
| 263 | 263 |
| 264 TestOpenCallback open_device; | 264 TestOpenCallback open_device; |
| 265 gadget->GetDevice()->Open(open_device.callback()); | 265 gadget->GetDevice()->Open(open_device.callback()); |
| 266 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); | 266 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); |
| 267 ASSERT_TRUE(handle.get()); | 267 ASSERT_TRUE(handle.get()); |
| 268 | 268 |
| 269 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(255)); | 269 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(255)); |
| 270 TestCompletionCallback completion; | 270 TestCompletionCallback completion; |
| 271 handle->ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD, | 271 handle->ControlTransfer( |
| 272 UsbDeviceHandle::DEVICE, 0x06, 0x0301, 0x0409, buffer, | 272 UsbTransferDirection::INBOUND, UsbControlTransferType::STANDARD, |
| 273 buffer->size(), 0, completion.callback()); | 273 UsbControlTransferRecipient::DEVICE, 0x06, 0x0301, 0x0409, buffer, |
| 274 buffer->size(), 0, completion.callback()); |
| 274 completion.WaitForResult(); | 275 completion.WaitForResult(); |
| 275 ASSERT_EQ(USB_TRANSFER_COMPLETED, completion.status()); | 276 ASSERT_EQ(UsbTransferStatus::COMPLETED, completion.status()); |
| 276 const char expected_str[] = "\x18\x03G\0o\0o\0g\0l\0e\0 \0I\0n\0c\0.\0"; | 277 const char expected_str[] = "\x18\x03G\0o\0o\0g\0l\0e\0 \0I\0n\0c\0.\0"; |
| 277 EXPECT_EQ(sizeof(expected_str) - 1, completion.transferred()); | 278 EXPECT_EQ(sizeof(expected_str) - 1, completion.transferred()); |
| 278 for (size_t i = 0; i < completion.transferred(); ++i) { | 279 for (size_t i = 0; i < completion.transferred(); ++i) { |
| 279 EXPECT_EQ(expected_str[i], buffer->data()[i]) << "Mismatch at index " << i | 280 EXPECT_EQ(expected_str[i], buffer->data()[i]) << "Mismatch at index " << i |
| 280 << "."; | 281 << "."; |
| 281 } | 282 } |
| 282 | 283 |
| 283 handle->Close(); | 284 handle->Close(); |
| 284 } | 285 } |
| 285 | 286 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 gadget->GetDevice()->Open(open_device.callback()); | 328 gadget->GetDevice()->Open(open_device.callback()); |
| 328 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); | 329 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); |
| 329 ASSERT_TRUE(handle.get()); | 330 ASSERT_TRUE(handle.get()); |
| 330 | 331 |
| 331 TestResultCallback claim_interface; | 332 TestResultCallback claim_interface; |
| 332 handle->ClaimInterface(1, claim_interface.callback()); | 333 handle->ClaimInterface(1, claim_interface.callback()); |
| 333 ASSERT_TRUE(claim_interface.WaitForResult()); | 334 ASSERT_TRUE(claim_interface.WaitForResult()); |
| 334 | 335 |
| 335 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(512)); | 336 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(512)); |
| 336 TestCompletionCallback completion; | 337 TestCompletionCallback completion; |
| 337 handle->GenericTransfer(USB_DIRECTION_INBOUND, 0x82, buffer.get(), | 338 handle->GenericTransfer(UsbTransferDirection::INBOUND, 0x82, buffer.get(), |
| 338 buffer->size(), | 339 buffer->size(), |
| 339 5000, // 5 second timeout | 340 5000, // 5 second timeout |
| 340 completion.callback()); | 341 completion.callback()); |
| 341 | 342 |
| 342 handle->Close(); | 343 handle->Close(); |
| 343 completion.WaitForResult(); | 344 completion.WaitForResult(); |
| 344 ASSERT_EQ(USB_TRANSFER_CANCELLED, completion.status()); | 345 ASSERT_EQ(UsbTransferStatus::CANCELLED, completion.status()); |
| 345 } | 346 } |
| 346 | 347 |
| 347 TEST_F(UsbDeviceHandleTest, CancelOnDisconnect) { | 348 TEST_F(UsbDeviceHandleTest, CancelOnDisconnect) { |
| 348 if (!UsbTestGadget::IsTestEnabled()) { | 349 if (!UsbTestGadget::IsTestEnabled()) { |
| 349 return; | 350 return; |
| 350 } | 351 } |
| 351 | 352 |
| 352 std::unique_ptr<UsbTestGadget> gadget = | 353 std::unique_ptr<UsbTestGadget> gadget = |
| 353 UsbTestGadget::Claim(io_thread_->task_runner()); | 354 UsbTestGadget::Claim(io_thread_->task_runner()); |
| 354 ASSERT_TRUE(gadget.get()); | 355 ASSERT_TRUE(gadget.get()); |
| 355 ASSERT_TRUE(gadget->SetType(UsbTestGadget::ECHO)); | 356 ASSERT_TRUE(gadget->SetType(UsbTestGadget::ECHO)); |
| 356 | 357 |
| 357 TestOpenCallback open_device; | 358 TestOpenCallback open_device; |
| 358 gadget->GetDevice()->Open(open_device.callback()); | 359 gadget->GetDevice()->Open(open_device.callback()); |
| 359 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); | 360 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); |
| 360 ASSERT_TRUE(handle.get()); | 361 ASSERT_TRUE(handle.get()); |
| 361 | 362 |
| 362 TestResultCallback claim_interface; | 363 TestResultCallback claim_interface; |
| 363 handle->ClaimInterface(1, claim_interface.callback()); | 364 handle->ClaimInterface(1, claim_interface.callback()); |
| 364 ASSERT_TRUE(claim_interface.WaitForResult()); | 365 ASSERT_TRUE(claim_interface.WaitForResult()); |
| 365 | 366 |
| 366 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(512)); | 367 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(512)); |
| 367 TestCompletionCallback completion; | 368 TestCompletionCallback completion; |
| 368 handle->GenericTransfer(USB_DIRECTION_INBOUND, 0x82, buffer.get(), | 369 handle->GenericTransfer(UsbTransferDirection::INBOUND, 0x82, buffer.get(), |
| 369 buffer->size(), | 370 buffer->size(), |
| 370 5000, // 5 second timeout | 371 5000, // 5 second timeout |
| 371 completion.callback()); | 372 completion.callback()); |
| 372 | 373 |
| 373 ASSERT_TRUE(gadget->Disconnect()); | 374 ASSERT_TRUE(gadget->Disconnect()); |
| 374 completion.WaitForResult(); | 375 completion.WaitForResult(); |
| 375 ASSERT_EQ(USB_TRANSFER_DISCONNECT, completion.status()); | 376 ASSERT_EQ(UsbTransferStatus::DISCONNECT, completion.status()); |
| 376 | 377 |
| 377 handle->Close(); | 378 handle->Close(); |
| 378 } | 379 } |
| 379 | 380 |
| 380 TEST_F(UsbDeviceHandleTest, Timeout) { | 381 TEST_F(UsbDeviceHandleTest, Timeout) { |
| 381 if (!UsbTestGadget::IsTestEnabled()) { | 382 if (!UsbTestGadget::IsTestEnabled()) { |
| 382 return; | 383 return; |
| 383 } | 384 } |
| 384 | 385 |
| 385 std::unique_ptr<UsbTestGadget> gadget = | 386 std::unique_ptr<UsbTestGadget> gadget = |
| 386 UsbTestGadget::Claim(io_thread_->task_runner()); | 387 UsbTestGadget::Claim(io_thread_->task_runner()); |
| 387 ASSERT_TRUE(gadget.get()); | 388 ASSERT_TRUE(gadget.get()); |
| 388 ASSERT_TRUE(gadget->SetType(UsbTestGadget::ECHO)); | 389 ASSERT_TRUE(gadget->SetType(UsbTestGadget::ECHO)); |
| 389 | 390 |
| 390 TestOpenCallback open_device; | 391 TestOpenCallback open_device; |
| 391 gadget->GetDevice()->Open(open_device.callback()); | 392 gadget->GetDevice()->Open(open_device.callback()); |
| 392 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); | 393 scoped_refptr<UsbDeviceHandle> handle = open_device.WaitForResult(); |
| 393 ASSERT_TRUE(handle.get()); | 394 ASSERT_TRUE(handle.get()); |
| 394 | 395 |
| 395 TestResultCallback claim_interface; | 396 TestResultCallback claim_interface; |
| 396 handle->ClaimInterface(1, claim_interface.callback()); | 397 handle->ClaimInterface(1, claim_interface.callback()); |
| 397 ASSERT_TRUE(claim_interface.WaitForResult()); | 398 ASSERT_TRUE(claim_interface.WaitForResult()); |
| 398 | 399 |
| 399 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(512)); | 400 scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(512)); |
| 400 TestCompletionCallback completion; | 401 TestCompletionCallback completion; |
| 401 handle->GenericTransfer(USB_DIRECTION_INBOUND, 0x82, buffer.get(), | 402 handle->GenericTransfer(UsbTransferDirection::INBOUND, 0x82, buffer.get(), |
| 402 buffer->size(), | 403 buffer->size(), |
| 403 10, // 10 millisecond timeout | 404 10, // 10 millisecond timeout |
| 404 completion.callback()); | 405 completion.callback()); |
| 405 | 406 |
| 406 completion.WaitForResult(); | 407 completion.WaitForResult(); |
| 407 ASSERT_EQ(USB_TRANSFER_TIMEOUT, completion.status()); | 408 ASSERT_EQ(UsbTransferStatus::TIMEOUT, completion.status()); |
| 408 | 409 |
| 409 handle->Close(); | 410 handle->Close(); |
| 410 } | 411 } |
| 411 | 412 |
| 412 } // namespace | 413 } // namespace |
| 413 | 414 |
| 414 } // namespace device | 415 } // namespace device |
| OLD | NEW |