culvert_async/client/
version.rs1use hdmi_hal_async::scdc::ScdcTransport;
2
3use crate::ScdcError;
4
5use super::Scdc;
6use super::address;
7
8impl<T: ScdcTransport> Scdc<T> {
9 pub async fn read_sink_version(&mut self) -> Result<u8, ScdcError<T::Error>> {
11 self.transport
12 .read(address::SINK_VERSION)
13 .await
14 .map_err(ScdcError::Transport)
15 }
16
17 pub async fn write_source_version(&mut self, version: u8) -> Result<(), ScdcError<T::Error>> {
19 self.transport
20 .write(address::SOURCE_VERSION, version)
21 .await
22 .map_err(ScdcError::Transport)
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::super::Scdc;
29 use super::super::test_transport::TestTransport;
30
31 #[pollster::test]
32 async fn read_sink_version_returns_register_value() {
33 let mut sim = TestTransport::new();
34 sim.set(0x01, 0x01);
35 assert_eq!(Scdc::new(sim).read_sink_version().await.unwrap(), 0x01);
36 }
37
38 #[pollster::test]
39 async fn write_source_version_writes_register() {
40 let mut scdc = Scdc::new(TestTransport::new());
41 scdc.write_source_version(0x01).await.unwrap();
42 assert_eq!(scdc.into_transport().get(0x02), 0x01);
43 }
44
45 #[pollster::test]
46 async fn transport_error_propagates() {
47 assert!(
48 Scdc::new(TestTransport::failing_after(0))
49 .read_sink_version()
50 .await
51 .is_err()
52 );
53 assert!(
54 Scdc::new(TestTransport::failing_after(0))
55 .write_source_version(1)
56 .await
57 .is_err()
58 );
59 }
60}