Target Collection

The daemon maintains discovered and connected targets that are accessible by the TargetCollection fidl protocol defined in src/developer/ffx/fidl/target.fidl.

Daemon Events

When a new target is discovered DaemonEvent::NewTarget is published to all daemon event listeners. This is currently used by the repository server to synchronize repos with a newly connected target once it establishes an RCS connection.

When a target is updated, DaemonEvent::UpdatedTarget is published. This is currently unused.

Target Events

Each target has an event queue.

TargetEvent::RcsActivated is published when an RCS connection is established.

TargetEvent::Rediscovered is published when a target is updated. The name is a misnomer: while it fires when the target is discovered, it also fires when any target property is changed.

TargetEvent::SshHostPipeErr is published when the Overnet Host Pipe (for RCS) hits an error.

TargetEvent::ConnectionStateChanged is published when the connection state of a target is changed, and contains both the previous and current connection state.

Discovery

Discovery is handled outside of Target Collection, but is the primary way targets are added to it. The current discovery mediums are: mDNS, USB, and the emulator file watcher.

mDNS discovery is both passive and active: It collects and parses mDNS packets but it also broadcasts mDNS requests.

USB discovery is passive: Periodically it reenumerates USB devices and parses the operating system's cached USB descriptor.

Emulator discovery is passive: It watches for changes to a directory ffx emu manages.

Manual Targets

Manual targets are pinned within the target collection and survive across daemon restarts. Consider it an alternative form of discovery that is sourced from the config.

Manual targets are configured via ffx target add or ffx config. This is currently done by address only.

Ephemeral Manual Targets

Ephemeral Manual targets are manual targets that are allowed to expire after a period of time. Expiry happens once the target disconnects.

Currently unused.