blob: 13347db8cb55123e170cad636f74b4154064b6aa [file] [view] [edit]
# ffx uart
This directory contains the `ffx-uart` tool, which is an `ffx` subtool used to
manage and interact with UART (Universal Asynchronous Receiver-Transmitter)
connections on Fuchsia devices.
The tool communicates with physical and virtual Fuchsia target devices via
serial TTY lines or UNIX domain sockets, providing a CLI for managing background
`ffx-uart-driver` daemons and inspecting link health.
## Directory Structure and Files
* **uart/BUILD.gn**: Defines the GN build rules for the `ffx_tool_uart` library,
the `ffx-uart` tool binary, and host unit tests.
* **src/main.rs**: The executable entry point for the `ffx-uart` CLI tool. It
initializes the asynchronous runtime and executes `UartTool`.
* **src/lib.rs**: The main entry point for the tool's library code. It declares
submodules, exposes target resolution and metadata helpers, and dispatches CLI
subcommands (`connect`, `disconnect`, `list`, `probe`, `status`) to their
implementations in `src/subtools/`.
* **src/args.rs**: Defines the CLI argument parsing definitions using `argh`,
specifying subcommands and their command-line parameters.
* **src/subtools/mod.rs**: Declares the subtool implementation modules:
* **src/subtools/connect.rs**: Spawns the background driver daemon
(`ffx-uart-driver`), or re-establishes a connection using cached metadata
when `--reconnect` is passed.
* **src/subtools/disconnect.rs**: Terminates the background driver and cleans
up companion socket and metadata files.
* **src/subtools/list.rs**: Discovers and enumerates active UART connections
by scanning the metadata directory and verifying daemon liveness.
* **src/subtools/probe.rs**: Exercises the connection health of a UART target
via a host-side protocol negotiation handshake (or queries daemon status if
already connected).
* **src/subtools/status.rs**: Queries the running daemon's control socket and
metadata to report real-time communication metrics, stall detection, and
target channel errors.
* **src/driver.rs**: Implements lifecycle management utilities for the background
driver daemon, including locating the driver binary, polling for connection
readiness, validating daemon liveness, and terminating stale processes.
* **src/metadata.rs**: Manages serializing, writing, reading, and updating
connection state metadata (as JSON files). Associates 16-character hexadecimal
target identifiers with daemon PIDs, baud rates, protocols, target identity,
and runtime metrics.
* **src/stream.rs**: Manages connecting to supported transport layers (UNIX
domain sockets or raw TTY serial ports), configuring TTY parameters (exclusive
`flock`, custom baud rates, 8N1 raw mode via `termios`), and executing the
host-side handshake (`run_host_handshake`).
* **src/sys.rs**: Houses system-level utility functions, including peer PID
lookup on UNIX domain sockets and process liveness checks (filtering out
zombie processes).
* **src/tests.rs**: The integration and unit test suite for the tool, using
**test_data/mock_driver.py** to simulate driver daemon behavior and verify
connection lifecycles, error boundaries, and socket states.