blob: 55d3c01e253156d12581fca184a18a94d35f1e1b [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ARC_ADBD_DBC_H_
#define ARC_ADBD_DBC_H_
#include <memory>
#include <base/files/file_path_watcher.h>
#include <brillo/daemons/daemon.h>
#include "arc/adbd/adbd.h"
#include "arc/adbd/udev_monitor.h"
namespace adbd {
// The path to ttyDBC interface.
// See:
// https://www.kernel.org/doc/html/v5.4/driver-api/usb/usb3-debug-port.html.
constexpr char kDbcAdbPath[] = "/dev/dbc/ttyDBC0";
// Dbc daemon provides monitoring of dbc devices and handles the
// connection to ArcVM for ADB.
class Dbc : public brillo::Daemon {
public:
explicit Dbc(uint32_t cid);
~Dbc() = default;
protected:
int OnInit() override;
private:
// ArcVM CID required to create vsock.
const uint32_t cid_;
// Udev monitor for usb hotplug events.
std::unique_ptr<UdevMonitor> udev_monitor_;
// File watcher for dbc device node.
std::unique_ptr<base::FilePathWatcher> file_watcher_;
// Start ArcVM ADB bridge for dbc.
void StartArcVmAdbBridgeDbc();
// Callback on dbc device node changes.
void OnDbcDevChange(const base::FilePath& path, bool error);
};
} // namespace adbd
#endif // ARC_ADBD_DBC_H_