X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosEepromDownload.java;h=c4ddb0e7472c851d8d9e54673c383a98f33dcc4e;hb=0f8272852b12cf7a349cd9fd07f17c55cdb335a1;hp=78a1f4be6635b862963abedfde30bd8808488202;hpb=35ad1833b10595564de84c88f44a214b1c134ccf;p=fw%2Faltos diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java index 78a1f4be..c4ddb0e7 100644 --- a/altoslib/AltosEepromDownload.java +++ b/altoslib/AltosEepromDownload.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_5; +package org.altusmetrum.altoslib_8; import java.io.*; import java.util.*; @@ -75,7 +75,8 @@ public class AltosEepromDownload implements Runnable { } boolean done; - boolean start; + int prev_state; + int state_block; void LogEeprom(AltosEeprom r) throws IOException { if (r.cmd != AltosLib.AO_LOG_INVALID) { @@ -110,12 +111,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; } @@ -140,26 +141,20 @@ public class AltosEepromDownload implements Runnable { state = new AltosState(); done = false; - start = true; if (flights.config_data.serial < 0) throw new IOException("no serial number found"); /* Reset per-capture variables */ want_file = false; - eeprom_file = null; eeprom_pending = new LinkedList(); /* Set serial number in the monitor dialog window */ /* Now scan the eeprom, reading blocks of data and converting to .eeprom file form */ state_block = log.start_block; + prev_state = AltosLib.ao_flight_startup; for (block = log.start_block; !done && block < log.end_block; block++) { - monitor.set_value(state.state_name(), - state.state, - block - state_block, - block - log.start_block); - AltosEepromChunk eechunk = new AltosEepromChunk(link, block, block == log.start_block); /* @@ -177,12 +172,18 @@ public class AltosEepromDownload implements Runnable { } CaptureEeprom (eechunk, log_format); + + if (state.state() != prev_state && state.state() != AltosLib.ao_flight_invalid) { + state_block = block; + prev_state = state.state(); + } + + monitor.set_value(state.state_name(), + state.state(), + block - state_block, + block - log.start_block); } CheckFile(true); - if (eeprom_file != null) { - eeprom_file.flush(); - eeprom_file.close(); - } } public void run () { @@ -195,11 +196,16 @@ public class AltosEepromDownload implements Runnable { parse_exception = null; if (log.selected) { monitor.reset(); + eeprom_file = null; try { CaptureLog(log); } catch (ParseException e) { parse_exception = e; } + if (eeprom_file != null) { + eeprom_file.flush(); + eeprom_file.close(); + } } if (parse_exception != null) { failed = true;