Skip to main content
An EscDriver reads per-motor telemetry from electronic speed controllers and surfaces it as a stream of EscTelemetry samples. DShot-telemetry, KISS, and BLHeli32 protocols all share this interface. ESC drivers are read-only by design. Setpoint commands flow through the FC over MAVLink, not through the agent.

The interface

Writing the agent half in Rust? The trait equivalent is ados_sdk::drivers::EscDriver (re-exported from the drivers module of the ados-sdk crate). It carries the same five methods (discover, open, close, capabilities, telemetry_iterator) over an async-trait, with EscCandidate, EscCapabilities, and EscTelemetry as the matching types. The Python EscSession base class becomes a Session associated type the host treats as an opaque token. Set runtime: rust in the manifest and the host treats the driver the same way it treats the Python one.

Capabilities

Telemetry samples

current_a is 0.0 when the protocol does not carry it. For a bank with no thermistor, report temp_c=0.0 and set has_temperature=False in EscCapabilities so the GCS hides the column.

Manifest permissions

See also