hd44780_driver/
entry_mode.rs1#[derive(Debug, PartialEq, Eq)]
3pub enum CursorMode {
4 Increment,
5 Decrement,
6}
7
8impl Default for CursorMode {
9 fn default() -> CursorMode {
10 CursorMode::Increment
11 }
12}
13
14#[derive(Debug, PartialEq, Eq)]
16pub enum ShiftMode {
17 Enabled,
18 Disabled,
19}
20
21impl From<bool> for ShiftMode {
22 fn from(b: bool) -> ShiftMode {
23 if b {
24 ShiftMode::Enabled
25 } else {
26 ShiftMode::Disabled
27 }
28 }
29}
30
31impl Default for ShiftMode {
32 fn default() -> ShiftMode {
33 ShiftMode::Disabled
34 }
35}
36
37#[derive(Default)]
38pub struct EntryMode {
39 pub cursor_mode: CursorMode,
40 pub shift_mode: ShiftMode,
41}
42
43impl EntryMode {
44 pub fn as_byte(&self) -> u8 {
45 let cursor_bits = match self.cursor_mode {
46 CursorMode::Increment => 0b0000_0010,
47 CursorMode::Decrement => 0,
48 };
49
50 let shift_bits = match self.shift_mode {
51 ShiftMode::Enabled => 0b0000_0001,
52 ShiftMode::Disabled => 0,
53 };
54
55 0b0000_0100 | cursor_bits | shift_bits
56 }
57}
58
59#[cfg(test)]
60mod tests {
61
62 use super::*;
63
64 #[test]
65 fn cursor_mode() {
66 let em = EntryMode {
67 cursor_mode: CursorMode::Increment,
68 shift_mode: Default::default(),
69 };
70
71 assert!(em.as_byte() & 0b0000_0010 != 0);
72
73 let em = EntryMode {
74 cursor_mode: CursorMode::Decrement,
75 shift_mode: Default::default(),
76 };
77
78 assert!(em.as_byte() & 0b0000_0010 == 0);
79 }
80
81 #[test]
82 fn shift_mode() {
83 let em = EntryMode {
84 cursor_mode: Default::default(),
85 shift_mode: ShiftMode::Enabled,
86 };
87
88 assert!(em.as_byte() & 0b0000_0001 != 0);
89
90 let em = EntryMode {
91 cursor_mode: Default::default(),
92 shift_mode: ShiftMode::Disabled,
93 };
94
95 assert!(em.as_byte() & 0b0000_0001 == 0);
96 }
97}