blob: 4ff7bd593407bf6a96d5ed309b423bdc233a7105 [file] [log] [blame]
// 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_