altosui: Adapt to AltosFlightSeries for data analysis
authorKeith Packard <keithp@keithp.com>
Fri, 26 May 2017 00:29:31 +0000 (17:29 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 26 May 2017 00:29:31 +0000 (17:29 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosFlightStatus.java
altosui/AltosFlightUI.java
altosui/AltosGraphUI.java
altosui/AltosLanded.java
altosui/AltosPad.java
altosui/AltosUI.java

index 4288fc9..26f0379 100644 (file)
@@ -120,13 +120,14 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
 
                int     last_serial = -1;
                void show(AltosState state, AltosListenerState listener_state) {
-                       if (state.serial != last_serial) {
+                       AltosCalData    cal_data = state.cal_data;
+                       if (cal_data.serial != last_serial) {
                                show();
-                               if (state.serial == AltosLib.MISSING)
+                               if (cal_data.serial == AltosLib.MISSING)
                                        value.setText("none");
                                else
-                                       value.setText(String.format("%d", state.serial));
-                               last_serial = state.serial;
+                                       value.setText(String.format("%d", cal_data.serial));
+                               last_serial = cal_data.serial;
                        }
                }
 
@@ -147,13 +148,14 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
                int     last_flight = -1;
 
                void show(AltosState state, AltosListenerState listener_state) {
-                       if (state.flight != last_flight) {
+                       AltosCalData cal_data = state.cal_data;
+                       if (cal_data.flight != last_flight) {
                                show();
-                               if (state.flight == AltosLib.MISSING)
+                               if (cal_data.flight == AltosLib.MISSING)
                                        value.setText("none");
                                else
-                                       value.setText(String.format("%d", state.flight));
-                               last_flight = state.flight;
+                                       value.setText(String.format("%d", cal_data.flight));
+                               last_flight = cal_data.flight;
                        }
                }
 
index cf03d2d..3d33b6e 100644 (file)
@@ -101,7 +101,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
                status_update.saved_listener_state = listener_state;
 
                if (state == null)
-                       state = new AltosState();
+                       state = new AltosState(new AltosCalData());
 
                if (state.state() != Altos.ao_flight_startup) {
                        if (!has_state) {
index 50a1948..5314a3b 100644 (file)
@@ -37,19 +37,23 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
        AltosGraphNew           graph;
        AltosUIEnable           enable;
        AltosUIMap              map;
-       AltosState              state;
-       AltosGraphDataSet       graphDataSet;
        AltosFlightStats        stats;
        AltosFlightStatsTable   statsTable;
+       AltosGPS                gps;
        boolean                 has_gps;
 
-       void fill_map(AltosStateIterable states) {
-               boolean         any_gps = false;
-               for (AltosState state : states) {
-                       if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) {
+       void fill_map(AltosFlightSeries flight_series) {
+               boolean                 any_gps = false;
+
+               for (AltosGPSTimeValue gtv : flight_series.gps_series) {
+                       AltosGPS gps = gtv.gps;
+                       if (gps != null &&
+                           gps.locked &&
+                           gps.nsat >= 4) {
                                if (map == null)
                                        map = new AltosUIMap();
-                               map.show(state, null);
+                               map.show(gps, AltosLib.ao_flight_pad);
+                               this.gps = gps;
                                has_gps = true;
                        }
                }
@@ -69,18 +73,24 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
                        enable.units_changed(imperial_units);
        }
 
-       AltosGraphUI(AltosStateIterable states, AltosRecordSet record_set, File file) throws InterruptedException, IOException {
+       AltosGraphUI(AltosRecordSet set, File file) throws InterruptedException, IOException {
                super(file.getName());
-               state = null;
+               AltosCalData    cal_data = set.cal_data();
+
 
                pane = new JTabbedPane();
 
                enable = new AltosUIEnable();
 
-               stats = new AltosFlightStats(states);
-//             graphDataSet = new AltosGraphDataSet(states);
+               AltosUIFlightSeries flight_series = new AltosUIFlightSeries(cal_data);
+
+               set.capture_series(flight_series);
+
+               flight_series.fill_in();
+
+               stats = new AltosFlightStats(flight_series);
 
-               graph = new AltosGraphNew(enable, stats, record_set);
+               graph = new AltosGraphNew(enable, stats, flight_series, cal_data);
 
                statsTable = new AltosFlightStatsTable(stats);
 
@@ -89,7 +99,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
                pane.add("Flight Statistics", statsTable);
 
                has_gps = false;
-               fill_map(states);
+               fill_map(flight_series);
                if (has_gps)
                        pane.add("Map", map);
 
@@ -108,7 +118,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
                pack();
 
                setVisible(true);
-               if (state != null && has_gps)
-                       map.centre(state);
+               if (gps != null)
+                       map.centre(gps);
        }
 }
index 95cab60..a75d5a9 100644 (file)
@@ -123,20 +123,17 @@ public class AltosLanded extends AltosUIFlightTab implements ActionListener {
                        if (file != null) {
                                String  filename = file.getName();
                                try {
-                                       AltosStateIterable states = null;
                                        AltosRecordSet record_set = null;
                                        if (filename.endsWith("eeprom")) {
-                                               FileReader in = new FileReader(file);
-                                               states = new AltosEepromFile(in);
                                                record_set = new AltosEepromRecordSet(new FileReader(file));
                                        } else if (filename.endsWith("telem")) {
                                                FileInputStream in = new FileInputStream(file);
-                                               states = new AltosTelemetryFile(in);
+                                               record_set = new AltosTelemetryFile(in);
                                        } else {
                                                throw new FileNotFoundException(filename);
                                        }
                                        try {
-                                               new AltosGraphUI(states, record_set, file);
+                                               new AltosGraphUI(record_set, file);
                                        } catch (InterruptedException ie) {
                                        } catch (IOException ie) {
                                        }
index d411c96..73da993 100644 (file)
@@ -46,10 +46,10 @@ public class AltosPad extends AltosUIFlightTab {
 
        class LoggingReady extends AltosUIIndicator {
                public void show (AltosState state, AltosListenerState listener_state) {
-                       if (state == null || state.flight == AltosLib.MISSING) {
+                       if (state == null || state.cal_data.flight == AltosLib.MISSING) {
                                hide();
                        } else {
-                               if (state.flight != 0) {
+                               if (state.cal_data.flight != 0) {
                                        if (state.state() <= Altos.ao_flight_pad)
                                                show("Ready to record");
                                        else if (state.state() < Altos.ao_flight_landed ||
@@ -59,7 +59,7 @@ public class AltosPad extends AltosUIFlightTab {
                                                show("Recorded data");
                                } else
                                        show("Storage full");
-                               set_lights(state.flight != 0);
+                               set_lights(state.cal_data.flight != 0);
                        }
                }
                public LoggingReady (AltosUIFlightTab container, int y) {
index 7caaa3e..a6e422e 100644 (file)
@@ -310,12 +310,13 @@ public class AltosUI extends AltosUIFrame {
                AltosDataChooser chooser = new AltosDataChooser(
                        AltosUI.this);
 
-               Iterable<AltosState> states = chooser.runDialog();
-               if (states != null) {
-                       AltosFlightReader reader = new AltosReplayReader(states.iterator(),
-                                                                        chooser.file());
-                       new AltosFlightUI(voice, reader);
-               }
+               AltosRecordSet set = chooser.runDialog();
+/* XXX fixme */
+//             if (states != null) {
+//                     AltosFlightReader reader = new AltosReplayReader(states.iterator(),
+//                                                                      chooser.file());
+//                     new AltosFlightUI(voice, reader);
+//             }
        }
 
        /* Connect to TeleMetrum, either directly or through
@@ -325,6 +326,12 @@ public class AltosUI extends AltosUIFrame {
                new AltosEepromManage(AltosUI.this, AltosLib.product_any);
        }
 
+       private static AltosFlightSeries make_series(AltosRecordSet set) {
+               AltosFlightSeries series = new AltosFlightSeries(new AltosCalData());
+               set.capture_series(series);
+               return series;
+       }
+
        /* Load a flight log file and write out a CSV file containing
         * all of the data in standard units
         */
@@ -332,10 +339,11 @@ public class AltosUI extends AltosUIFrame {
        private void ExportData() {
                AltosDataChooser chooser;
                chooser = new AltosDataChooser(this);
-               AltosStateIterable states = chooser.runDialog();
-               if (states == null)
+               AltosRecordSet set = chooser.runDialog();
+               if (set == null)
                        return;
-               new AltosCSVUI(AltosUI.this, states, chooser.file());
+               AltosFlightSeries series = make_series(set);
+               new AltosCSVUI(AltosUI.this, series, series.cal_data, chooser.file());
        }
 
        /* Load a flight log CSV file and display a pretty graph.
@@ -344,11 +352,11 @@ public class AltosUI extends AltosUIFrame {
        private void GraphData() {
                AltosDataChooser chooser;
                chooser = new AltosDataChooser(this);
-               AltosStateIterable states = chooser.runDialog();
-               if (states == null)
+               AltosRecordSet set = chooser.runDialog();
+               if (set == null)
                        return;
                try {
-                       new AltosGraphUI(states, new AltosEepromRecordSet(new FileReader(chooser.file())), chooser.file());
+                       new AltosGraphUI(set, chooser.file());
                } catch (InterruptedException ie) {
                } catch (IOException ie) {
                }
@@ -365,7 +373,7 @@ public class AltosUI extends AltosUIFrame {
                }
        }
 
-       static AltosStateIterable open_logfile(File file) {
+       static AltosRecordSet open_logfile(File file) {
                try {
                        if (file.getName().endsWith("telem"))
                                return new AltosTelemetryFile(new FileInputStream(file));
@@ -407,8 +415,8 @@ public class AltosUI extends AltosUIFrame {
        static final int process_cat = 6;
 
        static boolean process_csv(File input) {
-               AltosStateIterable states = open_logfile(input);
-               if (states == null)
+               AltosRecordSet set = open_logfile(input);
+               if (set == null)
                        return false;
 
                File output = Altos.replace_extension(input,".csv");
@@ -420,15 +428,16 @@ public class AltosUI extends AltosUIFrame {
                        AltosWriter writer = open_csv(output);
                        if (writer == null)
                                return false;
-                       writer.write(states);
+                       AltosFlightSeries series = make_series(set);
+                       writer.write(series);
                        writer.close();
                }
                return true;
        }
 
        static boolean process_kml(File input) {
-               AltosStateIterable states = open_logfile(input);
-               if (states == null)
+               AltosRecordSet set = open_logfile(input);
+               if (set == null)
                        return false;
 
                File output = Altos.replace_extension(input,".kml");
@@ -440,13 +449,14 @@ public class AltosUI extends AltosUIFrame {
                        AltosWriter writer = open_kml(output);
                        if (writer == null)
                                return false;
-                       writer.write(states);
+                       AltosFlightSeries series = make_series(set);
+                       writer.write(series);
                        writer.close();
                        return true;
                }
        }
 
-       static AltosStateIterable record_iterable(File file) {
+       static AltosRecordSet record_set(File file) {
                FileInputStream in;
                if (file.getName().endsWith("telem")) {
                        try {
@@ -468,10 +478,11 @@ public class AltosUI extends AltosUIFrame {
        }
 
        static AltosReplayReader replay_file(File file) {
-               AltosStateIterable states = record_iterable(file);
-               if (states == null)
+               AltosRecordSet set = record_set(file);
+               if (set == null)
                        return null;
-               return new AltosReplayReader(states.iterator(), file);
+//             return new AltosReplayReader(states.iterator(), file);
+               return null;
        }
 
        static boolean process_replay(File file) {
@@ -483,11 +494,11 @@ public class AltosUI extends AltosUIFrame {
        }
 
        static boolean process_graph(File file) {
-               AltosStateIterable states = record_iterable(file);
-               if (states == null)
+               AltosRecordSet set = record_set(file);
+               if (set == null)
                        return false;
                try {
-                       new AltosGraphUI(states, new AltosEepromRecordSet(new FileReader(file)), file);
+                       new AltosGraphUI(set, file);
                        return true;
                } catch (InterruptedException ie) {
                } catch (IOException ie) {
@@ -496,12 +507,13 @@ public class AltosUI extends AltosUIFrame {
        }
 
        static boolean process_summary(File file) {
-               AltosStateIterable states = record_iterable(file);
-               if (states == null)
+               AltosRecordSet set = record_set(file);
+               if (set == null)
                        return false;
                try {
                        System.out.printf("%s:\n", file.toString());
-                       AltosFlightStats stats = new AltosFlightStats(states);
+                       AltosFlightSeries series = make_series(set);
+                       AltosFlightStats stats = new AltosFlightStats(series);
                        if (stats.serial != AltosLib.MISSING)
                                System.out.printf("Serial:       %5d\n", stats.serial);
                        if (stats.flight != AltosLib.MISSING)
@@ -550,26 +562,26 @@ public class AltosUI extends AltosUIFrame {
 
        static boolean process_cat(File file) {
                try {
-                       AltosStateIterable eef = record_iterable(file);
-
-                       for (AltosState state : eef) {
-                               if ((state.set & AltosState.set_gps) != 0) {
-                                       System.out.printf ("time %d %d-%d-%d %d:%d:%d lat %g lon %g alt %g\n",
-                                                          state.gps.seconds(),
-                                                          state.gps.year,
-                                                          state.gps.month,
-                                                          state.gps.day,
-                                                          state.gps.hour,
-                                                          state.gps.minute,
-                                                          state.gps.second,
-                                                          state.gps.lat,
-                                                          state.gps.lon,
-                                                          state.gps.alt);
-                               } else {
-                                       System.out.printf ("tick %d state %d height %g\n",
-                                                          state.tick, state.state(), state.height());
-                               }
-                       }
+                       AltosRecordSet set = record_set(file);
+
+//                     for (AltosState state : eef) {
+//                             if ((state.set & AltosState.set_gps) != 0) {
+//                                     System.out.printf ("time %d %d-%d-%d %d:%d:%d lat %g lon %g alt %g\n",
+//                                                        state.gps.seconds(),
+//                                                        state.gps.year,
+//                                                        state.gps.month,
+//                                                        state.gps.day,
+//                                                        state.gps.hour,
+//                                                        state.gps.minute,
+//                                                        state.gps.second,
+//                                                        state.gps.lat,
+//                                                        state.gps.lon,
+//                                                        state.gps.alt);
+//                             } else {
+//                                     System.out.printf ("tick %d state %d height %g\n",
+//                                                        state.tick, state.state(), state.height());
+//                             }
+//                     }
 
                } catch (Exception e) {
                        System.out.printf("Failed to open file '%s'\n", file);