X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosEepromRecordSet.java;h=94a4f643029afc3bf5a94623ca4be614712169b4;hp=911b90b9f9f471f5c26167eeb8ad93a7cc347629;hb=5ff0442702ee41179341240b1bbf290be89e1718;hpb=0641326842bffbf4b3ae69459ca540131cb64e59 diff --git a/altoslib/AltosEepromRecordSet.java b/altoslib/AltosEepromRecordSet.java index 911b90b9..94a4f643 100644 --- a/altoslib/AltosEepromRecordSet.java +++ b/altoslib/AltosEepromRecordSet.java @@ -12,47 +12,60 @@ * General Public License for more details. */ -package org.altusmetrum.altoslib_11; +package org.altusmetrum.altoslib_13; import java.io.*; import java.util.*; -public class AltosEepromRecordSet implements Iterable { - AltosEepromNew eeprom; +public class AltosEepromRecordSet implements AltosRecordSet { + AltosEeprom eeprom; TreeSet ordered; - AltosState start_state; + AltosCalData cal_data; + boolean valid; - class RecordIterator implements Iterator { - Iterator riterator; - AltosState state; - boolean started; + public AltosConfigData config_data() { + return eeprom.config_data(); + } + + private void init_cal_data() { + for (AltosEepromRecord record : ordered) { + if (record.cmd() == AltosLib.AO_LOG_FLIGHT) { + cal_data.set_tick(record.tick()); + cal_data.set_boost_tick(); + cal_data.set_state(AltosLib.ao_flight_pad); + break; + } + } + } - public boolean hasNext() { - return state == null || riterator.hasNext(); + public AltosCalData cal_data() { + if (cal_data == null) { + cal_data = new AltosCalData(config_data()); + init_cal_data(); } + return cal_data; + } - public AltosState next() { - if (state == null) - state = start_state.clone(); - else { - state = state.clone(); - AltosEepromRecord r = riterator.next(); - r.update_state(state); - } - return state; + public void capture_series(AltosDataListener listener) { + if (cal_data == null) { + cal_data(); + } else { + cal_data.reset(); + init_cal_data(); } + listener.set_log_format(config_data().log_format); - public RecordIterator() { - riterator = ordered.iterator(); - state = null; + for (AltosEepromRecord record : ordered) { + record.provide_data(listener, cal_data); } + listener.finish(); } - public Iterator iterator() { - return new RecordIterator(); + public boolean valid() { + return valid; } - public AltosEepromRecordSet(AltosEepromNew eeprom) { + public AltosEepromRecordSet(AltosEeprom eeprom) { this.eeprom = eeprom; AltosConfigData config_data = eeprom.config_data(); @@ -69,7 +82,10 @@ public class AltosEepromRecordSet implements Iterable { case AltosLib.AO_LOG_FORMAT_TELEMETRY: case AltosLib.AO_LOG_FORMAT_TELESCIENCE: case AltosLib.AO_LOG_FORMAT_TELEMEGA: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: record = new AltosEepromRecordMega(eeprom); break; case AltosLib.AO_LOG_FORMAT_TELEMETRUM: @@ -77,7 +93,8 @@ public class AltosEepromRecordSet implements Iterable { break; case AltosLib.AO_LOG_FORMAT_TELEMINI2: case AltosLib.AO_LOG_FORMAT_TELEMINI3: - case AltosLib.AO_LOG_FORMAT_EASYMINI: + case AltosLib.AO_LOG_FORMAT_EASYMINI1: + case AltosLib.AO_LOG_FORMAT_EASYMINI2: record = new AltosEepromRecordMini(eeprom); break; case AltosLib.AO_LOG_FORMAT_TELEGPS: @@ -86,20 +103,24 @@ public class AltosEepromRecordSet implements Iterable { case AltosLib.AO_LOG_FORMAT_TELEFIRETWO: record = new AltosEepromRecordFireTwo(eeprom); break; + case AltosLib.AO_LOG_FORMAT_MICROPEAK2: + record = new AltosEepromRecordMicroPeak2(eeprom); + break; } + ordered = new TreeSet(); + if (record == null) { System.out.printf("failed to parse log format %d\n", config_data.log_format); + valid = false; return; } - ordered = new TreeSet(); + valid = true; + int tick = 0; boolean first = true; - start_state = new AltosState(); - start_state.set_config_data(record.eeprom.config_data()); - - for (;;) { + do { int t = record.tick(); if (first) { @@ -112,13 +133,11 @@ public class AltosEepromRecordSet implements Iterable { } record.wide_tick = tick; ordered.add(record); - if (!record.hasNext()) - break; record = record.next(); - } + } while (record != null); } - public AltosEepromRecordSet(Reader input) throws IOException { - this(new AltosEepromNew(input)); + public AltosEepromRecordSet(InputStream input) throws IOException { + this(new AltosEeprom(input)); } }