// 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. #ifndef COMPONENTS_USB_SERVICE_USB_INTERFACE_IMPL_H_ #define COMPONENTS_USB_SERVICE_USB_INTERFACE_IMPL_H_ #include "base/memory/ref_counted.h" #include "components/usb_service/usb_interface.h" #include "components/usb_service/usb_service_export.h" struct libusb_config_descriptor; struct libusb_endpoint_descriptor; struct libusb_interface; struct libusb_interface_descriptor; namespace usb_service { typedef libusb_config_descriptor* PlatformUsbConfigDescriptor; typedef const libusb_endpoint_descriptor* PlatformUsbEndpointDescriptor; typedef const libusb_interface* PlatformUsbInterface; typedef const libusb_interface_descriptor* PlatformUsbInterfaceDescriptor; class UsbConfigDescriptorImpl; class UsbInterfaceAltSettingDescriptor; class UsbEndpointDescriptorImpl : public UsbEndpointDescriptor { public: virtual int GetAddress() const OVERRIDE; virtual UsbEndpointDirection GetDirection() const OVERRIDE; virtual int GetMaximumPacketSize() const OVERRIDE; virtual UsbSynchronizationType GetSynchronizationType() const OVERRIDE; virtual UsbTransferType GetTransferType() const OVERRIDE; virtual UsbUsageType GetUsageType() const OVERRIDE; virtual int GetPollingInterval() const OVERRIDE; private: friend class base::RefCounted; friend class UsbInterfaceAltSettingDescriptorImpl; UsbEndpointDescriptorImpl(scoped_refptr config, PlatformUsbEndpointDescriptor descriptor); virtual ~UsbEndpointDescriptorImpl(); scoped_refptr config_; PlatformUsbEndpointDescriptor descriptor_; DISALLOW_COPY_AND_ASSIGN(UsbEndpointDescriptorImpl); }; class UsbInterfaceAltSettingDescriptorImpl : public UsbInterfaceAltSettingDescriptor { public: virtual size_t GetNumEndpoints() const OVERRIDE; virtual scoped_refptr GetEndpoint( size_t index) const OVERRIDE; virtual int GetInterfaceNumber() const OVERRIDE; virtual int GetAlternateSetting() const OVERRIDE; virtual int GetInterfaceClass() const OVERRIDE; virtual int GetInterfaceSubclass() const OVERRIDE; virtual int GetInterfaceProtocol() const OVERRIDE; private: friend class UsbInterfaceDescriptorImpl; UsbInterfaceAltSettingDescriptorImpl( scoped_refptr config, PlatformUsbInterfaceDescriptor descriptor); virtual ~UsbInterfaceAltSettingDescriptorImpl(); scoped_refptr config_; PlatformUsbInterfaceDescriptor descriptor_; DISALLOW_COPY_AND_ASSIGN(UsbInterfaceAltSettingDescriptorImpl); }; class UsbInterfaceDescriptorImpl : public UsbInterfaceDescriptor { public: virtual size_t GetNumAltSettings() const OVERRIDE; virtual scoped_refptr GetAltSetting( size_t index) const OVERRIDE; private: friend class base::RefCounted; friend class UsbConfigDescriptorImpl; UsbInterfaceDescriptorImpl(scoped_refptr config, PlatformUsbInterface usbInterface); virtual ~UsbInterfaceDescriptorImpl(); scoped_refptr config_; PlatformUsbInterface interface_; DISALLOW_COPY_AND_ASSIGN(UsbInterfaceDescriptorImpl); }; class UsbConfigDescriptorImpl : public UsbConfigDescriptor { public: virtual size_t GetNumInterfaces() const OVERRIDE; virtual scoped_refptr GetInterface( size_t index) const OVERRIDE; private: friend class base::RefCounted; friend class UsbDeviceImpl; explicit UsbConfigDescriptorImpl(PlatformUsbConfigDescriptor config); virtual ~UsbConfigDescriptorImpl(); PlatformUsbConfigDescriptor config_; DISALLOW_COPY_AND_ASSIGN(UsbConfigDescriptorImpl); }; } // namespace usb_service; #endif // COMPONENTS_USB_SERVICE_USB_INTERFACE_IMPL_H_