From 7e237920abb582d7ceb3e1925b11a848575ac68a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 12 Sep 2012 21:32:25 -0700 Subject: altosui: Stop downloading eeprom data on a block full of invalid data When no valid records are found within an eeprom block, we assume that no more data will be found within the entire storage area. Signed-off-by: Keith Packard --- altosui/AltosEepromDownload.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/altosui/AltosEepromDownload.java b/altosui/AltosEepromDownload.java index b04890cd..65cac7bd 100644 --- a/altosui/AltosEepromDownload.java +++ b/altosui/AltosEepromDownload.java @@ -134,7 +134,8 @@ public class AltosEepromDownload implements Runnable { } if (r.cmd == Altos.AO_LOG_STATE && r.a == Altos.ao_flight_landed) done = true; - any_valid = true; + if (r.cmd != AltosLib.AO_LOG_INVALID) + any_valid = true; Log(r); } catch (ParseException pe) { if (parse_exception == null) -- cgit v1.2.3 From 0564f9b13d4e3050b0a45fc1c4f710ab2b1f9d81 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 12 Sep 2012 22:40:57 -0700 Subject: altosui: Leave new_gps indication until gps value is used During replay, AltosState may not see a new GPS value as soon as it lands in the state field as additional records with the same timestamp may come in after the GPS record. Instead of resetting the new_gps indication when the new record is created, wait until the new_gps indication is seen by the AltosState update code and have that clear the new_gps indication. Signed-off-by: Keith Packard --- altoslib/AltosRecord.java | 2 +- altoslib/AltosState.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/altoslib/AltosRecord.java b/altoslib/AltosRecord.java index dd741716..8bab1d0c 100644 --- a/altoslib/AltosRecord.java +++ b/altoslib/AltosRecord.java @@ -168,7 +168,7 @@ public class AltosRecord implements Comparable , Cloneable { speed = old.speed; height = old.height; gps = new AltosGPS(old.gps); - new_gps = false; + new_gps = old.new_gps; companion = old.companion; } diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 2806812e..2e4d8870 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -165,6 +165,8 @@ public class AltosState { } else pad_alt = ground_altitude; + data.new_gps = false; + gps_waiting = MIN_PAD_SAMPLES - npad; if (gps_waiting < 0) gps_waiting = 0; -- cgit v1.2.3 From 9728b20a4ad9576ac1022dc9a5771f5a3eb92b3d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 12 Sep 2012 23:56:18 -0700 Subject: altosui: Exit with an error status when file processing fails If the user provides any files on the command line, and if processing them fails in some way, exit immediately with an error indication. Signed-off-by: Keith Packard --- altosui/AltosUI.java | 51 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 9977e82b..c1a66b83 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -399,39 +399,43 @@ public class AltosUI extends AltosFrame { static final int process_replay = 4; static final int process_summary = 5; - static void process_csv(String input) { + static boolean process_csv(String input) { AltosRecordIterable iterable = open_logfile(input); if (iterable == null) - return; + return false; String output = Altos.replace_extension(input,".csv"); System.out.printf("Processing \"%s\" to \"%s\"\n", input, output); if (input.equals(output)) { System.out.printf("Not processing '%s'\n", input); + return false; } else { AltosWriter writer = open_csv(output); if (writer == null) - return; + return false; writer.write(iterable); writer.close(); } + return true; } - static void process_kml(String input) { + static boolean process_kml(String input) { AltosRecordIterable iterable = open_logfile(input); if (iterable == null) - return; + return false; String output = Altos.replace_extension(input,".kml"); System.out.printf("Processing \"%s\" to \"%s\"\n", input, output); if (input.equals(output)) { System.out.printf("Not processing '%s'\n", input); + return false; } else { AltosWriter writer = open_kml(output); if (writer == null) - return; + return false; writer.write(iterable); writer.close(); + return true; } } @@ -464,25 +468,32 @@ public class AltosUI extends AltosFrame { return new AltosReplayReader(recs.iterator(), new File(filename)); } - static void process_replay(String filename) { + static boolean process_replay(String filename) { AltosReplayReader reader = replay_file(filename); + if (reader == null) + return false; AltosFlightUI flight_ui = new AltosFlightUI(new AltosVoice(), reader); flight_ui.set_exit_on_close(); + return true; } - static void process_graph(String filename) { + static boolean process_graph(String filename) { AltosRecordIterable recs = record_iterable_file(filename); if (recs == null) - return; + return false; try { new AltosGraphUI(recs, filename); + return true; } catch (InterruptedException ie) { } catch (IOException ie) { } + return false; } - static void process_summary(String filename) { + static boolean process_summary(String filename) { AltosRecordIterable iterable = record_iterable_file(filename); + if (iterable == null) + return false; try { AltosFlightStats stats = new AltosFlightStats(iterable); if (stats.serial > 0) @@ -517,9 +528,11 @@ public class AltosUI extends AltosFrame { System.out.printf("Flight time: %6.0f s\n", stats.state_end[Altos.ao_flight_main] - stats.state_start[Altos.ao_flight_boost]); + return true; } catch (InterruptedException ie) { } catch (IOException ie) { } + return false; } public static void help(int code) { @@ -534,6 +547,7 @@ public class AltosUI extends AltosFrame { } public static void main(final String[] args) { + int errors = 0; load_library(null); try { UIManager.setLookAndFeel(AltosUIPreferences.look_and_feel()); @@ -577,23 +591,30 @@ public class AltosUI extends AltosFrame { switch (process) { case process_none: case process_graph: - process_graph(args[i]); + if (!process_graph(args[i])) + ++errors; break; case process_replay: - process_replay(args[i]); + if (!process_replay(args[i])) + ++errors; break; case process_kml: - process_kml(args[i]); + if (!process_kml(args[i])) + ++errors; break; case process_csv: - process_csv(args[i]); + if (!process_csv(args[i])) + ++errors; break; case process_summary: - process_summary(args[i]); + if (!process_summary(args[i])) + ++errors; break; } } } } + if (errors != 0) + System.exit(errors); } } -- cgit v1.2.3