| // 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_DEVICE_DESCRIPTOR_H_ |
| #define MIST_USB_DEVICE_DESCRIPTOR_H_ |
| |
| #include <stdint.h> |
| |
| #include <ostream> // NOLINT(readability/streams) |
| #include <string> |
| |
| #include <base/macros.h> |
| #include <base/memory/weak_ptr.h> |
| |
| struct libusb_device_descriptor; |
| |
| namespace mist { |
| |
| class UsbDevice; |
| |
| // A USB device descriptor, which wraps a libusb_device_descriptor C struct from |
| // libusb 1.0 into a C++ object. |
| class UsbDeviceDescriptor { |
| public: |
| // Constructs a UsbDeviceDescriptor object by taking a weak pointer to a |
| // UsbDevice object as |device| and a raw pointer to a |
| // libusb_device_descriptor struct as |device_descriptor|. |device| is |
| // used for getting USB string descriptors related to this object. The |
| // ownership of |device_descriptor| is not transferred, and thus it should |
| // outlive this object. |
| UsbDeviceDescriptor(const base::WeakPtr<UsbDevice>& device, |
| const libusb_device_descriptor* device_descriptor); |
| |
| ~UsbDeviceDescriptor() = default; |
| |
| // Getters for retrieving fields of the libusb_device_descriptor struct. |
| uint8_t GetLength() const; |
| uint8_t GetDescriptorType() const; |
| uint8_t GetDeviceClass() const; |
| uint8_t GetDeviceSubclass() const; |
| uint8_t GetDeviceProtocol() const; |
| uint8_t GetMaxPacketSize0() const; |
| uint16_t GetVendorId() const; |
| uint16_t GetProductId() const; |
| std::string GetManufacturer() const; |
| std::string GetProduct() const; |
| std::string GetSerialNumber() const; |
| uint8_t GetNumConfigurations() const; |
| |
| // Returns a string describing the properties of this object for logging |
| // purpose. |
| std::string ToString() const; |
| |
| private: |
| base::WeakPtr<UsbDevice> device_; |
| const libusb_device_descriptor* const device_descriptor_; |
| |
| DISALLOW_COPY_AND_ASSIGN(UsbDeviceDescriptor); |
| }; |
| |
| } // namespace mist |
| |
| // Output stream operator provided to facilitate logging. |
| std::ostream& operator<<(std::ostream& stream, |
| const mist::UsbDeviceDescriptor& device_descriptor); |
| |
| #endif // MIST_USB_DEVICE_DESCRIPTOR_H_ |