blob: 07ec265b77a17486c5c457180e659e87a3678869 [file] [edit]
// Copyright 2026 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.debug;
using zx;
const MAX_COMMAND_NAME_LENGTH uint32 = 256;
const MAX_ARG_LENGTH uint32 = 1024;
const MAX_ARG_COUNT uint32 = 128;
const MAX_DESCRIPTION_LENGTH uint32 = 1024;
const MAX_COMMAND_COUNT uint32 = 64;
/// Metadata for a supported command in the Debug protocol.
type CommandInfo = table {
/// The name of the command.
1: name string:MAX_COMMAND_NAME_LENGTH;
/// A human-readable description of what the command does and its usage.
2: description string:MAX_DESCRIPTION_LENGTH;
};
/// Protocol for executing interactive driver debug commands.
@discoverable
open protocol Debug {
/// Executes a command with the provided argument vector.
///
/// The argument vector `args` is passed to the driver's command handler
/// as-is, without in-flight modification. The argument vector follows
/// standard command-line conventions (analogous to argv), where the first
/// argument (`args[0]`) is typically the command or subcommand name,
/// followed by any flags or positional arguments.
///
/// Standard output and standard error from command execution are streamed
/// to the provided `stdout` and `stderr` sockets. The driver or command
/// handler writes to these sockets and closes them upon or before
/// returning the response.
///
/// Returns the command's process exit code (`exit_code`), where 0
/// typically denotes success.
///
/// ## Error
///
/// Returns a `zx.Status` error if the execution request itself fails:
///
/// * `ZX_ERR_INVALID_ARGS`: `args` is empty.
/// * `ZX_ERR_NOT_FOUND`: The requested command in `args[0]` is unknown.
flexible Execute(resource struct {
/// The argument vector passed to the driver's command handler as-is,
/// without in-flight modification. Follows standard command-line
/// conventions (analogous to argv), where the first argument
/// (`args[0]`) is typically the command or subcommand name, followed
/// by any flags or positional arguments.
args vector<string:MAX_ARG_LENGTH>:MAX_ARG_COUNT;
/// Socket to which standard output from command execution is streamed.
/// The driver or command handler writes to this socket and closes it
/// upon or before returning the response.
stdout zx.Handle:SOCKET;
/// Socket to which standard error from command execution is streamed.
/// The driver or command handler writes to this socket and closes it
/// upon or before returning the response.
stderr zx.Handle:SOCKET;
}) -> (struct {
/// The command's exit code, where 0 typically denotes success.
exit_code int32;
}) error zx.Status;
/// Lists all supported commands and their descriptions.
flexible ListCommands() -> (struct {
commands vector<CommandInfo>:MAX_COMMAND_COUNT;
}) error zx.Status;
};