blob: 11f9b1c2c3c756fbe67769586bc5730693a421d8 [file] [log] [blame]
// Copyright 2021 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.development;
using fuchsia.driver.framework;
using fuchsia.url;
using zx;
const BINDING_RESULT_MAX uint8 = 10;
const HASH_LENGTH uint8 = 64;
/// Interface for the driver development manager.
/// This interface should only be used for development and disabled in release builds.
@discoverable
open protocol Manager {
/// Returns a list of all drivers that are known to the system.
/// If a |driver_filter| is provided, the returned list will be filtered to
/// only include drivers specified in the filter.
///
/// |iterator| is closed with following epitaphs on error:
/// ZX_ERR_NOT_FOUND indicates that there is no driver matching the given path for at least
/// one driver in |driver_filter|.
/// ZX_ERR_BUFFER_TOO_SMALL indicates that the driver's bind program is longer than the
/// maximum number of instructions (BIND_PROGRAM_INSTRUCTIONS_MAX).
flexible GetDriverInfo(resource struct {
driver_filter vector<string:MAX>:MAX;
iterator server_end:DriverInfoIterator;
});
/// Returns a list of all composite node specs that are known to the system.
/// If a |name_filter| is provided, the returned list will only include 1 spec,
/// the one with that exact name.
///
/// |iterator| is closed with following epitaphs on error:
/// ZX_ERR_NOT_FOUND indicates that there are no specs or if a |name_filter| is provided,
/// that there are no specs with that name.
flexible GetCompositeNodeSpecs(resource struct {
name_filter string:<MAX, optional>;
iterator server_end:CompositeNodeSpecIterator;
});
/// Returns the list of nodes that are running on the system.
///
/// If a |node_filter| is provided, the returned list will be filtered to
/// only include nodes specified in the filter. If |exact_match| is true,
/// then the filter must exactly match a node's topological path;
/// otherwise, it performs a substring match. The list will be empty if no
/// nodes match the filter.
///
/// |iterator| is closed with following epitaphs on error:
/// ZX_ERR_BAD_PATH indicates that the given path is not valid.
/// ZX_ERR_BUFFER_TOO_SMALL indicates either that the given path is too long,
/// or that the node has more than the maximum number of properties (PROPERTIES_MAX).
flexible GetNodeInfo(resource struct {
node_filter vector<string:MAX>:MAX;
iterator server_end:NodeInfoIterator;
exact_match bool;
});
/// Returns the list of composites in the system. This includes composites
/// that are not yet assembled and added into the node topology.
flexible GetCompositeInfo(resource struct {
iterator server_end:CompositeInfoIterator;
});
/// Restarts all driver hosts containing the driver specified by the `driver_url`,
/// and returns the number of driver hosts that were restarted.
/// The |rematch_flags| will be used to decide for which restarting nodes the existing driver
/// should be bound vs. for which ones the matching process should be performed again.
flexible RestartDriverHosts(struct {
driver_url fuchsia.url.Url;
rematch_flags RestartRematchFlags;
}) -> (struct {
count uint32;
}) error zx.Status;
/// Disables the driver with the given driver component url.
/// Disabled drivers will not be considered for matching to nodes.
/// If a |package_hash| is provided, only that specific version of the driver
/// package will be disabled. Otherwise this applies to all existing versions
/// of a driver with the given url.
/// Returns an error ZX_ERR_NOT_FOUND if no drivers were affected.
flexible DisableDriver(struct {
driver_url fuchsia.url.Url;
package_hash string:<HASH_LENGTH, optional>;
}) -> () error zx.Status;
/// Enables the driver with the given driver component url.
/// This is only meant to revert a |DisableDriver| action.
/// Returns an error ZX_ERR_NOT_FOUND if no drivers were affected.
flexible EnableDriver(struct {
driver_url fuchsia.url.Url;
package_hash string:<HASH_LENGTH, optional>;
}) -> () error zx.Status;
/// Attempts to bind all unbound nodes in the topology.
/// Returns new successful binds.
flexible BindAllUnboundNodes() -> (struct {
/// List of new bindings that happened as a result of this.
binding_result vector<NodeBindingInfo>:BINDING_RESULT_MAX;
}) error zx.Status;
/// Adds test node under the root node.
flexible AddTestNode(struct {
args TestNodeAddArgs;
}) -> () error fuchsia.driver.framework.NodeError;
/// Removes the test node. The node is removed asynchronously and is
/// not guaranteed to be removed by the time this returns.
flexible RemoveTestNode(struct {
name string:NODE_MONIKER_MAX;
}) -> () error zx.Status;
};