blob: 61096af870b0ecb994b5f82cff197283f4829397 [file] [view]
# ffx-uart-driver
This directory contains the `ffx-uart-driver` host tool. It acts as a background
daemon that handles communication between `ffx` client tools (like `ffx-uart`)
and Fuchsia devices connected via UART.
The driver runs as a background process, manages multiplexing, provides
reliability protocols (like acknowledgments and retransmissions), and exposes
metrics via a control UNIX socket.
## Directory Structure and Files
* **BUILD.gn**: Defines the GN build rules for compiling the
`ffx_uart_host_driver` library and the `ffx-uart-driver` binary.
* **src/main.rs**: The entry point for the `ffx-uart-driver`
executable. It initializes the build version info and runs the driver.
* **src/lib.rs**: Contains the CLI driver execution framework.
It handles argument parsing, background execution supervision, setting up log
sinks, managing log rotation, binding the main UNIX socket, writing connection
metadata, and invoking the core driver implementation.
* **impl/BUILD.gn**: Compiles the core driver logic into the
`uart_driver_impl` library.
* **impl/src/adapters.rs**: Implements `FDomainTransport`, providing packetized
message framing over asynchronous Tokio streams for the `fdomain-client` library.
* **impl/src/lib.rs**: The implementation core of the driver daemon. Handles
socket creation, orphaned process detection and cleanup, routing messages
between clients and the serial port, executing the ResendSP protocol framing
and reliability state machines, querying target identity over FDomain, and
serving metrics on a `.control` socket.