| # 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. |