hd44780_controller/command/
enter_4bit.rs

1use crate::device::*;
2
3use super::*;
4
5#[derive(Clone, Debug, Eq, PartialEq)]
6pub struct Enter4Bit;
7
8impl SyncCommand for Enter4Bit {
9    type Ret = ();
10
11    type Err = super::Error;
12
13    fn execute<D: SyncDevice + ?Sized>(&self, dev: &mut D) -> Result<Self::Ret, Self::Err> {
14        dev.delay_us(50000);
15
16        dev.write_nibble(RegisterSelectMode::Command, 0x3)
17            .map_err(|_| super::Error::DeviceError)?;
18        dev.delay_us(4500);
19
20        dev.write_nibble(RegisterSelectMode::Command, 0x3)
21            .map_err(|_| super::Error::DeviceError)?;
22        dev.delay_us(150);
23
24        dev.write_nibble(RegisterSelectMode::Command, 0x2)
25            .map_err(|_| super::Error::DeviceError)?;
26        dev.delay_us(150);
27
28        Ok(())
29    }
30}
31
32#[cfg(feature = "async")]
33#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
34impl AsyncCommand for Enter4Bit {
35    type Ret = ();
36
37    type Err = super::Error;
38
39    async fn execute_async<D: AsyncDevice + ?Sized>(
40        &self,
41        dev: &mut D,
42    ) -> Result<Self::Ret, Self::Err> {
43        dev.delay_us_async(50000).await;
44
45        dev.write_nibble_async(RegisterSelectMode::Command, 0x3)
46            .await
47            .map_err(|_| super::Error::DeviceError)?;
48        dev.delay_us_async(4500).await;
49
50        dev.write_nibble_async(RegisterSelectMode::Command, 0x3)
51            .await
52            .map_err(|_| super::Error::DeviceError)?;
53        dev.delay_us_async(150).await;
54
55        dev.write_nibble_async(RegisterSelectMode::Command, 0x2)
56            .await
57            .map_err(|_| super::Error::DeviceError)?;
58        dev.delay_us_async(150).await;
59
60        Ok(())
61    }
62}