hd44780_controller/command/
enter_4bit.rs1use 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}