blob: 20258fc13c06b35dad98fe5522cdad2a94a8b0f1 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 SRC_LIB_ISOLATED_DEVMGR_USB_VIRTUAL_BUS_H_
#define SRC_LIB_ISOLATED_DEVMGR_USB_VIRTUAL_BUS_H_
#include <fuchsia/hardware/usb/peripheral/llcpp/fidl.h>
#include <fuchsia/hardware/usb/virtual/bus/llcpp/fidl.h>
#include <fuchsia/sys/cpp/fidl.h>
#include <lib/sys/cpp/component_context.h>
#include <zircon/types.h>
#include <optional>
#include <vector>
#include <fbl/unique_fd.h>
#include "usb-virtual-bus-helper.h"
namespace usb_virtual_bus {
using fuchsia_hardware_usb_peripheral::wire::DeviceDescriptor;
using fuchsia_hardware_usb_peripheral::wire::FunctionDescriptor;
using ConfigurationDescriptor =
::fidl::VectorView<fuchsia_hardware_usb_peripheral::wire::FunctionDescriptor>;
class USBVirtualBusBase {
public:
USBVirtualBusBase(std::string pkg_url, std::string svc_name);
void InitPeripheral();
void SetupPeripheralDevice(DeviceDescriptor&& device_desc,
std::vector<FunctionDescriptor> function_descs);
void ClearPeripheralDeviceFunctions();
int GetRootFd();
fbl::unique_fd& devfs_root() { return devfs_; };
fidl::WireSyncClient<fuchsia_hardware_usb_peripheral::Device>& peripheral() {
return peripheral_.value();
}
fidl::WireSyncClient<fuchsia_hardware_usb_virtual_bus::Bus>& virtual_bus() {
return virtual_bus_.value();
}
private:
fbl::unique_fd devfs_;
std::shared_ptr<sys::ServiceDirectory> services_;
fidl::InterfacePtr<fuchsia::sys::ComponentController> ctlr_;
std::optional<fidl::WireSyncClient<fuchsia_hardware_usb_peripheral::Device>> peripheral_;
std::optional<fidl::WireSyncClient<fuchsia_hardware_usb_virtual_bus::Bus>> virtual_bus_;
DISALLOW_COPY_ASSIGN_AND_MOVE(USBVirtualBusBase);
};
} // namespace usb_virtual_bus
#endif // SRC_LIB_ISOLATED_DEVMGR_USB_VIRTUAL_BUS_H_