summaryrefslogtreecommitdiffstats
path: root/device/usb/usb_descriptors.cc
diff options
context:
space:
mode:
Diffstat (limited to 'device/usb/usb_descriptors.cc')
-rw-r--r--device/usb/usb_descriptors.cc81
1 files changed, 1 insertions, 80 deletions
diff --git a/device/usb/usb_descriptors.cc b/device/usb/usb_descriptors.cc
index 22414d7..6defda8 100644
--- a/device/usb/usb_descriptors.cc
+++ b/device/usb/usb_descriptors.cc
@@ -7,7 +7,6 @@
#include <stddef.h>
#include <algorithm>
-#include <vector>
#include "base/barrier_closure.h"
#include "base/bind.h"
@@ -27,42 +26,6 @@ const uint8_t kStringDescriptorType = 0x03;
const int kControlTransferTimeout = 60000; // 1 minute
-struct UsbInterfaceAssociationDescriptor {
- UsbInterfaceAssociationDescriptor(uint8_t first_interface,
- uint8_t interface_count)
- : first_interface(first_interface), interface_count(interface_count) {}
-
- bool operator<(const UsbInterfaceAssociationDescriptor& other) const {
- return first_interface < other.first_interface;
- }
-
- uint8_t first_interface;
- uint8_t interface_count;
-};
-
-void ParseInterfaceAssociationDescriptors(
- const std::vector<uint8_t>& buffer,
- std::vector<UsbInterfaceAssociationDescriptor>* functions) {
- const uint8_t kInterfaceAssociationDescriptorType = 11;
- const uint8_t kInterfaceAssociationDescriptorLength = 8;
- std::vector<uint8_t>::const_iterator it = buffer.begin();
-
- while (it != buffer.end()) {
- // All descriptors must be at least 2 byte which means the length and type
- // are safe to read.
- if (std::distance(it, buffer.end()) < 2)
- return;
- uint8_t length = it[0];
- if (length > std::distance(it, buffer.end()))
- return;
- if (it[1] == kInterfaceAssociationDescriptorType &&
- length == kInterfaceAssociationDescriptorLength) {
- functions->push_back(UsbInterfaceAssociationDescriptor(it[2], it[3]));
- }
- std::advance(it, length);
- }
-}
-
void StoreStringDescriptor(IndexMap::iterator it,
const base::Closure& callback,
const base::string16& string) {
@@ -150,8 +113,7 @@ UsbInterfaceDescriptor::UsbInterfaceDescriptor(uint8_t interface_number,
alternate_setting(alternate_setting),
interface_class(interface_class),
interface_subclass(interface_subclass),
- interface_protocol(interface_protocol),
- first_interface(interface_number) {}
+ interface_protocol(interface_protocol) {}
UsbInterfaceDescriptor::~UsbInterfaceDescriptor() = default;
@@ -166,47 +128,6 @@ UsbConfigDescriptor::UsbConfigDescriptor(uint8_t configuration_value,
UsbConfigDescriptor::~UsbConfigDescriptor() = default;
-void UsbConfigDescriptor::AssignFirstInterfaceNumbers() {
- std::vector<UsbInterfaceAssociationDescriptor> functions;
- ParseInterfaceAssociationDescriptors(extra_data, &functions);
- for (const auto& interface : interfaces) {
- ParseInterfaceAssociationDescriptors(interface.extra_data, &functions);
- for (const auto& endpoint : interface.endpoints)
- ParseInterfaceAssociationDescriptors(endpoint.extra_data, &functions);
- }
-
- // libusb has collected interface association descriptors in the |extra_data|
- // fields of other descriptor types. This may have disturbed their order
- // but sorting by the bFirstInterface should fix it.
- std::sort(functions.begin(), functions.end());
-
- uint8_t remaining_interfaces = 0;
- auto function_it = functions.cbegin();
- for (auto interface_it = interfaces.begin(); interface_it != interfaces.end();
- ++interface_it) {
- if (remaining_interfaces > 0) {
- // Continuation of a previous function. Tag all alternate interfaces
- // (which are guaranteed to be contiguous).
- for (uint8_t interface_number = interface_it->interface_number;
- interface_it != interfaces.end() &&
- interface_it->interface_number == interface_number;
- ++interface_it) {
- interface_it->first_interface = function_it->first_interface;
- }
- if (--remaining_interfaces == 0)
- ++function_it;
- } else if (function_it != functions.end() &&
- interface_it->interface_number == function_it->first_interface) {
- // Start of a new function.
- interface_it->first_interface = function_it->first_interface;
- remaining_interfaces = function_it->interface_count - 1;
- } else {
- // Unassociated interfaces already have |first_interface| set to
- // |interface_number|.
- }
- }
-}
-
bool ParseUsbStringDescriptor(const std::vector<uint8_t>& descriptor,
base::string16* output) {
if (descriptor.size() < 2 || descriptor[1] != kStringDescriptorType)