application: Show current time on the display if we have a GPS fix.
authorTilman Sauerbeck <tilman@code-monkey.de>
Tue, 31 Dec 2019 12:32:48 +0000 (13:32 +0100)
committerTilman Sauerbeck <tilman@code-monkey.de>
Mon, 6 Jan 2020 09:45:34 +0000 (10:45 +0100)
src/application/main.rs

index 7eb180cbfa0bf42fcde3b8c9f45aceb9a822e4a0..b11950366e6bbd826081c548b3d25b6ff0fc4547 100644 (file)
@@ -40,6 +40,8 @@ use common::uart;
 use common::usb_serial;
 use common::display;
 use common::gps;
+use common::screen;
+use common::time::Time;
 
 extern {
     fn enable_interrupts();
@@ -117,6 +119,8 @@ pub unsafe extern "C" fn _start() -> ! {
     display.init();
     display.clear();
 
+    let mut screen = screen::Screen::new();
+
     // Hold GPS in reset while configuring its UART.
     gpio::clear(gpio::GPIOB, 1);
     systick::delay_ms(50);
@@ -134,11 +138,18 @@ pub unsafe extern "C" fn _start() -> ! {
     let mut heart_icon_timer = Timer::new(1000);
     let mut gps_icon_timer = Timer::new(500);
 
+    let mut prev_tap = gps::TimeAndPos::new();
+
     loop {
         let mut tap = gps::TimeAndPos::new();
+        let mut show_time = false;
         let old_gps_has_fix = gps_has_fix;
 
         while gps.update(&mut tap) {
+            prev_tap = tap;
+
+            show_time = true;
+
             gps_has_fix = true;
             gps_has_fix_ticks = systick::now();
         }
@@ -172,6 +183,18 @@ pub unsafe extern "C" fn _start() -> ! {
             });
         }
 
+        if show_time {
+            if let Some(tm) = Time::from_unix_time(prev_tap.unix_time) {
+                let mut time_s = [b' '; 8];
+                tm.fmt_time(&mut time_s);
+
+                screen.clear();
+                screen.draw_text(&time_s);
+
+                display.draw(&screen);
+            }
+        }
+
         heart_icon_timer.update(|state| {
             if state == 1 {
                 display.hide_icon(display::Icon::Heart);