blob: 320a32d3496b9dc5f574cc16ad9e75296afa66f1 [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;
using fuchsia.component.runner;
using fuchsia.data;
using fuchsia.io;
using fuchsia.url;
const uint8 MAX_CAPABILITY_COUNT = 64;
/// Capabilities for a driver.
resource table DriverCapabilities {
/// Name of the node that provided |offers|.
1: string:MAX_NODE_NAME_LENGTH node_name;
/// Offers provided to a driver. These are names of FIDL protocols that can
/// be accessed through |exposed_dir|.
2: vector<fuchsia.component.name>:MAX_OFFER_COUNT offers;
/// Exposed directory through which |offers| can be accessed.
3: fuchsia.io.Directory exposed_dir;
};
/// Arguments for starting a driver.
resource table DriverStartArgs {
/// Node that the driver is bound to.
1: Node node;
/// Symbols provided to the driver, for |node|. These come from the driver
/// that added |node|, and are filtered to the symbols requested in the bind
/// program.
2: vector<NodeSymbol>:MAX_SYMBOL_COUNT symbols;
/// URL of the package containing the driver. This is purely informational,
/// used only to provide data for inspect.
3: fuchsia.url.Url url;
/// 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.
4: fuchsia.data.Dictionary program;
/// Incoming namespace provided to the driver.
5: vector<fuchsia.component.runner.ComponentNamespaceEntry>:fuchsia.component.runner.MAX_NAMESPACE_COUNT ns;
/// Outgoing directory served by the driver.
6: request<fuchsia.io.Directory> outgoing_dir;
/// Capabilities provided to the driver, for |node|.
7: vector<DriverCapabilities>:MAX_CAPABILITY_COUNT capabilities;
};
/// Protocol through which a driver's lifecycle can be managed.
///
/// Closing the protocol's channel is used to signal:
/// 1. To the driver runner that the driver has stopped.
/// 2. To the driver host that the driver 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);
};