X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosEepromIterable.java;h=986b7a2cacf2f32f5e477b16a3933c43d42677e3;hp=f1397c7bf5430136e92c6f241cdfa9c2ff6ae739;hb=43e646657502f6162fa02f37fd2bd5aa3e29a1a8;hpb=69e6df07976a56b49e07c242cd6e5b2cbd2a578d diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index f1397c7b..986b7a2c 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -20,62 +20,10 @@ package org.altusmetrum.AltosLib; import java.io.*; import java.util.*; import java.text.*; -import java.util.prefs.*; -import java.util.concurrent.LinkedBlockingQueue; - -/* - * AltosRecords with an index field so they can be sorted by tick while preserving - * the original ordering for elements with matching ticks - */ -class AltosOrderedRecord extends AltosEepromRecord implements Comparable { - - public int index; - - public AltosOrderedRecord(String line, int in_index, int prev_tick, boolean prev_tick_valid) - throws ParseException { - super(line); - if (prev_tick_valid) { - tick |= (prev_tick & ~0xffff); - if (tick < prev_tick) { - if (prev_tick - tick > 0x8000) - tick += 0x10000; - } else { - if (tick - prev_tick > 0x8000) - tick -= 0x10000; - } - } - index = in_index; - } - - public AltosOrderedRecord(int in_cmd, int in_tick, int in_a, int in_b, int in_index) { - super(in_cmd, in_tick, in_a, in_b); - index = in_index; - } - - public String toString() { - return String.format("%d.%d %04x %04x %04x", - cmd, index, tick, a, b); - } - - public int compareTo(AltosOrderedRecord o) { - int tick_diff = tick - o.tick; - if (tick_diff != 0) - return tick_diff; - return index - o.index; - } -} public class AltosEepromIterable extends AltosRecordIterable { - static final int seen_flight = 1; - static final int seen_sensor = 2; - static final int seen_temp_volt = 4; - static final int seen_deploy = 8; - static final int seen_gps_time = 16; - static final int seen_gps_lat = 32; - static final int seen_gps_lon = 64; - - static final int seen_basic = seen_flight|seen_sensor; + static final int seen_basic = AltosRecord.seen_flight|AltosRecord.seen_sensor; boolean has_accel; boolean has_gps; @@ -104,11 +52,11 @@ public class AltosEepromIterable extends AltosRecordIterable { } } - void update_state(AltosRecord state, AltosEepromRecord record, EepromState eeprom) { + void update_state(AltosRecordTM state, AltosEepromRecord record, EepromState eeprom) { state.tick = record.tick; switch (record.cmd) { case AltosLib.AO_LOG_FLIGHT: - eeprom.seen |= seen_flight; + eeprom.seen |= AltosRecord.seen_flight; state.ground_accel = record.a; state.flight_accel = record.a; state.flight = record.b; @@ -126,10 +74,10 @@ public class AltosEepromIterable extends AltosRecordIterable { state.flight_pres = (state.flight_pres * 15 + state.pres) / 16; } state.flight_accel = (state.flight_accel * 15 + state.accel) / 16; - if ((eeprom.seen & seen_sensor) == 0) + if ((eeprom.seen & AltosRecord.seen_sensor) == 0) eeprom.sensor_tick = record.tick - 1; state.flight_vel += (state.accel_plus_g - state.accel) * (record.tick - eeprom.sensor_tick); - eeprom.seen |= seen_sensor; + eeprom.seen |= AltosRecord.seen_sensor; eeprom.sensor_tick = record.tick; has_accel = true; break; @@ -140,17 +88,17 @@ public class AltosEepromIterable extends AltosRecordIterable { eeprom.n_pad_samples++; state.ground_pres = state.pres; } - eeprom.seen |= seen_sensor; + eeprom.seen |= AltosRecord.seen_sensor; break; case AltosLib.AO_LOG_TEMP_VOLT: state.temp = record.a; state.batt = record.b; - eeprom.seen |= seen_temp_volt; + eeprom.seen |= AltosRecord.seen_temp_volt; break; case AltosLib.AO_LOG_DEPLOY: state.drogue = record.a; state.main = record.b; - eeprom.seen |= seen_deploy; + eeprom.seen |= AltosRecord.seen_deploy; has_ignite = true; break; case AltosLib.AO_LOG_STATE: @@ -158,6 +106,7 @@ public class AltosEepromIterable extends AltosRecordIterable { break; case AltosLib.AO_LOG_GPS_TIME: eeprom.gps_tick = state.tick; + eeprom.seen |= AltosRecord.seen_gps_time; AltosGPS old = state.gps; state.gps = new AltosGPS(); @@ -180,10 +129,12 @@ public class AltosEepromIterable extends AltosRecordIterable { has_gps = true; break; case AltosLib.AO_LOG_GPS_LAT: + eeprom.seen |= AltosRecord.seen_gps_lat; int lat32 = record.a | (record.b << 16); state.gps.lat = (double) lat32 / 1e7; break; case AltosLib.AO_LOG_GPS_LON: + eeprom.seen |= AltosRecord.seen_gps_lon; int lon32 = record.a | (record.b << 16); state.gps.lon = (double) lon32 / 1e7; break; @@ -237,13 +188,14 @@ public class AltosEepromIterable extends AltosRecordIterable { LinkedList list = new LinkedList(); Iterator iterator = records.iterator(); AltosOrderedRecord record = null; - AltosRecord state = new AltosRecord(); - boolean last_reported = false; + AltosRecordTM state = new AltosRecordTM(); + //boolean last_reported = false; EepromState eeprom = new EepromState(); state.state = AltosLib.ao_flight_pad; state.accel_plus_g = 15758; state.accel_minus_g = 16294; + state.flight_vel = 0; /* Pull in static data from the flight and gps_date records */ if (flight_record != null) @@ -254,13 +206,13 @@ public class AltosEepromIterable extends AltosRecordIterable { while (iterator.hasNext()) { record = iterator.next(); if ((eeprom.seen & seen_basic) == seen_basic && record.tick != state.tick) { - AltosRecord r = new AltosRecord(state); + AltosRecordTM r = state.clone(); r.time = (r.tick - eeprom.boost_tick) / 100.0; list.add(r); } update_state(state, record, eeprom); } - AltosRecord r = new AltosRecord(state); + AltosRecordTM r = state.clone(); r.time = (r.tick - eeprom.boost_tick) / 100.0; list.add(r); return list; @@ -318,28 +270,28 @@ public class AltosEepromIterable extends AltosRecordIterable { case AltosLib.AO_LOG_SOFTWARE_VERSION: out.printf ("# Software version: %s\n", record.data); break; - case Altos.AO_LOG_BARO_RESERVED: + case AltosLib.AO_LOG_BARO_RESERVED: out.printf ("# Baro reserved: %d\n", record.a); break; - case Altos.AO_LOG_BARO_SENS: + case AltosLib.AO_LOG_BARO_SENS: out.printf ("# Baro sens: %d\n", record.a); break; - case Altos.AO_LOG_BARO_OFF: + case AltosLib.AO_LOG_BARO_OFF: out.printf ("# Baro off: %d\n", record.a); break; - case Altos.AO_LOG_BARO_TCS: + case AltosLib.AO_LOG_BARO_TCS: out.printf ("# Baro tcs: %d\n", record.a); break; - case Altos.AO_LOG_BARO_TCO: + case AltosLib.AO_LOG_BARO_TCO: out.printf ("# Baro tco: %d\n", record.a); break; - case Altos.AO_LOG_BARO_TREF: + case AltosLib.AO_LOG_BARO_TREF: out.printf ("# Baro tref: %d\n", record.a); break; - case Altos.AO_LOG_BARO_TEMPSENS: + case AltosLib.AO_LOG_BARO_TEMPSENS: out.printf ("# Baro tempsens: %d\n", record.a); break; - case Altos.AO_LOG_BARO_CRC: + case AltosLib.AO_LOG_BARO_CRC: out.printf ("# Baro crc: %d\n", record.a); break; } @@ -399,12 +351,10 @@ public class AltosEepromIterable extends AltosRecordIterable { try { for (;;) { - String line = AltosRecord.gets(input); + String line = AltosLib.gets(input); if (line == null) break; AltosOrderedRecord record = new AltosOrderedRecord(line, index++, prev_tick, prev_tick_valid); - if (record == null) - break; if (record.cmd == AltosLib.AO_LOG_INVALID) continue; prev_tick = record.tick;