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