+ let mut tap = gps::TimeAndPos::new();
+ let old_gps_has_fix = gps_has_fix;
+
+ while gps.update(&mut tap) {
+ gps_has_fix = true;
+ gps_has_fix_ticks = systick::now();
+ }
+
+ // Did GPS fix information expire?
+ if gps_has_fix && systick::has_timeout_ms(gps_has_fix_ticks, 1500) {
+ gps_has_fix = false;
+ }
+
+ if gps_has_fix && !old_gps_has_fix {
+ display.show_icon(display::Icon::SatelliteBody);
+ display.show_icon(display::Icon::SatelliteWave1);
+ display.show_icon(display::Icon::SatelliteWave2);
+ } else if !gps_has_fix {
+ gps_icon_timer.update(|state| {
+ if state == 1 {
+ display.show_icon(display::Icon::SatelliteWave1);
+ 2
+ } else if state == 2 {
+ display.show_icon(display::Icon::SatelliteWave2);
+ 3
+ } else if state == 3 {
+ display.hide_icon(display::Icon::SatelliteBody);
+ display.hide_icon(display::Icon::SatelliteWave1);
+ display.hide_icon(display::Icon::SatelliteWave2);
+ 0
+ } else {
+ display.show_icon(display::Icon::SatelliteBody);
+ 1
+ }
+ });
+ }