| Index: device/usb/usb_interface_impl.cc
|
| diff --git a/device/usb/usb_interface_impl.cc b/device/usb/usb_interface_impl.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..af3d0e3fd1c8e4fe3d876378f2af6804b1acf693
|
| --- /dev/null
|
| +++ b/device/usb/usb_interface_impl.cc
|
| @@ -0,0 +1,168 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "device/usb/usb_interface_impl.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "third_party/libusb/src/libusb/libusb.h"
|
| +
|
| +namespace device {
|
| +
|
| +UsbEndpointDescriptorImpl::UsbEndpointDescriptorImpl(
|
| + scoped_refptr<const UsbConfigDescriptor> config,
|
| + PlatformUsbEndpointDescriptor descriptor)
|
| + : config_(config), descriptor_(descriptor) {
|
| +}
|
| +
|
| +UsbEndpointDescriptorImpl::~UsbEndpointDescriptorImpl() {
|
| +}
|
| +
|
| +int UsbEndpointDescriptorImpl::GetAddress() const {
|
| + return descriptor_->bEndpointAddress & LIBUSB_ENDPOINT_ADDRESS_MASK;
|
| +}
|
| +
|
| +UsbEndpointDirection UsbEndpointDescriptorImpl::GetDirection() const {
|
| + switch (descriptor_->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) {
|
| + case LIBUSB_ENDPOINT_IN:
|
| + return USB_DIRECTION_INBOUND;
|
| + case LIBUSB_ENDPOINT_OUT:
|
| + return USB_DIRECTION_OUTBOUND;
|
| + default:
|
| + NOTREACHED();
|
| + return USB_DIRECTION_INBOUND;
|
| + }
|
| +}
|
| +
|
| +int UsbEndpointDescriptorImpl::GetMaximumPacketSize() const {
|
| + return descriptor_->wMaxPacketSize;
|
| +}
|
| +
|
| +UsbSynchronizationType UsbEndpointDescriptorImpl::GetSynchronizationType()
|
| + const {
|
| + switch (descriptor_->bmAttributes & LIBUSB_ISO_SYNC_TYPE_MASK) {
|
| + case LIBUSB_ISO_SYNC_TYPE_NONE:
|
| + return USB_SYNCHRONIZATION_NONE;
|
| + case LIBUSB_ISO_SYNC_TYPE_ASYNC:
|
| + return USB_SYNCHRONIZATION_ASYNCHRONOUS;
|
| + case LIBUSB_ISO_SYNC_TYPE_ADAPTIVE:
|
| + return USB_SYNCHRONIZATION_ADAPTIVE;
|
| + case LIBUSB_ISO_SYNC_TYPE_SYNC:
|
| + return USB_SYNCHRONIZATION_SYNCHRONOUS;
|
| + default:
|
| + NOTREACHED();
|
| + return USB_SYNCHRONIZATION_NONE;
|
| + }
|
| +}
|
| +
|
| +UsbTransferType UsbEndpointDescriptorImpl::GetTransferType() const {
|
| + switch (descriptor_->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) {
|
| + case LIBUSB_TRANSFER_TYPE_CONTROL:
|
| + return USB_TRANSFER_CONTROL;
|
| + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
| + return USB_TRANSFER_ISOCHRONOUS;
|
| + case LIBUSB_TRANSFER_TYPE_BULK:
|
| + return USB_TRANSFER_BULK;
|
| + case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
| + return USB_TRANSFER_INTERRUPT;
|
| + default:
|
| + NOTREACHED();
|
| + return USB_TRANSFER_CONTROL;
|
| + }
|
| +}
|
| +
|
| +UsbUsageType UsbEndpointDescriptorImpl::GetUsageType() const {
|
| + switch (descriptor_->bmAttributes & LIBUSB_ISO_USAGE_TYPE_MASK) {
|
| + case LIBUSB_ISO_USAGE_TYPE_DATA:
|
| + return USB_USAGE_DATA;
|
| + case LIBUSB_ISO_USAGE_TYPE_FEEDBACK:
|
| + return USB_USAGE_FEEDBACK;
|
| + case LIBUSB_ISO_USAGE_TYPE_IMPLICIT:
|
| + return USB_USAGE_EXPLICIT_FEEDBACK;
|
| + default:
|
| + NOTREACHED();
|
| + return USB_USAGE_DATA;
|
| + }
|
| +}
|
| +
|
| +int UsbEndpointDescriptorImpl::GetPollingInterval() const {
|
| + return descriptor_->bInterval;
|
| +}
|
| +
|
| +UsbInterfaceAltSettingDescriptorImpl::UsbInterfaceAltSettingDescriptorImpl(
|
| + scoped_refptr<const UsbConfigDescriptor> config,
|
| + PlatformUsbInterfaceDescriptor descriptor)
|
| + : config_(config), descriptor_(descriptor) {
|
| +}
|
| +
|
| +UsbInterfaceAltSettingDescriptorImpl::~UsbInterfaceAltSettingDescriptorImpl() {
|
| +}
|
| +
|
| +size_t UsbInterfaceAltSettingDescriptorImpl::GetNumEndpoints() const {
|
| + return descriptor_->bNumEndpoints;
|
| +}
|
| +
|
| +scoped_refptr<const UsbEndpointDescriptor>
|
| +UsbInterfaceAltSettingDescriptorImpl::GetEndpoint(size_t index) const {
|
| + return new UsbEndpointDescriptorImpl(config_, &descriptor_->endpoint[index]);
|
| +}
|
| +
|
| +int UsbInterfaceAltSettingDescriptorImpl::GetInterfaceNumber() const {
|
| + return descriptor_->bInterfaceNumber;
|
| +}
|
| +
|
| +int UsbInterfaceAltSettingDescriptorImpl::GetAlternateSetting() const {
|
| + return descriptor_->bAlternateSetting;
|
| +}
|
| +
|
| +int UsbInterfaceAltSettingDescriptorImpl::GetInterfaceClass() const {
|
| + return descriptor_->bInterfaceClass;
|
| +}
|
| +
|
| +int UsbInterfaceAltSettingDescriptorImpl::GetInterfaceSubclass() const {
|
| + return descriptor_->bInterfaceSubClass;
|
| +}
|
| +
|
| +int UsbInterfaceAltSettingDescriptorImpl::GetInterfaceProtocol() const {
|
| + return descriptor_->bInterfaceProtocol;
|
| +}
|
| +
|
| +UsbInterfaceDescriptorImpl::UsbInterfaceDescriptorImpl(
|
| + scoped_refptr<const UsbConfigDescriptor> config,
|
| + PlatformUsbInterface usbInterface)
|
| + : config_(config), interface_(usbInterface) {
|
| +}
|
| +
|
| +UsbInterfaceDescriptorImpl::~UsbInterfaceDescriptorImpl() {
|
| +}
|
| +
|
| +size_t UsbInterfaceDescriptorImpl::GetNumAltSettings() const {
|
| + return interface_->num_altsetting;
|
| +}
|
| +
|
| +scoped_refptr<const UsbInterfaceAltSettingDescriptor>
|
| +UsbInterfaceDescriptorImpl::GetAltSetting(size_t index) const {
|
| + return new UsbInterfaceAltSettingDescriptorImpl(
|
| + config_, &interface_->altsetting[index]);
|
| +}
|
| +
|
| +UsbConfigDescriptorImpl::UsbConfigDescriptorImpl(
|
| + PlatformUsbConfigDescriptor config)
|
| + : config_(config) {
|
| + DCHECK(config);
|
| +}
|
| +
|
| +UsbConfigDescriptorImpl::~UsbConfigDescriptorImpl() {
|
| + libusb_free_config_descriptor(config_);
|
| +}
|
| +
|
| +size_t UsbConfigDescriptorImpl::GetNumInterfaces() const {
|
| + return config_->bNumInterfaces;
|
| +}
|
| +
|
| +scoped_refptr<const UsbInterfaceDescriptor>
|
| +UsbConfigDescriptorImpl::GetInterface(size_t index) const {
|
| + return new UsbInterfaceDescriptorImpl(this, &config_->interface[index]);
|
| +}
|
| +
|
| +} // namespace device
|
|
|