/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <memory> #include <string> #include <thread> #include "common/libs/fs/shared_fd.h" namespace vadb { namespace usbip { // VHCIInstrument class configures VHCI-HCD on local kernel. class VHCIInstrument { public: VHCIInstrument(int port, const std::string& name); virtual ~VHCIInstrument(); // Init opens vhci-hcd driver and allocates port to which remote USB device // will be attached. // Returns false, if vhci-hcd driver could not be opened, or if no free port // was found. bool Init(); // TriggerAttach tells underlying thread to make attempt to re-attach USB // device. void TriggerAttach(); // TriggerDetach tells underlying thread to disconnect remote USB device. void TriggerDetach(); private: // Attach makes an attempt to configure VHCI to enable virtual USB device. // Returns true, if configuration attempt was successful. bool Attach(); // Detach disconnects virtual USB device. // Returns true, if attempt was successful. bool Detach(); // AttachThread is a background thread that responds to configuration // requests. void AttachThread(); bool VerifyPortIsFree() const; private: std::string name_; std::thread attach_thread_; std::string syspath_; cvd::SharedFD control_write_end_; cvd::SharedFD control_read_end_; cvd::SharedFD vhci_socket_; int port_{}; VHCIInstrument(const VHCIInstrument& other) = delete; VHCIInstrument& operator=(const VHCIInstrument& other) = delete; }; } // namespace usbip } // namespace vadb