X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=altosui%2FAltosEepromDownload.java;h=46715db64100a8a4a111edc9e448d329df83f640;hb=04d7d0f829ba953ffeca8ad9887a4b6b2b5d5087;hp=a4d6b26ee917866e6710812de83f85dbd06c9f5e;hpb=708e7937cba52982b91244cf89bfbff46d346135;p=fw%2Faltos diff --git a/altosui/AltosEepromDownload.java b/altosui/AltosEepromDownload.java index a4d6b26e..46715db6 100644 --- a/altosui/AltosEepromDownload.java +++ b/altosui/AltosEepromDownload.java @@ -15,21 +15,15 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package AltosUI; +package altosui; -import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import java.io.*; import java.util.*; import java.text.*; -import java.util.prefs.*; import java.util.concurrent.*; -import org.altusmetrum.AltosLib.*; - -import libaltosJNI.*; +import org.altusmetrum.altoslib_1.*; public class AltosEepromDownload implements Runnable { @@ -113,7 +107,7 @@ public class AltosEepromDownload implements Runnable { extension = "eeprom"; set_serial(flights.config_data.serial); - for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromRecord.record_length) { + for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromRecord.record_length) { try { AltosEepromRecord r = new AltosEepromRecord(eechunk, i); if (r.cmd == Altos.AO_LOG_FLIGHT) @@ -134,7 +128,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) @@ -219,7 +214,7 @@ public class AltosEepromDownload implements Runnable { boolean any_valid = false; extension = "science"; - for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) { + for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) { try { AltosEepromTeleScience r = new AltosEepromTeleScience(eechunk, i); if (r.type == AltosEepromTeleScience.AO_LOG_TELESCIENCE_START) { @@ -272,7 +267,7 @@ public class AltosEepromDownload implements Runnable { extension = "mega"; set_serial(flights.config_data.serial); - for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromMega.record_length) { + for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMega.record_length) { try { AltosEepromMega r = new AltosEepromMega(eechunk, i); if (r.cmd == Altos.AO_LOG_FLIGHT) @@ -288,13 +283,14 @@ public class AltosEepromDownload implements Runnable { if (r.cmd == Altos.AO_LOG_GPS_TIME) { year = 2000 + r.data8(14); month = r.data8(15); - day = r.data8(14); + day = r.data8(16); want_file = true; } if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed) done = true; - any_valid = true; + if (r.cmd != AltosLib.AO_LOG_INVALID) + any_valid = true; LogMega(r); } catch (ParseException pe) { if (parse_exception == null) @@ -307,6 +303,53 @@ public class AltosEepromDownload implements Runnable { CheckFile(false); } + void LogMini(AltosEepromMini r) throws IOException { + if (r.cmd != Altos.AO_LOG_INVALID) { + String log_line = String.format("%c %4x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n", + r.cmd, r.tick, + r.data8[0], r.data8[1], r.data8[2], r.data8[3], + r.data8[4], r.data8[5], r.data8[6], r.data8[7], + r.data8[8], r.data8[9], r.data8[10], r.data8[11]); + if (eeprom_file != null) + eeprom_file.write(log_line); + else + eeprom_pending.add(log_line); + } + } + + void CaptureMini(AltosEepromChunk eechunk) throws IOException { + boolean any_valid = false; + + extension = "mini"; + set_serial(flights.config_data.serial); + for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMini.record_length) { + try { + AltosEepromMini r = new AltosEepromMini(eechunk, i); + if (r.cmd == Altos.AO_LOG_FLIGHT) + set_flight(r.data16(0)); + + /* Monitor state transitions to update display */ + if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) <= Altos.ao_flight_landed) { + state = r.data16(0); + if (state > Altos.ao_flight_pad) + want_file = true; + } + + if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed) + done = true; + any_valid = true; + LogMini(r); + } catch (ParseException pe) { + if (parse_exception == null) + parse_exception = pe; + } + } + if (!any_valid) + done = true; + + CheckFile(false); + } + void CaptureTelemetry(AltosEepromChunk eechunk) throws IOException { } @@ -319,7 +362,7 @@ public class AltosEepromDownload implements Runnable { done = false; start = true; - if (flights.config_data.serial == 0) + if (flights.config_data.serial < 0) throw new IOException("no serial number found"); /* Reset per-capture variables */ @@ -336,7 +379,7 @@ public class AltosEepromDownload implements Runnable { state = 0; state_block = log.start_block; for (block = log.start_block; !done && block < log.end_block; block++) { - monitor.set_value(AltosLib.state_name(state), state, block - state_block); + monitor.set_value(AltosLib.state_name(state), state, block - state_block, block - log.start_block); AltosEepromChunk eechunk = new AltosEepromChunk(serial_line, block, block == log.start_block); @@ -371,9 +414,14 @@ public class AltosEepromDownload implements Runnable { extension = "science"; CaptureTeleScience(eechunk); break; - case AltosLib.AO_LOG_FORMAT_MEGAMETRUM: + case AltosLib.AO_LOG_FORMAT_TELEMEGA: extension = "mega"; CaptureMega(eechunk); + break; + case AltosLib.AO_LOG_FORMAT_MINI: + extension = "mini"; + CaptureMini(eechunk); + break; } } CheckFile(true);