| // Copyright (c) 2013 The Chromium OS 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 MIST_USB_INTERFACE_DESCRIPTOR_H_ |
| #define MIST_USB_INTERFACE_DESCRIPTOR_H_ |
| |
| #include <stdint.h> |
| |
| #include <ostream> // NOLINT(readability/streams) |
| #include <string> |
| |
| #include <base/macros.h> |
| #include <base/memory/weak_ptr.h> |
| |
| #include "mist/usb_constants.h" |
| |
| struct libusb_interface_descriptor; |
| |
| namespace mist { |
| |
| class UsbDevice; |
| class UsbEndpointDescriptor; |
| |
| // A USB interface descriptor, which wraps a libusb_interface_descriptor C |
| // struct from libusb 1.0 into a C++ object. |
| class UsbInterfaceDescriptor { |
| public: |
| // Constructs a UsbInterfaceDescriptor object by taking a weak pointer to a |
| // UsbDevice object as |device| and a raw pointer to a |
| // libusb_interface_descriptor struct as |interface_descriptor|. |device| is |
| // used for getting USB string descriptors related to this object. The |
| // ownership of |interface_descriptor| is not transferred, and thus it should |
| // outlive this object. |
| UsbInterfaceDescriptor( |
| const base::WeakPtr<UsbDevice>& device, |
| const libusb_interface_descriptor* interface_descriptor); |
| |
| ~UsbInterfaceDescriptor(); |
| |
| // Getters for retrieving fields of the libusb_interface_descriptor struct. |
| uint8_t GetLength() const; |
| uint8_t GetDescriptorType() const; |
| uint8_t GetInterfaceNumber() const; |
| uint8_t GetAlternateSetting() const; |
| uint8_t GetNumEndpoints() const; |
| uint8_t GetInterfaceClass() const; |
| uint8_t GetInterfaceSubclass() const; |
| uint8_t GetInterfaceProtocol() const; |
| std::string GetInterfaceDescription() const; |
| |
| // Returns a pointer to a UsbEndpointDescriptor object for the endpoint |
| // descriptor indexed at |index|, or a NULL pointer if |index| is invalid. |
| // The returned should be deleted by the caller after use and should not be |
| // held beyond the lifetime of this object. |
| UsbEndpointDescriptor* GetEndpointDescriptor(uint8_t index) const; |
| |
| // Returns a pointer to a UsbEndpointDescriptor object for the first endpoint |
| // descriptor with its transfer type equal to |transfer_type| and its |
| // direction equal to |direction|, or a NULL pointer if not matching endpoint |
| // descriptor is found. The returned object should be deleted by the caller |
| // after use and should not be held beyond the lifetime of this object. |
| UsbEndpointDescriptor* GetEndpointDescriptorByTransferTypeAndDirection( |
| UsbTransferType transfer_type, UsbDirection direction) const; |
| |
| // Returns a string describing the properties of this object for logging |
| // purpose. |
| std::string ToString() const; |
| |
| private: |
| base::WeakPtr<UsbDevice> device_; |
| const libusb_interface_descriptor* const interface_descriptor_; |
| |
| DISALLOW_COPY_AND_ASSIGN(UsbInterfaceDescriptor); |
| }; |
| |
| } // namespace mist |
| |
| // Output stream operator provided to facilitate logging. |
| std::ostream& operator<<( |
| std::ostream& stream, |
| const mist::UsbInterfaceDescriptor& interface_descriptor); |
| |
| #endif // MIST_USB_INTERFACE_DESCRIPTOR_H_ |