Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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/mojo/type_converters.h" | 5 #include "device/usb/mojo/type_converters.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| 11 #include <utility> | 11 #include <utility> |
| 12 | 12 |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 15 #include "device/usb/usb_device.h" | 15 #include "device/usb/usb_device.h" |
| 16 | 16 |
| 17 namespace mojo { | 17 namespace mojo { |
| 18 | 18 |
| 19 // static | 19 // static |
| 20 device::usb::TransferDirection | 20 device::mojom::UsbTransferDirection TypeConverter< |
| 21 TypeConverter<device::usb::TransferDirection, device::UsbEndpointDirection>:: | 21 device::mojom::UsbTransferDirection, |
| 22 Convert(const device::UsbEndpointDirection& direction) { | 22 device::UsbEndpointDirection>::Convert(const device::UsbEndpointDirection& |
| 23 direction) { | |
| 23 if (direction == device::USB_DIRECTION_INBOUND) | 24 if (direction == device::USB_DIRECTION_INBOUND) |
| 24 return device::usb::TransferDirection::INBOUND; | 25 return device::mojom::UsbTransferDirection::INBOUND; |
| 25 DCHECK(direction == device::USB_DIRECTION_OUTBOUND); | 26 DCHECK(direction == device::USB_DIRECTION_OUTBOUND); |
| 26 return device::usb::TransferDirection::OUTBOUND; | 27 return device::mojom::UsbTransferDirection::OUTBOUND; |
| 27 } | 28 } |
| 28 | 29 |
| 29 // static | 30 // static |
| 30 device::usb::TransferStatus | 31 device::mojom::UsbTransferStatus |
| 31 TypeConverter<device::usb::TransferStatus, device::UsbTransferStatus>::Convert( | 32 TypeConverter<device::mojom::UsbTransferStatus, device::UsbTransferStatus>:: |
| 32 const device::UsbTransferStatus& status) { | 33 Convert(const device::UsbTransferStatus& status) { |
| 33 switch (status) { | 34 switch (status) { |
| 34 case device::USB_TRANSFER_COMPLETED: | 35 case device::USB_TRANSFER_COMPLETED: |
| 35 return device::usb::TransferStatus::COMPLETED; | 36 return device::mojom::UsbTransferStatus::COMPLETED; |
| 36 case device::USB_TRANSFER_ERROR: | 37 case device::USB_TRANSFER_ERROR: |
| 37 return device::usb::TransferStatus::TRANSFER_ERROR; | 38 return device::mojom::UsbTransferStatus::TRANSFER_ERROR; |
| 38 case device::USB_TRANSFER_TIMEOUT: | 39 case device::USB_TRANSFER_TIMEOUT: |
| 39 return device::usb::TransferStatus::TIMEOUT; | 40 return device::mojom::UsbTransferStatus::TIMEOUT; |
| 40 case device::USB_TRANSFER_CANCELLED: | 41 case device::USB_TRANSFER_CANCELLED: |
| 41 return device::usb::TransferStatus::CANCELLED; | 42 return device::mojom::UsbTransferStatus::CANCELLED; |
| 42 case device::USB_TRANSFER_STALLED: | 43 case device::USB_TRANSFER_STALLED: |
| 43 return device::usb::TransferStatus::STALLED; | 44 return device::mojom::UsbTransferStatus::STALLED; |
| 44 case device::USB_TRANSFER_DISCONNECT: | 45 case device::USB_TRANSFER_DISCONNECT: |
| 45 return device::usb::TransferStatus::DISCONNECT; | 46 return device::mojom::UsbTransferStatus::DISCONNECT; |
| 46 case device::USB_TRANSFER_OVERFLOW: | 47 case device::USB_TRANSFER_OVERFLOW: |
| 47 return device::usb::TransferStatus::BABBLE; | 48 return device::mojom::UsbTransferStatus::BABBLE; |
| 48 case device::USB_TRANSFER_LENGTH_SHORT: | 49 case device::USB_TRANSFER_LENGTH_SHORT: |
| 49 return device::usb::TransferStatus::SHORT_PACKET; | 50 return device::mojom::UsbTransferStatus::SHORT_PACKET; |
| 50 default: | 51 default: |
| 51 NOTREACHED(); | 52 NOTREACHED(); |
| 52 return device::usb::TransferStatus::TRANSFER_ERROR; | 53 return device::mojom::UsbTransferStatus::TRANSFER_ERROR; |
| 53 } | 54 } |
| 54 } | 55 } |
| 55 | 56 |
| 56 // static | 57 // static |
| 57 device::UsbDeviceHandle::TransferRequestType | 58 device::UsbDeviceHandle::TransferRequestType |
| 58 TypeConverter<device::UsbDeviceHandle::TransferRequestType, | 59 TypeConverter<device::UsbDeviceHandle::TransferRequestType, |
| 59 device::usb::ControlTransferType>:: | 60 device::mojom::UsbControlTransferType>:: |
| 60 Convert(const device::usb::ControlTransferType& type) { | 61 Convert(const device::mojom::UsbControlTransferType& type) { |
| 61 switch (type) { | 62 switch (type) { |
| 62 case device::usb::ControlTransferType::STANDARD: | 63 case device::mojom::UsbControlTransferType::STANDARD: |
| 63 return device::UsbDeviceHandle::STANDARD; | 64 return device::UsbDeviceHandle::STANDARD; |
| 64 case device::usb::ControlTransferType::CLASS: | 65 case device::mojom::UsbControlTransferType::CLASS: |
| 65 return device::UsbDeviceHandle::CLASS; | 66 return device::UsbDeviceHandle::CLASS; |
| 66 case device::usb::ControlTransferType::VENDOR: | 67 case device::mojom::UsbControlTransferType::VENDOR: |
| 67 return device::UsbDeviceHandle::VENDOR; | 68 return device::UsbDeviceHandle::VENDOR; |
| 68 case device::usb::ControlTransferType::RESERVED: | 69 case device::mojom::UsbControlTransferType::RESERVED: |
| 69 return device::UsbDeviceHandle::RESERVED; | 70 return device::UsbDeviceHandle::RESERVED; |
| 70 default: | 71 default: |
| 71 NOTREACHED(); | 72 NOTREACHED(); |
| 72 return device::UsbDeviceHandle::RESERVED; | 73 return device::UsbDeviceHandle::RESERVED; |
| 73 } | 74 } |
| 74 } | 75 } |
| 75 | 76 |
| 76 // static | 77 // static |
| 77 device::UsbDeviceHandle::TransferRecipient | 78 device::UsbDeviceHandle::TransferRecipient |
| 78 TypeConverter<device::UsbDeviceHandle::TransferRecipient, | 79 TypeConverter<device::UsbDeviceHandle::TransferRecipient, |
| 79 device::usb::ControlTransferRecipient>:: | 80 device::mojom::UsbControlTransferRecipient>:: |
| 80 Convert(const device::usb::ControlTransferRecipient& recipient) { | 81 Convert(const device::mojom::UsbControlTransferRecipient& recipient) { |
| 81 switch (recipient) { | 82 switch (recipient) { |
| 82 case device::usb::ControlTransferRecipient::DEVICE: | 83 case device::mojom::UsbControlTransferRecipient::DEVICE: |
| 83 return device::UsbDeviceHandle::DEVICE; | 84 return device::UsbDeviceHandle::DEVICE; |
| 84 case device::usb::ControlTransferRecipient::INTERFACE: | 85 case device::mojom::UsbControlTransferRecipient::INTERFACE: |
| 85 return device::UsbDeviceHandle::INTERFACE; | 86 return device::UsbDeviceHandle::INTERFACE; |
| 86 case device::usb::ControlTransferRecipient::ENDPOINT: | 87 case device::mojom::UsbControlTransferRecipient::ENDPOINT: |
| 87 return device::UsbDeviceHandle::ENDPOINT; | 88 return device::UsbDeviceHandle::ENDPOINT; |
| 88 case device::usb::ControlTransferRecipient::OTHER: | 89 case device::mojom::UsbControlTransferRecipient::OTHER: |
| 89 return device::UsbDeviceHandle::OTHER; | 90 return device::UsbDeviceHandle::OTHER; |
| 90 default: | 91 default: |
| 91 NOTREACHED(); | 92 NOTREACHED(); |
| 92 return device::UsbDeviceHandle::OTHER; | 93 return device::UsbDeviceHandle::OTHER; |
| 93 } | 94 } |
| 94 } | 95 } |
| 95 | 96 |
| 96 // static | 97 // static |
| 97 device::usb::EndpointType | 98 device::mojom::UsbEndpointType |
| 98 TypeConverter<device::usb::EndpointType, device::UsbTransferType>::Convert( | 99 TypeConverter<device::mojom::UsbEndpointType, device::UsbTransferType>::Convert( |
| 99 const device::UsbTransferType& type) { | 100 const device::UsbTransferType& type) { |
| 100 switch (type) { | 101 switch (type) { |
| 101 case device::USB_TRANSFER_ISOCHRONOUS: | 102 case device::USB_TRANSFER_ISOCHRONOUS: |
| 102 return device::usb::EndpointType::ISOCHRONOUS; | 103 return device::mojom::UsbEndpointType::ISOCHRONOUS; |
| 103 case device::USB_TRANSFER_BULK: | 104 case device::USB_TRANSFER_BULK: |
| 104 return device::usb::EndpointType::BULK; | 105 return device::mojom::UsbEndpointType::BULK; |
| 105 case device::USB_TRANSFER_INTERRUPT: | 106 case device::USB_TRANSFER_INTERRUPT: |
| 106 return device::usb::EndpointType::INTERRUPT; | 107 return device::mojom::UsbEndpointType::INTERRUPT; |
| 107 // Note that we do not expose control transfer in the public interface | 108 // Note that we do not expose control transfer in the public interface |
| 108 // because control endpoints are implied rather than explicitly enumerated | 109 // because control endpoints are implied rather than explicitly enumerated |
| 109 // there. | 110 // there. |
| 110 default: | 111 default: |
| 111 NOTREACHED(); | 112 NOTREACHED(); |
| 112 return device::usb::EndpointType::BULK; | 113 return device::mojom::UsbEndpointType::BULK; |
| 113 } | 114 } |
| 114 } | 115 } |
| 115 | 116 |
| 116 // static | 117 // static |
| 117 device::usb::EndpointInfoPtr | 118 device::mojom::UsbEndpointInfoPtr TypeConverter< |
| 118 TypeConverter<device::usb::EndpointInfoPtr, device::UsbEndpointDescriptor>:: | 119 device::mojom::UsbEndpointInfoPtr, |
| 119 Convert(const device::UsbEndpointDescriptor& endpoint) { | 120 device::UsbEndpointDescriptor>::Convert(const device::UsbEndpointDescriptor& |
| 120 device::usb::EndpointInfoPtr info = device::usb::EndpointInfo::New(); | 121 endpoint) { |
| 122 device::mojom::UsbEndpointInfoPtr info = | |
| 123 device::mojom::UsbEndpointInfo::New(); | |
| 121 info->endpoint_number = endpoint.address & 0xf; | 124 info->endpoint_number = endpoint.address & 0xf; |
| 122 info->direction = | 125 info->direction = |
| 123 ConvertTo<device::usb::TransferDirection>(endpoint.direction); | 126 ConvertTo<device::mojom::UsbTransferDirection>(endpoint.direction); |
| 124 info->type = ConvertTo<device::usb::EndpointType>(endpoint.transfer_type); | 127 info->type = |
| 128 ConvertTo<device::mojom::UsbEndpointType>(endpoint.transfer_type); | |
| 125 info->packet_size = static_cast<uint32_t>(endpoint.maximum_packet_size); | 129 info->packet_size = static_cast<uint32_t>(endpoint.maximum_packet_size); |
| 126 return info; | 130 return info; |
| 127 } | 131 } |
| 128 | 132 |
| 129 // static | 133 // static |
| 130 device::usb::AlternateInterfaceInfoPtr | 134 device::mojom::UsbAlternateInterfaceInfoPtr |
| 131 TypeConverter<device::usb::AlternateInterfaceInfoPtr, | 135 TypeConverter<device::mojom::UsbAlternateInterfaceInfoPtr, |
| 132 device::UsbInterfaceDescriptor>:: | 136 device::UsbInterfaceDescriptor>:: |
| 133 Convert(const device::UsbInterfaceDescriptor& interface) { | 137 Convert(const device::UsbInterfaceDescriptor& interface) { |
| 134 device::usb::AlternateInterfaceInfoPtr info = | 138 device::mojom::UsbAlternateInterfaceInfoPtr info = |
| 135 device::usb::AlternateInterfaceInfo::New(); | 139 device::mojom::UsbAlternateInterfaceInfo::New(); |
| 136 info->alternate_setting = interface.alternate_setting; | 140 info->alternate_setting = interface.alternate_setting; |
| 137 info->class_code = interface.interface_class; | 141 info->class_code = interface.interface_class; |
| 138 info->subclass_code = interface.interface_subclass; | 142 info->subclass_code = interface.interface_subclass; |
| 139 info->protocol_code = interface.interface_protocol; | 143 info->protocol_code = interface.interface_protocol; |
| 140 | 144 |
| 141 // Filter out control endpoints for the public interface. | 145 // Filter out control endpoints for the public interface. |
| 142 info->endpoints.reserve(interface.endpoints.size()); | 146 info->endpoints.reserve(interface.endpoints.size()); |
| 143 for (const auto& endpoint : interface.endpoints) { | 147 for (const auto& endpoint : interface.endpoints) { |
| 144 if (endpoint.transfer_type != device::USB_TRANSFER_CONTROL) | 148 if (endpoint.transfer_type != device::USB_TRANSFER_CONTROL) |
| 145 info->endpoints.push_back(device::usb::EndpointInfo::From(endpoint)); | 149 info->endpoints.push_back(device::mojom::UsbEndpointInfo::From(endpoint)); |
| 146 } | 150 } |
| 147 | 151 |
| 148 return info; | 152 return info; |
| 149 } | 153 } |
| 150 | 154 |
| 151 // static | 155 // static |
| 152 std::vector<device::usb::InterfaceInfoPtr> | 156 std::vector<device::mojom::UsbInterfaceInfoPtr> |
| 153 TypeConverter<std::vector<device::usb::InterfaceInfoPtr>, | 157 TypeConverter<std::vector<device::mojom::UsbInterfaceInfoPtr>, |
| 154 std::vector<device::UsbInterfaceDescriptor>>:: | 158 std::vector<device::UsbInterfaceDescriptor>>:: |
| 155 Convert(const std::vector<device::UsbInterfaceDescriptor>& interfaces) { | 159 Convert(const std::vector<device::UsbInterfaceDescriptor>& interfaces) { |
| 156 std::vector<device::usb::InterfaceInfoPtr> infos; | 160 std::vector<device::mojom::UsbInterfaceInfoPtr> infos; |
| 157 | 161 |
| 158 // Aggregate each alternate setting into an InterfaceInfo corresponding to its | 162 // Aggregate each alternate setting into an InterfaceInfo corresponding to its |
| 159 // interface number. | 163 // interface number. |
| 160 std::map<uint8_t, device::usb::InterfaceInfo*> interface_map; | 164 std::map<uint8_t, device::mojom::UsbInterfaceInfo*> interface_map; |
| 161 for (size_t i = 0; i < interfaces.size(); ++i) { | 165 for (size_t i = 0; i < interfaces.size(); ++i) { |
| 162 auto alternate = device::usb::AlternateInterfaceInfo::From(interfaces[i]); | 166 auto alternate = |
| 167 device::mojom::UsbAlternateInterfaceInfo::From(interfaces[i]); | |
| 163 auto iter = interface_map.find(interfaces[i].interface_number); | 168 auto iter = interface_map.find(interfaces[i].interface_number); |
| 164 if (iter == interface_map.end()) { | 169 if (iter == interface_map.end()) { |
| 165 // This is the first time we're seeing an alternate with this interface | 170 // This is the first time we're seeing an alternate with this interface |
| 166 // number, so add a new InterfaceInfo to the array and map the number. | 171 // number, so add a new InterfaceInfo to the array and map the number. |
| 167 auto info = device::usb::InterfaceInfo::New(); | 172 auto info = device::mojom::UsbInterfaceInfo::New(); |
| 168 info->interface_number = interfaces[i].interface_number; | 173 info->interface_number = interfaces[i].interface_number; |
| 169 iter = interface_map | 174 iter = interface_map |
| 170 .insert( | 175 .insert( |
| 171 std::make_pair(interfaces[i].interface_number, info.get())) | 176 std::make_pair(interfaces[i].interface_number, info.get())) |
| 172 .first; | 177 .first; |
| 173 infos.push_back(std::move(info)); | 178 infos.push_back(std::move(info)); |
| 174 } | 179 } |
| 175 iter->second->alternates.push_back(std::move(alternate)); | 180 iter->second->alternates.push_back(std::move(alternate)); |
| 176 } | 181 } |
| 177 | 182 |
| 178 return infos; | 183 return infos; |
| 179 } | 184 } |
| 180 | 185 |
| 181 // static | 186 // static |
| 182 device::usb::ConfigurationInfoPtr | 187 device::mojom::UsbConfigurationInfoPtr TypeConverter< |
| 183 TypeConverter<device::usb::ConfigurationInfoPtr, device::UsbConfigDescriptor>:: | 188 device::mojom::UsbConfigurationInfoPtr, |
| 184 Convert(const device::UsbConfigDescriptor& config) { | 189 device::UsbConfigDescriptor>::Convert(const device::UsbConfigDescriptor& |
| 185 device::usb::ConfigurationInfoPtr info = | 190 config) { |
| 186 device::usb::ConfigurationInfo::New(); | 191 device::mojom::UsbConfigurationInfoPtr info = |
| 192 device::mojom::UsbConfigurationInfo::New(); | |
|
mcasas
2017/04/14 22:00:46
I'd say it's ok to do here
auto info = device::m
Reilly Grant (use Gerrit)
2017/04/14 22:15:30
Done.
| |
| 187 info->configuration_value = config.configuration_value; | 193 info->configuration_value = config.configuration_value; |
| 188 info->interfaces = | 194 info->interfaces = |
| 189 mojo::ConvertTo<std::vector<device::usb::InterfaceInfoPtr>>( | 195 mojo::ConvertTo<std::vector<device::mojom::UsbInterfaceInfoPtr>>( |
| 190 config.interfaces); | 196 config.interfaces); |
| 191 return info; | 197 return info; |
| 192 } | 198 } |
| 193 | 199 |
| 194 // static | 200 // static |
| 195 device::usb::DeviceInfoPtr | 201 device::mojom::UsbDeviceInfoPtr |
| 196 TypeConverter<device::usb::DeviceInfoPtr, device::UsbDevice>::Convert( | 202 TypeConverter<device::mojom::UsbDeviceInfoPtr, device::UsbDevice>::Convert( |
| 197 const device::UsbDevice& device) { | 203 const device::UsbDevice& device) { |
| 198 device::usb::DeviceInfoPtr info = device::usb::DeviceInfo::New(); | 204 device::mojom::UsbDeviceInfoPtr info = device::mojom::UsbDeviceInfo::New(); |
| 199 info->guid = device.guid(); | 205 info->guid = device.guid(); |
| 200 info->usb_version_major = device.usb_version() >> 8; | 206 info->usb_version_major = device.usb_version() >> 8; |
| 201 info->usb_version_minor = device.usb_version() >> 4 & 0xf; | 207 info->usb_version_minor = device.usb_version() >> 4 & 0xf; |
| 202 info->usb_version_subminor = device.usb_version() & 0xf; | 208 info->usb_version_subminor = device.usb_version() & 0xf; |
| 203 info->class_code = device.device_class(); | 209 info->class_code = device.device_class(); |
| 204 info->subclass_code = device.device_subclass(); | 210 info->subclass_code = device.device_subclass(); |
| 205 info->protocol_code = device.device_protocol(); | 211 info->protocol_code = device.device_protocol(); |
| 206 info->vendor_id = device.vendor_id(); | 212 info->vendor_id = device.vendor_id(); |
| 207 info->product_id = device.product_id(); | 213 info->product_id = device.product_id(); |
| 208 info->device_version_major = device.device_version() >> 8; | 214 info->device_version_major = device.device_version() >> 8; |
| 209 info->device_version_minor = device.device_version() >> 4 & 0xf; | 215 info->device_version_minor = device.device_version() >> 4 & 0xf; |
| 210 info->device_version_subminor = device.device_version() & 0xf; | 216 info->device_version_subminor = device.device_version() & 0xf; |
| 211 info->manufacturer_name = base::UTF16ToUTF8(device.manufacturer_string()); | 217 info->manufacturer_name = base::UTF16ToUTF8(device.manufacturer_string()); |
| 212 info->product_name = base::UTF16ToUTF8(device.product_string()); | 218 info->product_name = base::UTF16ToUTF8(device.product_string()); |
| 213 info->serial_number = base::UTF16ToUTF8(device.serial_number()); | 219 info->serial_number = base::UTF16ToUTF8(device.serial_number()); |
| 214 const device::UsbConfigDescriptor* config = device.active_configuration(); | 220 const device::UsbConfigDescriptor* config = device.active_configuration(); |
| 215 info->active_configuration = config ? config->configuration_value : 0; | 221 info->active_configuration = config ? config->configuration_value : 0; |
| 216 info->configurations = | 222 info->configurations = |
| 217 mojo::ConvertTo<std::vector<device::usb::ConfigurationInfoPtr>>( | 223 mojo::ConvertTo<std::vector<device::mojom::UsbConfigurationInfoPtr>>( |
| 218 device.configurations()); | 224 device.configurations()); |
| 219 return info; | 225 return info; |
| 220 } | 226 } |
| 221 | 227 |
| 222 // static | 228 // static |
| 223 device::usb::IsochronousPacketPtr | 229 device::mojom::UsbIsochronousPacketPtr |
| 224 TypeConverter<device::usb::IsochronousPacketPtr, | 230 TypeConverter<device::mojom::UsbIsochronousPacketPtr, |
| 225 device::UsbDeviceHandle::IsochronousPacket>:: | 231 device::UsbDeviceHandle::IsochronousPacket>:: |
| 226 Convert(const device::UsbDeviceHandle::IsochronousPacket& packet) { | 232 Convert(const device::UsbDeviceHandle::IsochronousPacket& packet) { |
| 227 device::usb::IsochronousPacketPtr info = | 233 device::mojom::UsbIsochronousPacketPtr info = |
| 228 device::usb::IsochronousPacket::New(); | 234 device::mojom::UsbIsochronousPacket::New(); |
| 229 info->length = packet.length; | 235 info->length = packet.length; |
| 230 info->transferred_length = packet.transferred_length; | 236 info->transferred_length = packet.transferred_length; |
| 231 info->status = mojo::ConvertTo<device::usb::TransferStatus>(packet.status); | 237 info->status = |
| 238 mojo::ConvertTo<device::mojom::UsbTransferStatus>(packet.status); | |
| 232 return info; | 239 return info; |
| 233 } | 240 } |
| 234 | 241 |
| 235 } // namespace mojo | 242 } // namespace mojo |
| OLD | NEW |