common: Tweak bit order of screen data.
[gps-watch.git] / src / common / display.rs
index 4f09ef5f95a346f4e8438abd03ab4398670c791c..38eeaa9228ed6c23f8afa4466bc5834d95c98688 100644 (file)
@@ -32,6 +32,14 @@ pub struct Display {
     i2c_slave_address: u8,
 }
 
+pub enum Icon {
+    SatelliteBody,
+    SatelliteWave1,
+    SatelliteWave2,
+    Heart,
+    Alarm,
+}
+
 fn delay(u: u32) {
     let mut r = u;
 
@@ -73,6 +81,8 @@ fn delay2(u: u32) {
     }
 }
 
+const ICON_COLUMN: usize = 8;
+
 impl Display {
     pub fn new(reset_gpio: u32, reset_gpio_pin: u32, i2c_slave_address: u8) -> Display {
         Display {
@@ -114,6 +124,30 @@ impl Display {
         }
     }
 
+    fn icon_row(&self, icon: Icon) -> usize {
+        match icon {
+            Icon::SatelliteBody => 31,
+            Icon::SatelliteWave1 => 29,
+            Icon::SatelliteWave2 => 27,
+            Icon::Heart => 45,
+            Icon::Alarm => 61,
+        }
+    }
+
+    pub fn show_icon(&mut self, icon: Icon) {
+        let row = self.icon_row(icon);
+
+        self.seek(row, ICON_COLUMN);
+        self.write_data(0x80);
+    }
+
+    pub fn hide_icon(&mut self, icon: Icon) {
+        let row = self.icon_row(icon);
+
+        self.seek(row, ICON_COLUMN);
+        self.write_data(0x00);
+    }
+
     pub fn clear(&mut self) {
         self.seek(0, 0);
 
@@ -123,10 +157,10 @@ impl Display {
     }
 
     pub fn draw(&mut self, screen: &screen::Screen) {
-        let mut mask : u8 = 0x80;
+        let mut mask : u8 = 0x01;
 
         for col in 0..screen::WIDTH_PX {
-            mask = mask.rotate_left(1);
+            mask = mask.rotate_right(1);
 
             // Rotate by 90 degrees.
             //