blob: 8ef2a72f0043717c9c88a7e0879ce706c6e01e5f [file] [log] [blame]
// Copyright 2018 The Chromium 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 "device/usb/public/cpp/fake_usb_device_info.h"
#include <utility>
#include "base/guid.h"
#include "base/strings/utf_string_conversions.h"
#include "device/usb/public/cpp/usb_utils.h"
namespace device {
void FakeUsbDeviceInfo::Observer::OnDeviceRemoved(
scoped_refptr<FakeUsbDeviceInfo> device) {}
FakeUsbDeviceInfo::FakeUsbDeviceInfo(uint16_t usb_version,
uint8_t device_class,
uint8_t device_subclass,
uint8_t device_protocol,
uint16_t device_version,
uint16_t vendor_id,
uint16_t product_id,
const std::string& manufacturer_string,
const std::string& product_string,
const std::string& serial_number) {
device_info_.guid = base::GenerateGUID();
device_info_.usb_version_major = usb_version >> 8;
device_info_.usb_version_minor = usb_version >> 4 & 0xf;
device_info_.usb_version_subminor = usb_version & 0xf;
device_info_.class_code = device_class;
device_info_.subclass_code = device_subclass;
device_info_.protocol_code = device_protocol;
device_info_.device_version_major = device_version >> 8;
device_info_.device_version_minor = device_version >> 4 & 0xf;
device_info_.device_version_subminor = device_version & 0xf;
device_info_.vendor_id = vendor_id;
device_info_.product_id = product_id;
device_info_.manufacturer_name = base::UTF8ToUTF16(manufacturer_string);
device_info_.product_name = base::UTF8ToUTF16(product_string);
device_info_.serial_number = base::UTF8ToUTF16(serial_number);
}
FakeUsbDeviceInfo::FakeUsbDeviceInfo(uint16_t vendor_id,
uint16_t product_id,
const std::string& manufacturer_string,
const std::string& product_string,
const std::string& serial_number)
: FakeUsbDeviceInfo(0x0200, // usb_version
0xff, // device_class
0xff, // device_subclass
0xff, // device_protocol
0x0100, // device_version
vendor_id,
product_id,
manufacturer_string,
product_string,
serial_number) {}
FakeUsbDeviceInfo::FakeUsbDeviceInfo(
uint16_t vendor_id,
uint16_t product_id,
const std::string& manufacturer_string,
const std::string& product_string,
const std::string& serial_number,
std::vector<mojom::UsbConfigurationInfoPtr> configurations)
: FakeUsbDeviceInfo(vendor_id,
product_id,
manufacturer_string,
product_string,
serial_number) {
device_info_.configurations = std::move(configurations);
}
FakeUsbDeviceInfo::FakeUsbDeviceInfo(uint16_t vendor_id,
uint16_t product_id,
const std::string& manufacturer_string,
const std::string& product_string,
const std::string& serial_number,
const GURL& webusb_landing_page)
: FakeUsbDeviceInfo(vendor_id,
product_id,
manufacturer_string,
product_string,
serial_number) {
device_info_.webusb_landing_page = webusb_landing_page;
}
FakeUsbDeviceInfo::FakeUsbDeviceInfo(uint16_t vendor_id, uint16_t product_id)
: FakeUsbDeviceInfo(vendor_id, product_id, "", "", "") {}
FakeUsbDeviceInfo::FakeUsbDeviceInfo(
uint16_t vendor_id,
uint16_t product_id,
uint8_t device_class,
std::vector<mojom::UsbConfigurationInfoPtr> configurations)
: FakeUsbDeviceInfo(vendor_id, product_id) {
device_info_.class_code = device_class;
device_info_.configurations = std::move(configurations);
}
FakeUsbDeviceInfo::~FakeUsbDeviceInfo() = default;
bool FakeUsbDeviceInfo::SetActiveConfig(uint8_t value) {
for (auto& config : device_info_.configurations) {
if (config->configuration_value == value) {
device_info_.active_configuration = value;
return true;
}
}
return false;
}
void FakeUsbDeviceInfo::AddConfig(mojom::UsbConfigurationInfoPtr config) {
device_info_.configurations.push_back(std::move(config));
}
void FakeUsbDeviceInfo::AddObserver(Observer* observer) {
observer_list_.AddObserver(observer);
}
void FakeUsbDeviceInfo::RemoveObserver(Observer* observer) {
observer_list_.RemoveObserver(observer);
}
void FakeUsbDeviceInfo::NotifyDeviceRemoved() {
for (auto& observer : observer_list_)
observer.OnDeviceRemoved(this);
}
} // namespace device