Skip to main content

Scdc

Struct Scdc 

Source
pub struct Scdc<T> { /* private fields */ }
Expand description

Async typed client for the HDMI 2.1 SCDC (Status and Control Data Channel) register map.

Scdc<T> wraps an async ScdcTransport and exposes one typed async fn per register group. It holds no protocol state; all sequencing logic belongs in the caller.

§Example

use culvert_async::Scdc;
use hdmi_hal_async::scdc::ScdcTransport;

struct StubTransport;
impl ScdcTransport for StubTransport {
    type Error = core::convert::Infallible;
    async fn read(&mut self, _reg: u8) -> Result<u8, Self::Error> { Ok(0) }
    async fn write(&mut self, _reg: u8, _value: u8) -> Result<(), Self::Error> { Ok(()) }
}

let mut scdc = Scdc::new(StubTransport);
let sink_version = scdc.read_sink_version().await.unwrap();
scdc.write_source_version(1).await.unwrap();

Implementations§

Source§

impl<T: ScdcTransport> Scdc<T>

Source

pub async fn read_ced(&mut self) -> Result<CedCounters, ScdcError<T::Error>>

Reads per-lane character error counts from ERR_DET registers (0x50–0x57).

Each lane’s counter is decoded from a low/high byte pair. The high byte’s bit 7 is a validity flag; if it is not set the lane’s counter is None.

Source§

impl<T: ScdcTransport> Scdc<T>

Source

pub async fn write_frl_config( &mut self, config: FrlConfig, ) -> Result<(), ScdcError<T::Error>>

Writes FRL training configuration to Config_0 (0x30).

Encodes FRL_Rate into bits[3:0], DSC_FRL_Max into bit[4], and FFE_Levels into bits[7:5].

Source

pub async fn read_status_flags( &mut self, ) -> Result<StatusFlags, ScdcError<T::Error>>

Reads FRL status from Status_Flags_0 (0x40) and Status_Flags_1 (0x41).

Returns crate::ProtocolError::UnknownLtpReq if the sink reports an LTP request value not defined by the HDMI 2.1 specification.

Source§

impl<T: ScdcTransport> Scdc<T>

Source

pub async fn write_tmds_config( &mut self, config: TmdsConfig, ) -> Result<(), ScdcError<T::Error>>

Writes scrambling configuration to TMDS_Config (0x20).

Sets Scrambling_Enable (bit 0) and TMDS_Bit_Clock_Ratio (bit 1).

Source

pub async fn read_scrambler_status( &mut self, ) -> Result<ScramblerStatus, ScdcError<T::Error>>

Reads scrambler acknowledgement from Scrambler_Status (0x21).

Returns ScramblerStatus::scrambling_active set when the sink confirms that TMDS scrambling is active (bit 0).

Source§

impl<T: ScdcTransport> Scdc<T>

Source

pub async fn read_update_flags( &mut self, ) -> Result<UpdateFlags, ScdcError<T::Error>>

Reads update flags from Update_0 (0x10) and Update_1 (0x11).

Source

pub async fn clear_update_flags( &mut self, flags: UpdateFlags, ) -> Result<(), ScdcError<T::Error>>

Clears the specified update flags in Update_0 (0x10) and Update_1 (0x11).

Each flag set to true in flags is cleared (write-1-to-clear). Flags set to false are left unchanged.

Source§

impl<T: ScdcTransport> Scdc<T>

Source

pub async fn read_sink_version(&mut self) -> Result<u8, ScdcError<T::Error>>

Reads the sink’s SCDC protocol version from Sink_Version (0x01).

Source

pub async fn write_source_version( &mut self, version: u8, ) -> Result<(), ScdcError<T::Error>>

Writes the source’s SCDC protocol version to Source_Version (0x02).

Source§

impl<T: ScdcTransport> Scdc<T>

Source

pub fn new(transport: T) -> Self

Creates a new Scdc client wrapping the given async transport.

Source

pub fn into_transport(self) -> T

Consumes the client and returns the underlying transport.

Trait Implementations§

Source§

impl<T: ScdcTransport> ScdcClient for Scdc<T>

Source§

type Error = ScdcError<<T as ScdcTransport>::Error>

The error type returned by transport operations.
Source§

async fn write_frl_config( &mut self, config: FrlConfig, ) -> Result<(), Self::Error>

Write FRL rate and configuration to Config_0. Read more
Source§

async fn read_training_status(&mut self) -> Result<TrainingStatus, Self::Error>

Read flt_ready, frl_start, and ltp_req from Status_Flags. Read more
Source§

async fn read_ced(&mut self) -> Result<CedCounters, Self::Error>

Read per-lane character error counts for equalization feedback. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Scdc<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Scdc<T>
where T: RefUnwindSafe,

§

impl<T> Send for Scdc<T>
where T: Send,

§

impl<T> Sync for Scdc<T>
where T: Sync,

§

impl<T> Unpin for Scdc<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Scdc<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Scdc<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.