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 |