hdmi-hal-async 0.2.0

Async hardware abstraction traits for the HDMI stack
Documentation

hdmi-hal-async

CI crates.io docs.rs License: MPL-2.0 Rust 1.85+ SLSA Level 2 trusted publishing only

Async hardware abstraction traits for the HDMI stack.

hdmi-hal-async is the async companion to hdmi-hal, following the same split as embedded-hal / embedded-hal-async. It mirrors each trait in hdmi-hal with async fn methods and otherwise identical signatures — ScdcTransport for raw SCDC register access and HdmiPhy for transmitter PHY control. Data types such as EqParams are defined in hdmi-hal and re-exported here rather than duplicated.

Sync consumers continue to use hdmi-hal directly. Async platform backends (Embassy drivers, async kernel drivers) implement the traits here. The two crates impose no executor dependency on each other or their consumers.

Usage

[dependencies]
hdmi-hal-async = "0.1"

Implement a trait against your async hardware backend:

use hdmi_hal_async::scdc::ScdcTransport;

struct MyAsyncI2cBackend { /* ... */ }

impl ScdcTransport for MyAsyncI2cBackend {
    type Error = MyError;

    async fn read(&self, reg: u8) -> Result<u8, MyError> { /* ... */ }
    async fn write(&mut self, reg: u8, value: u8) -> Result<(), MyError> { /* ... */ }
}

Accept a trait bound in consumer code:

use hdmi_hal_async::scdc::ScdcTransport;

async fn configure_frl<T: ScdcTransport>(transport: &mut T) -> Result<(), T::Error> {
    transport.write(0x31, 0x01).await?; // initiate FRL
    Ok(())
}

Stack position

hdmi-hal-async mirrors hdmi-hal's position in the stack, serving async platform backends and async protocol logic. It depends on hdmi-hal for shared data types.

flowchart LR
    dt["display-types"]
    hal["hdmi-hal"]
    async["hdmi-hal-async"]
    ca["culvert-async"]
    pa["plumbob-async"]
    be["async platform backends"]

    dt --> hal
    dt --> async
    hal --> async
    async --> ca
    async --> pa
    async --> be

Out of scope

  • Protocol logic — typed SCDC register wrappers and async link training belong in the crates that consume ScdcTransport.
  • Implementations — async platform backends live in the crates that use these traits.
  • Sync/async adapters — wrappers that bridge sync implementations to async trait bounds belong in a compatibility shim crate, not here.
  • Executor dependency — the traits impose no constraint on which async runtime is used.

Documentation

Verifying releases

Releases are built on GitHub Actions and attested with SLSA Build Level 2 provenance (from 0.2.0). To verify a release .crate against its signed provenance, install the GitHub CLI and run:

gh attestation verify hdmi-hal-async-X.Y.Z.crate --repo DracoWhitefire/hdmi-hal-async

The attested .crate is attached to each GitHub release.

Releases from 0.2.0 are uploaded through crates.io trusted publishing: the publish workflow obtains a short-lived token via OpenID Connect instead of using a stored API token. crates.io can also reject uploads made with an API token for this crate; the badge above shows whether that setting is on. Each version's publishing details, including the workflow run and commit, are available from the crates.io API:

curl -A "your-tool (contact)" https://crates.io/api/v1/crates/hdmi-hal-async/X.Y.Z
# see .version.trustpub_data

0.0.1 (by hand) and 0.1.0 (from CI) were uploaded with an API token; they carry no provenance and have no GitHub release.

License

Licensed under the Mozilla Public License 2.0.