aboutsummaryrefslogtreecommitdiffstats
path: root/sw/deps/hd44780-driver/src/display_mode.rs
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2020-06-28 16:42:21 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2020-06-28 16:42:21 +0200
commit5d1cff57f9f5acd740a8b5f8c941beefdcc00176 (patch)
treebdfd0e394d6333aead7d3a0295ba3457bd68275d /sw/deps/hd44780-driver/src/display_mode.rs
parent93220f99a52dc93f9a2d5b11074f60156ef70210 (diff)
downloadpicardy-5d1cff57f9f5acd740a8b5f8c941beefdcc00176.tar.gz
picardy-5d1cff57f9f5acd740a8b5f8c941beefdcc00176.tar.bz2
picardy-5d1cff57f9f5acd740a8b5f8c941beefdcc00176.zip
sw: configure si5351
Diffstat (limited to 'sw/deps/hd44780-driver/src/display_mode.rs')
-rw-r--r--sw/deps/hd44780-driver/src/display_mode.rs95
1 files changed, 95 insertions, 0 deletions
diff --git a/sw/deps/hd44780-driver/src/display_mode.rs b/sw/deps/hd44780-driver/src/display_mode.rs
new file mode 100644
index 0000000..8039f7b
--- /dev/null
+++ b/sw/deps/hd44780-driver/src/display_mode.rs
@@ -0,0 +1,95 @@
+use crate::{Cursor, CursorBlink, Display};
+
+pub struct DisplayMode {
+ pub cursor_visibility: Cursor,
+ pub cursor_blink: CursorBlink,
+ pub display: Display,
+}
+
+impl Default for DisplayMode {
+ fn default() -> DisplayMode {
+ DisplayMode {
+ cursor_visibility: Cursor::Visible,
+ cursor_blink: CursorBlink::On,
+ display: Display::On,
+ }
+ }
+}
+
+impl DisplayMode {
+ pub fn as_byte(&self) -> u8 {
+ let cursor_blink_bits = match self.cursor_blink {
+ CursorBlink::On => 0b0000_0001,
+ CursorBlink::Off => 0,
+ };
+
+ let cursor_visible_bits = match self.cursor_visibility {
+ Cursor::Visible => 0b0000_0010,
+ Cursor::Invisible => 0,
+ };
+
+ let display_bits = match self.display {
+ Display::On => 0b0000_0100,
+ Display::Off => 0,
+ };
+
+ 0b0000_1000 | cursor_visible_bits | cursor_blink_bits | display_bits
+ }
+}
+
+#[cfg(test)]
+mod tests {
+
+ use super::*;
+
+ #[test]
+ fn cursor_visible() {
+ let dm = DisplayMode {
+ cursor_visibility: Cursor::Visible,
+ ..Default::default()
+ };
+
+ assert!(dm.as_byte() & 0b0000_0010 != 0);
+
+ let dm = DisplayMode {
+ cursor_visibility: Cursor::Invisible,
+ ..Default::default()
+ };
+
+ assert!(dm.as_byte() & 0b0000_0010 == 0);
+ }
+
+ #[test]
+ fn cursor_blink() {
+ let dm = DisplayMode {
+ cursor_blink: CursorBlink::On,
+ ..Default::default()
+ };
+
+ assert!(dm.as_byte() & 0b0000_0001 != 0);
+
+ let dm = DisplayMode {
+ cursor_blink: CursorBlink::Off,
+ ..Default::default()
+ };
+
+ assert!(dm.as_byte() & 0b0000_0001 == 0);
+ }
+
+ #[test]
+ fn display_visible() {
+ let dm = DisplayMode {
+ display: Display::On,
+ ..Default::default()
+ };
+
+ assert!(dm.as_byte() & 0b0000_0100 != 0);
+
+ let dm = DisplayMode {
+ display: Display::Off,
+ ..Default::default()
+ };
+
+ assert!(dm.as_byte() & 0b0000_0100 == 0);
+ }
+}