X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosEepromDownload.java;h=c38fcfdf10432008e758a0c4fc73b6309db8cee6;hp=868571e4c05bd315961ce4282c21ac30a02dc18b;hb=1085ec5d57e0ed5d132f2bbdac1a0b6a32c0ab4a;hpb=cb23b992be8ba40c97d8988c134a814a13ccd58c diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java index 868571e4..c38fcfdf 100644 --- a/altoslib/AltosEepromDownload.java +++ b/altoslib/AltosEepromDownload.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_7; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; @@ -35,7 +36,7 @@ public class AltosEepromDownload implements Runnable { AltosEepromList flights; boolean success; - ParseException parse_exception; + String parse_errors; AltosState state; private void FlushPending() throws IOException { @@ -88,6 +89,13 @@ public class AltosEepromDownload implements Runnable { } } + void LogError(String error) { + if (parse_errors != null) + parse_errors.concat(error.concat("\n")); + else + parse_errors = error; + } + void CaptureEeprom(AltosEepromChunk eechunk, int log_format) throws IOException, ParseException { boolean any_valid = false; boolean got_flight = false; @@ -98,7 +106,14 @@ public class AltosEepromDownload implements Runnable { monitor.set_serial(flights.config_data.serial); for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += record_length) { - AltosEeprom r = eechunk.eeprom(i, log_format, state); + AltosEeprom r = null; + + try { + r = eechunk.eeprom(i, log_format, state); + } catch (ParseException pe) { + LogError(pe.getMessage()); + r = null; + } if (r == null) continue; @@ -111,12 +126,12 @@ public class AltosEepromDownload implements Runnable { monitor.set_flight(state.flight); /* Monitor state transitions to update display */ - if (state.state != AltosLib.ao_flight_invalid && - state.state <= AltosLib.ao_flight_landed) + if (state.state() != AltosLib.ao_flight_invalid && + state.state() <= AltosLib.ao_flight_landed) { - if (state.state > AltosLib.ao_flight_pad) + if (state.state() > AltosLib.ao_flight_pad) want_file = true; - if (state.state == AltosLib.ao_flight_landed) + if (state.state() == AltosLib.ao_flight_landed) done = true; } @@ -147,7 +162,6 @@ public class AltosEepromDownload implements Runnable { /* Reset per-capture variables */ want_file = false; - eeprom_file = null; eeprom_pending = new LinkedList(); /* Set serial number in the monitor dialog window */ @@ -174,21 +188,17 @@ public class AltosEepromDownload implements Runnable { CaptureEeprom (eechunk, log_format); - if (state.state != prev_state && state.state != AltosLib.ao_flight_invalid) { + if (state.state() != prev_state && state.state() != AltosLib.ao_flight_invalid) { state_block = block; - prev_state = state.state; + prev_state = state.state(); } monitor.set_value(state.state_name(), - state.state, + state.state(), block - state_block, block - log.start_block); } CheckFile(true); - if (eeprom_file != null) { - eeprom_file.flush(); - eeprom_file.close(); - } } public void run () { @@ -198,20 +208,25 @@ public class AltosEepromDownload implements Runnable { link.start_remote(); for (AltosEepromLog log : flights) { - parse_exception = null; + parse_errors = null; if (log.selected) { monitor.reset(); + eeprom_file = null; try { CaptureLog(log); } catch (ParseException e) { - parse_exception = e; + LogError(e.getMessage()); + } + if (eeprom_file != null) { + eeprom_file.flush(); + eeprom_file.close(); } } - if (parse_exception != null) { + if (parse_errors != null) { failed = true; - monitor.show_message(String.format("Flight %d download error\n%s\nValid log data saved", + monitor.show_message(String.format("Flight %d download error. Valid log data saved\n%s", log.flight, - parse_exception.getMessage()), + parse_errors), link.name, AltosEepromMonitor.WARNING_MESSAGE); }