blob: bd7fbda50c2296c6455d2395fceda61ec1cc5045 [file] [log] [blame]
Ben Chanf4930e52013-05-28 13:24:54 -07001// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "mist/usb_interface.h"
6
7#include <libusb.h>
8
9#include <base/logging.h>
Ben Chandcc0c7a2014-02-05 18:03:39 -080010#include <base/strings/stringprintf.h>
Ben Chanf4930e52013-05-28 13:24:54 -070011
12#include "mist/usb_device.h"
13#include "mist/usb_interface_descriptor.h"
14
15using base::StringPrintf;
16
17namespace mist {
18
19UsbInterface::UsbInterface(const base::WeakPtr<UsbDevice>& device,
20 const libusb_interface* interface)
21 : device_(device),
22 interface_(interface) {
23 CHECK(interface_);
24}
25
Ben Chanf4930e52013-05-28 13:24:54 -070026int UsbInterface::GetNumAlternateSettings() const {
27 return interface_->num_altsetting;
28}
29
Ben Chand31d6c12013-08-07 21:28:33 -070030UsbInterfaceDescriptor* UsbInterface::GetAlternateSetting(
Ben Chanf4930e52013-05-28 13:24:54 -070031 int index) const {
32 if (index < 0 || index >= GetNumAlternateSettings()) {
33 LOG(ERROR) << StringPrintf("Invalid alternate setting index %d. "
34 "Must be non-negative and less than %d.",
35 index, GetNumAlternateSettings());
Ben Chan61ac5ba2014-08-29 18:06:43 -070036 return nullptr;
Ben Chanf4930e52013-05-28 13:24:54 -070037 }
38
Ben Chand31d6c12013-08-07 21:28:33 -070039 return new UsbInterfaceDescriptor(device_, &interface_->altsetting[index]);
Ben Chanf4930e52013-05-28 13:24:54 -070040}
41
42} // namespace mist