From 4d497c1be534e2b206edec3c096198c8ea64cebe Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 25 May 2017 17:29:31 -0700 Subject: [PATCH] altosui: Adapt to AltosFlightSeries for data analysis Signed-off-by: Keith Packard --- altosui/AltosFlightStatus.java | 18 +++--- altosui/AltosFlightUI.java | 2 +- altosui/AltosGraphUI.java | 40 +++++++----- altosui/AltosLanded.java | 7 +-- altosui/AltosPad.java | 6 +- altosui/AltosUI.java | 110 ++++++++++++++++++--------------- 6 files changed, 102 insertions(+), 81 deletions(-) diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java index 4288fc9f..26f0379a 100644 --- a/altosui/AltosFlightStatus.java +++ b/altosui/AltosFlightStatus.java @@ -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; } } diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index cf03d2dc..3d33b6e5 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -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) { diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java index 50a1948e..5314a3b6 100644 --- a/altosui/AltosGraphUI.java +++ b/altosui/AltosGraphUI.java @@ -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); } } diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index 95cab605..a75d5a9f 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -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) { } diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index d411c969..73da9933 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -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) { diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 7caaa3e9..a6e422e6 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -310,12 +310,13 @@ public class AltosUI extends AltosUIFrame { AltosDataChooser chooser = new AltosDataChooser( AltosUI.this); - Iterable 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); -- 2.30.2