hd44780_controller/device/
common.rs1pub trait Device {
2 fn set_register_select(&mut self, mode: RegisterSelectMode);
3 fn set_rw(&mut self, mode: RWMode);
4 fn set_enable(&mut self, enabled: bool);
5 fn set_backlight(&mut self, enabled: bool);
6 fn set_data_nibble(&mut self, data: u8);
7}
8
9#[cfg(feature = "async")]
10#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
11pub trait AsyncDevice: Device {
12 type Err;
13
14 async fn delay_us_async(&mut self, us: u32);
15 async fn flush_async(&mut self) -> Result<(), Self::Err>;
16
17 async fn write_nibble_async(
18 &mut self,
19 mode: RegisterSelectMode,
20 data: u8,
21 ) -> Result<(), Self::Err> {
22 self.set_register_select(mode);
23 self.set_rw(RWMode::Write);
24 self.set_data_nibble(data);
25
26 self.set_enable(true);
27 self.flush_async().await?;
28 self.set_enable(false);
29 self.flush_async().await?;
30
31 Ok(())
32 }
33
34 async fn write_byte_async(
35 &mut self,
36 mode: RegisterSelectMode,
37 byte: u8,
38 ) -> Result<(), Self::Err> {
39 let high = (byte >> 4) & 0x0F;
40 let low = byte & 0x0F;
41
42 self.write_nibble_async(mode, high).await?;
43 self.write_nibble_async(mode, low).await?;
44 Ok(())
45 }
46}
47
48pub trait SyncDevice: Device {
49 type Err;
50
51 fn delay_us(&mut self, us: u32);
52 fn flush(&mut self) -> Result<(), Self::Err>;
53
54 fn write_nibble(&mut self, mode: RegisterSelectMode, data: u8) -> Result<(), Self::Err> {
55 self.set_register_select(mode);
56 self.set_rw(RWMode::Write);
57 self.set_data_nibble(data);
58
59 self.set_enable(true);
60 self.flush()?;
61 self.set_enable(false);
62 self.flush()?;
63
64 Ok(())
65 }
66
67 fn write_byte(&mut self, mode: RegisterSelectMode, byte: u8) -> Result<(), Self::Err> {
68 let high = (byte >> 4) & 0x0F;
69 let low = byte & 0x0F;
70
71 self.write_nibble(mode, high)?;
72 self.write_nibble(mode, low)?;
73 Ok(())
74 }
75}
76
77#[derive(Copy, Clone, Eq, PartialEq, Debug)]
78pub enum RegisterSelectMode {
79 Command,
80 Data,
81}
82
83#[derive(Copy, Clone, Eq, PartialEq, Debug)]
84pub enum RWMode {
85 Read,
86 Write,
87}