| // 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. |
| |
| #include "mist/usb_device_descriptor.h" |
| |
| #include <libusb.h> |
| |
| #include <base/logging.h> |
| #include <base/strings/stringprintf.h> |
| |
| #include "mist/usb_device.h" |
| |
| using base::StringPrintf; |
| using std::ostream; |
| using std::string; |
| |
| namespace mist { |
| |
| UsbDeviceDescriptor::UsbDeviceDescriptor( |
| const base::WeakPtr<UsbDevice>& device, |
| const libusb_device_descriptor* device_descriptor) |
| : device_(device), |
| device_descriptor_(device_descriptor) { |
| CHECK(device_descriptor_); |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetLength() const { |
| return device_descriptor_->bLength; |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetDescriptorType() const { |
| return device_descriptor_->bDescriptorType; |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetDeviceClass() const { |
| return device_descriptor_->bDeviceClass; |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetDeviceSubclass() const { |
| return device_descriptor_->bDeviceSubClass; |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetDeviceProtocol() const { |
| return device_descriptor_->bDeviceProtocol; |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetMaxPacketSize0() const { |
| return device_descriptor_->bMaxPacketSize0; |
| } |
| |
| uint16_t UsbDeviceDescriptor::GetVendorId() const { |
| return device_descriptor_->idVendor; |
| } |
| |
| uint16_t UsbDeviceDescriptor::GetProductId() const { |
| return device_descriptor_->idProduct; |
| } |
| |
| string UsbDeviceDescriptor::GetManufacturer() const { |
| return device_ ? |
| device_->GetStringDescriptorAscii(device_descriptor_->iManufacturer) : |
| string(); |
| } |
| |
| string UsbDeviceDescriptor::GetProduct() const { |
| return device_ ? |
| device_->GetStringDescriptorAscii(device_descriptor_->iProduct) : |
| string(); |
| } |
| |
| string UsbDeviceDescriptor::GetSerialNumber() const { |
| return device_ ? |
| device_->GetStringDescriptorAscii(device_descriptor_->iSerialNumber) : |
| string(); |
| } |
| |
| uint8_t UsbDeviceDescriptor::GetNumConfigurations() const { |
| return device_descriptor_->bNumConfigurations; |
| } |
| |
| string UsbDeviceDescriptor::ToString() const { |
| return StringPrintf("Device (Length=%u, " |
| "DescriptorType=%u, " |
| "DeviceClass=%u, " |
| "DeviceSubclass=%u, " |
| "DeviceProtocol=%u, " |
| "MaxPacketSize0=%u, " |
| "VendorId=0x%04x, " |
| "ProductId=0x%04x, " |
| "Manufacturer='%s', " |
| "Product='%s', " |
| "SerialNumber='%s', " |
| "NumConfigurations=%d)", |
| GetLength(), |
| GetDescriptorType(), |
| GetDeviceClass(), |
| GetDeviceSubclass(), |
| GetDeviceProtocol(), |
| GetMaxPacketSize0(), |
| GetVendorId(), |
| GetProductId(), |
| GetManufacturer().c_str(), |
| GetProduct().c_str(), |
| GetSerialNumber().c_str(), |
| GetNumConfigurations()); |
| } |
| |
| } // namespace mist |
| |
| ostream& operator<<(ostream& stream, |
| const mist::UsbDeviceDescriptor& device_descriptor) { |
| stream << device_descriptor.ToString(); |
| return stream; |
| } |