blob: 7228c3f5eae1d9ee5b35bff1e1f6b0f9c7bdf79f [file] [log] [blame]
// Copyright 2020 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.
library fuchsia.driver.framework;
using fuchsia.component.runner;
using fuchsia.data;
using fuchsia.io;
/// Arguments for starting a driver.
resource table DriverStartArgs {
/// The node that the driver is being bound to.
1: Node node;
/// The symbols provided to the driver, for |node|. These come from the
/// driver that added the node, and are filtered to the symbols requested
/// in the bind program.
2: vector<DriverSymbol>:MAX_SYMBOL_COUNT symbols;
/// Information about the driver to start. Currently, we support the
/// following entries:
/// 1. "binary": a string containing the package-relative path to the
/// driver binary.
/// 2. "colocate" (optional): a string containing "true" or "false"
/// specifying whether the driver should be colocated in the same
/// driver host as the driver that added |node|. If not specified, the
/// driver will be launched in a new driver host.
3: fuchsia.data.Dictionary program;
/// The incoming namespace provided to the driver.
4: vector<fuchsia.component.runner.ComponentNamespaceEntry>:fuchsia.component.runner.MAX_NAMESPACE_COUNT ns;
/// The outgoing directory served by the driver.
5: request<fuchsia.io.Directory> outgoing_dir;
};
/// Protocol through which a driver's lifecycle can be managed.
///
/// Closing the protocol's channel is used to signal:
/// 1. To the driver manager that the driver has stopped.
/// 2. To the driver that it should stop.
protocol Driver {
};
/// Protocol through which a driver host can be managed.
[Discoverable]
protocol DriverHost {
/// Start a driver within a driver host.
Start(DriverStartArgs start_args, request<Driver> driver);
};