hd44780_controller/command/
display_on_off.rs

1use crate::device::*;
2
3use super::*;
4
5#[derive(Clone, PartialEq, Eq, Debug)]
6pub struct DisplayOnOff {
7    pub display: bool,
8    pub cursor: bool,
9    pub blinking: bool,
10}
11
12impl DisplayOnOff {
13    fn code(&self) -> u8 {
14        let mut code = 0x08;
15
16        if self.display {
17            code |= 0x1 << 2;
18        }
19        if self.cursor {
20            code |= 0x1 << 1;
21        }
22        if self.blinking {
23            code |= 0x1 << 0;
24        }
25
26        code
27    }
28}
29
30impl Default for DisplayOnOff {
31    fn default() -> Self {
32        Self {
33            display: true,
34            cursor: false,
35            blinking: false,
36        }
37    }
38}
39
40impl SyncCommand for DisplayOnOff {
41    type Ret = ();
42
43    type Err = super::Error;
44
45    fn execute<D: SyncDevice + ?Sized>(&self, dev: &mut D) -> Result<Self::Ret, Self::Err> {
46        dev.write_byte(RegisterSelectMode::Command, self.code())
47            .map_err(|_| super::Error::DeviceError)?;
48        dev.delay_us(50);
49        Ok(())
50    }
51}
52
53#[cfg(feature = "async")]
54#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
55impl AsyncCommand for DisplayOnOff {
56    type Ret = ();
57
58    type Err = super::Error;
59
60    async fn execute_async<D: AsyncDevice + ?Sized>(
61        &self,
62        dev: &mut D,
63    ) -> Result<Self::Ret, Self::Err> {
64        dev.write_byte_async(RegisterSelectMode::Command, self.code())
65            .await
66            .map_err(|_| super::Error::DeviceError)?;
67        dev.delay_us_async(50).await;
68        Ok(())
69    }
70}