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

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

Issue 1158323002: Revert of Build a basic Mojo service framework for device/usb (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « device/usb/type_converters.h ('k') | device/usb/usb.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "device/usb/type_converters.h"
6
7 #include <map>
8 #include <utility>
9
10 #include "base/logging.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "device/usb/usb_device.h"
13 #include "third_party/mojo/src/mojo/public/cpp/bindings/array.h"
14
15 namespace mojo {
16
17 // static
18 device::UsbDeviceFilter
19 TypeConverter<device::UsbDeviceFilter, device::usb::DeviceFilterPtr>::Convert(
20 const device::usb::DeviceFilterPtr& mojo_filter) {
21 device::UsbDeviceFilter filter;
22 if (mojo_filter->has_vendor_id)
23 filter.SetVendorId(mojo_filter->vendor_id);
24 if (mojo_filter->has_product_id)
25 filter.SetProductId(mojo_filter->product_id);
26 if (mojo_filter->has_class_code)
27 filter.SetInterfaceClass(mojo_filter->class_code);
28 if (mojo_filter->has_subclass_code)
29 filter.SetInterfaceSubclass(mojo_filter->subclass_code);
30 if (mojo_filter->has_protocol_code)
31 filter.SetInterfaceProtocol(mojo_filter->protocol_code);
32 return filter;
33 }
34
35 // static
36 device::usb::TransferDirection
37 TypeConverter<device::usb::TransferDirection, device::UsbEndpointDirection>::
38 Convert(const device::UsbEndpointDirection& direction) {
39 if (direction == device::USB_DIRECTION_INBOUND)
40 return device::usb::TRANSFER_DIRECTION_IN;
41 DCHECK(direction == device::USB_DIRECTION_OUTBOUND);
42 return device::usb::TRANSFER_DIRECTION_OUT;
43 }
44
45 // static
46 device::usb::EndpointType
47 TypeConverter<device::usb::EndpointType, device::UsbTransferType>::Convert(
48 const device::UsbTransferType& type) {
49 switch (type) {
50 case device::USB_TRANSFER_ISOCHRONOUS:
51 return device::usb::ENDPOINT_TYPE_ISOCHRONOUS;
52 case device::USB_TRANSFER_BULK:
53 return device::usb::ENDPOINT_TYPE_BULK;
54 case device::USB_TRANSFER_INTERRUPT:
55 return device::usb::ENDPOINT_TYPE_INTERRUPT;
56 // Note that we do not expose control transfer in the public interface
57 // because control endpoints are implied rather than explicitly enumerated
58 // there.
59 default:
60 NOTREACHED();
61 return device::usb::ENDPOINT_TYPE_BULK;
62 }
63 }
64
65 // static
66 device::usb::EndpointInfoPtr
67 TypeConverter<device::usb::EndpointInfoPtr, device::UsbEndpointDescriptor>::
68 Convert(const device::UsbEndpointDescriptor& endpoint) {
69 device::usb::EndpointInfoPtr info = device::usb::EndpointInfo::New();
70 info->endpoint_number = endpoint.address;
71 info->direction =
72 ConvertTo<device::usb::TransferDirection>(endpoint.direction);
73 info->type = ConvertTo<device::usb::EndpointType>(endpoint.transfer_type);
74 info->packet_size = static_cast<uint32_t>(endpoint.maximum_packet_size);
75 return info.Pass();
76 }
77
78 // static
79 device::usb::AlternateInterfaceInfoPtr
80 TypeConverter<device::usb::AlternateInterfaceInfoPtr,
81 device::UsbInterfaceDescriptor>::
82 Convert(const device::UsbInterfaceDescriptor& interface) {
83 device::usb::AlternateInterfaceInfoPtr info =
84 device::usb::AlternateInterfaceInfo::New();
85 info->alternate_setting = interface.alternate_setting;
86 info->class_code = interface.interface_class;
87 info->subclass_code = interface.interface_subclass;
88 info->protocol_code = interface.interface_protocol;
89
90 // Filter out control endpoints for the public interface.
91 info->endpoints = mojo::Array<device::usb::EndpointInfoPtr>::New(0);
92 for (const auto& endpoint : interface.endpoints) {
93 if (endpoint.transfer_type != device::USB_TRANSFER_CONTROL)
94 info->endpoints.push_back(device::usb::EndpointInfo::From(endpoint));
95 }
96
97 return info.Pass();
98 }
99
100 // static
101 mojo::Array<device::usb::InterfaceInfoPtr>
102 TypeConverter<mojo::Array<device::usb::InterfaceInfoPtr>,
103 std::vector<device::UsbInterfaceDescriptor>>::
104 Convert(const std::vector<device::UsbInterfaceDescriptor>& interfaces) {
105 auto infos = mojo::Array<device::usb::InterfaceInfoPtr>::New(0);
106
107 // Aggregate each alternate setting into an InterfaceInfo corresponding to its
108 // interface number.
109 std::map<uint8_t, device::usb::InterfaceInfo*> interface_map;
110 for (size_t i = 0; i < interfaces.size(); ++i) {
111 auto alternate = device::usb::AlternateInterfaceInfo::From(interfaces[i]);
112 auto iter = interface_map.find(interfaces[i].interface_number);
113 if (iter == interface_map.end()) {
114 // This is the first time we're seeing an alternate with this interface
115 // number, so add a new InterfaceInfo to the array and map the number.
116 auto info = device::usb::InterfaceInfo::New();
117 iter = interface_map.insert(std::make_pair(interfaces[i].interface_number,
118 info.get())).first;
119 infos.push_back(info.Pass());
120 }
121 iter->second->alternates.push_back(alternate.Pass());
122 }
123
124 return infos.Pass();
125 }
126
127 // static
128 device::usb::ConfigurationInfoPtr
129 TypeConverter<device::usb::ConfigurationInfoPtr, device::UsbConfigDescriptor>::
130 Convert(const device::UsbConfigDescriptor& config) {
131 device::usb::ConfigurationInfoPtr info =
132 device::usb::ConfigurationInfo::New();
133 info->configuration_value = config.configuration_value;
134 info->interfaces =
135 mojo::Array<device::usb::InterfaceInfoPtr>::From(config.interfaces);
136 return info.Pass();
137 }
138
139 // static
140 device::usb::DeviceInfoPtr
141 TypeConverter<device::usb::DeviceInfoPtr, device::UsbDevice>::Convert(
142 const device::UsbDevice& device) {
143 device::usb::DeviceInfoPtr info = device::usb::DeviceInfo::New();
144 info->vendor_id = device.vendor_id();
145 info->product_id = device.product_id();
146 info->manufacturer = base::UTF16ToUTF8(device.manufacturer_string());
147 info->product = base::UTF16ToUTF8(device.product_string());
148 info->serial_number = base::UTF16ToUTF8(device.serial_number());
149 return info.Pass();
150 }
151
152 } // namespace mojo
OLDNEW
« no previous file with comments | « device/usb/type_converters.h ('k') | device/usb/usb.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698