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

Side by Side Diff: device/usb/usb_device_handle_impl.cc

Issue 580963002: Add a service to track devices selected by the user. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
OLDNEW
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_impl.h" 5 #include "device/usb/usb_device_handle_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 return false; 512 return false;
513 } 513 }
514 514
515 if (desc.iSerialNumber == 0) { 515 if (desc.iSerialNumber == 0) {
516 return false; 516 return false;
517 } 517 }
518 518
519 return GetStringDescriptor(desc.iSerialNumber, serial); 519 return GetStringDescriptor(desc.iSerialNumber, serial);
520 } 520 }
521 521
522 void UsbDeviceHandleImpl::ControlTransfer( 522 void UsbDeviceHandleImpl::ControlTransfer(UsbEndpointDirection direction,
523 const UsbEndpointDirection direction, 523 TransferRequestType request_type,
524 const TransferRequestType request_type, 524 TransferRecipient recipient,
525 const TransferRecipient recipient, 525 uint8 request,
526 const uint8 request, 526 uint16 value,
527 const uint16 value, 527 uint16 index,
528 const uint16 index, 528 net::IOBuffer* buffer,
529 net::IOBuffer* buffer, 529 size_t length,
530 const size_t length, 530 unsigned int timeout,
531 const unsigned int timeout, 531 const UsbTransferCallback& callback) {
532 const UsbTransferCallback& callback) {
533 if (!device_) { 532 if (!device_) {
534 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0); 533 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
535 return; 534 return;
536 } 535 }
537 536
538 const size_t resized_length = LIBUSB_CONTROL_SETUP_SIZE + length; 537 const size_t resized_length = LIBUSB_CONTROL_SETUP_SIZE + length;
539 scoped_refptr<net::IOBuffer> resized_buffer( 538 scoped_refptr<net::IOBuffer> resized_buffer(
540 new net::IOBufferWithSize(static_cast<int>(resized_length))); 539 new net::IOBufferWithSize(static_cast<int>(resized_length)));
541 if (!resized_buffer.get()) { 540 if (!resized_buffer.get()) {
542 callback.Run(USB_TRANSFER_ERROR, buffer, 0); 541 callback.Run(USB_TRANSFER_ERROR, buffer, 0);
(...skipping 19 matching lines...) Expand all
562 this, 561 this,
563 timeout); 562 timeout);
564 563
565 PostOrSubmitTransfer(transfer, 564 PostOrSubmitTransfer(transfer,
566 USB_TRANSFER_CONTROL, 565 USB_TRANSFER_CONTROL,
567 resized_buffer.get(), 566 resized_buffer.get(),
568 resized_length, 567 resized_length,
569 callback); 568 callback);
570 } 569 }
571 570
572 void UsbDeviceHandleImpl::BulkTransfer(const UsbEndpointDirection direction, 571 void UsbDeviceHandleImpl::BulkTransfer(UsbEndpointDirection direction,
573 const uint8 endpoint, 572 uint8 endpoint,
574 net::IOBuffer* buffer, 573 net::IOBuffer* buffer,
575 const size_t length, 574 size_t length,
576 const unsigned int timeout, 575 unsigned int timeout,
577 const UsbTransferCallback& callback) { 576 const UsbTransferCallback& callback) {
578 if (!device_) { 577 if (!device_) {
579 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0); 578 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
580 return; 579 return;
581 } 580 }
582 581
583 PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0); 582 PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
584 const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint; 583 const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
585 libusb_fill_bulk_transfer(transfer, 584 libusb_fill_bulk_transfer(transfer,
586 handle_, 585 handle_,
587 new_endpoint, 586 new_endpoint,
588 reinterpret_cast<uint8*>(buffer->data()), 587 reinterpret_cast<uint8*>(buffer->data()),
589 static_cast<int>(length), 588 static_cast<int>(length),
590 &UsbDeviceHandleImpl::PlatformTransferCallback, 589 &UsbDeviceHandleImpl::PlatformTransferCallback,
591 this, 590 this,
592 timeout); 591 timeout);
593 592
594 PostOrSubmitTransfer(transfer, USB_TRANSFER_BULK, buffer, length, callback); 593 PostOrSubmitTransfer(transfer, USB_TRANSFER_BULK, buffer, length, callback);
595 } 594 }
596 595
597 void UsbDeviceHandleImpl::InterruptTransfer( 596 void UsbDeviceHandleImpl::InterruptTransfer(
598 const UsbEndpointDirection direction, 597 UsbEndpointDirection direction,
599 const uint8 endpoint, 598 uint8 endpoint,
600 net::IOBuffer* buffer, 599 net::IOBuffer* buffer,
601 const size_t length, 600 size_t length,
602 const unsigned int timeout, 601 unsigned int timeout,
603 const UsbTransferCallback& callback) { 602 const UsbTransferCallback& callback) {
604 if (!device_) { 603 if (!device_) {
605 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0); 604 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
606 return; 605 return;
607 } 606 }
608 607
609 PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0); 608 PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
610 const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint; 609 const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
611 libusb_fill_interrupt_transfer(transfer, 610 libusb_fill_interrupt_transfer(transfer,
612 handle_, 611 handle_,
613 new_endpoint, 612 new_endpoint,
614 reinterpret_cast<uint8*>(buffer->data()), 613 reinterpret_cast<uint8*>(buffer->data()),
615 static_cast<int>(length), 614 static_cast<int>(length),
616 &UsbDeviceHandleImpl::PlatformTransferCallback, 615 &UsbDeviceHandleImpl::PlatformTransferCallback,
617 this, 616 this,
618 timeout); 617 timeout);
619 618
620 PostOrSubmitTransfer( 619 PostOrSubmitTransfer(
621 transfer, USB_TRANSFER_INTERRUPT, buffer, length, callback); 620 transfer, USB_TRANSFER_INTERRUPT, buffer, length, callback);
622 } 621 }
623 622
624 void UsbDeviceHandleImpl::IsochronousTransfer( 623 void UsbDeviceHandleImpl::IsochronousTransfer(
625 const UsbEndpointDirection direction, 624 UsbEndpointDirection direction,
626 const uint8 endpoint, 625 uint8 endpoint,
627 net::IOBuffer* buffer, 626 net::IOBuffer* buffer,
628 const size_t length, 627 size_t length,
629 const unsigned int packets, 628 unsigned int packets,
630 const unsigned int packet_length, 629 unsigned int packet_length,
631 const unsigned int timeout, 630 unsigned int timeout,
632 const UsbTransferCallback& callback) { 631 const UsbTransferCallback& callback) {
633 if (!device_) { 632 if (!device_) {
634 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0); 633 callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
635 return; 634 return;
636 } 635 }
637 636
638 const uint64 total_length = packets * packet_length; 637 const uint64 total_length = packets * packet_length;
639 CHECK(packets <= length && total_length <= length) 638 CHECK(packets <= length && total_length <= length)
640 << "transfer length is too small"; 639 << "transfer length is too small";
641 640
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 // Attempt-release all the interfaces. 763 // Attempt-release all the interfaces.
765 // It will be retained until the transfer cancellation is finished. 764 // It will be retained until the transfer cancellation is finished.
766 claimed_interfaces_.clear(); 765 claimed_interfaces_.clear();
767 766
768 // Cannot close device handle here. Need to wait for libusb_cancel_transfer to 767 // Cannot close device handle here. Need to wait for libusb_cancel_transfer to
769 // finish. 768 // finish.
770 device_ = NULL; 769 device_ = NULL;
771 } 770 }
772 771
773 } // namespace device 772 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698