altosui: Graph TeleMini flights without crashing
authorKeith Packard <keithp@keithp.com>
Wed, 3 Apr 2013 00:44:06 +0000 (17:44 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 3 Apr 2013 00:44:06 +0000 (17:44 -0700)
Adding maps to the graph UI failed to check for missing GPS data in a
couple of places causing crashes when fed a TeleMini file.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosFlightStats.java
altosui/AltosGraphUI.java

index da06bb3d3ea1f4de9d5de38fb0fa690503c3c357..dee31a8d3bcf6f8d3005803b110ead9cb6595236 100644 (file)
@@ -150,7 +150,7 @@ public class AltosFlightStats {
                                        max_speed = state.max_baro_speed;
                                max_acceleration = state.max_acceleration;
                        }
                                        max_speed = state.max_baro_speed;
                                max_acceleration = state.max_acceleration;
                        }
-                       if (state.gps.locked && state.gps.nsat >= 4) {
+                       if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) {
                                if (state.state <= Altos.ao_flight_pad) {
                                        pad_lat = state.gps.lat;
                                        pad_lon = state.gps.lon;
                                if (state.state <= Altos.ao_flight_pad) {
                                        pad_lat = state.gps.lat;
                                        pad_lon = state.gps.lon;
index 2f3575a4387bbbd9e39f0e58a4a8394ce53a1f27..f6e57e7ec7c119308ed310d5b31772f413b4be4f 100644 (file)
@@ -26,17 +26,19 @@ public class AltosGraphUI extends AltosUIFrame
        AltosGraphDataSet       graphDataSet;
        AltosFlightStats        stats;
        AltosFlightStatsTable   statsTable;
        AltosGraphDataSet       graphDataSet;
        AltosFlightStats        stats;
        AltosFlightStatsTable   statsTable;
+       boolean                 has_gps;
 
 
-       boolean fill_map(AltosRecordIterable records) {
+       void fill_map(AltosRecordIterable records) {
                boolean         any_gps = false;
                for (AltosRecord record : records) {
                        state = new AltosState(record, state);
                boolean         any_gps = false;
                for (AltosRecord record : records) {
                        state = new AltosState(record, state);
-                       if (state.gps.locked && state.gps.nsat >= 4) {
+                       if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) {
+                               if (map == null)
+                                       map = new AltosSiteMap();
                                map.show(state, 0);
                                map.show(state, 0);
-                               any_gps = true;
+                               has_gps = true;
                        }
                }
                        }
                }
-               return any_gps;
        }
 
        AltosGraphUI(AltosRecordIterable records, File file) throws InterruptedException, IOException {
        }
 
        AltosGraphUI(AltosRecordIterable records, File file) throws InterruptedException, IOException {
@@ -54,13 +56,13 @@ public class AltosGraphUI extends AltosUIFrame
 
                statsTable = new AltosFlightStatsTable(stats);
 
 
                statsTable = new AltosFlightStatsTable(stats);
 
-               map = new AltosSiteMap();
-
                pane.add("Flight Graph", graph.panel);
                pane.add("Configure Graph", enable);
                pane.add("Flight Statistics", statsTable);
 
                pane.add("Flight Graph", graph.panel);
                pane.add("Configure Graph", enable);
                pane.add("Flight Statistics", statsTable);
 
-               if (fill_map(records))
+               has_gps = false;
+               fill_map(records);
+               if (has_gps)
                        pane.add("Map", map);
 
                setContentPane (pane);
                        pane.add("Map", map);
 
                setContentPane (pane);
@@ -69,7 +71,7 @@ public class AltosGraphUI extends AltosUIFrame
 
                setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                setVisible(true);
 
                setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                setVisible(true);
-               if (state != null)
+               if (state != null && has_gps)
                        map.centre(state);
        }
 }
                        map.centre(state);
        }
 }