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 AltosOrderedMegaRecord extends AltosEepromMega implements Comparable<AltosOrderedMegaRecord> {
-
- public int index;
-
- public AltosOrderedMegaRecord(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 AltosOrderedMegaRecord(int in_cmd, int in_tick, int in_a, int in_b, int in_index) {
- super(in_cmd, in_tick);
- a = in_a;
- b = in_b;
- index = in_index;
- }
-
- public String toString() {
- return String.format("%d.%d %04x %04x %04x",
- cmd, index, tick, a, b);
- }
-
- public int compareTo(AltosOrderedMegaRecord o) {
- int tick_diff = tick - o.tick;
- if (tick_diff != 0)
- return tick_diff;
- return index - o.index;
- }
-}
public class AltosEepromMegaIterable extends AltosRecordIterable {
}
}
- void update_state(AltosRecord state, AltosEepromMega record, EepromState eeprom) {
+ void update_state(AltosRecordMM state, AltosEepromMega record, EepromState eeprom) {
state.tick = record.tick;
switch (record.cmd) {
case AltosLib.AO_LOG_FLIGHT:
break;
case AltosLib.AO_LOG_SENSOR:
state.accel = record.accel();
- state.pres = baro.set(record.pres(), record.temp());
+ baro.set(record.pres(), record.temp());
+ state.pres = baro.pa;
state.temp = baro.cc;
state.imu = new AltosIMU();
state.imu.accel_x = record.accel_x();
eeprom.seen |= seen_sensor;
break;
case AltosLib.AO_LOG_TEMP_VOLT:
- state.batt = record.v_batt();
+ state.v_batt = record.v_batt();
+ state.v_pyro = record.v_pbatt();
+ for (int i = 0; i < AltosRecordMM.num_sense; i++)
+ state.sense[i] = record.sense(i);
eeprom.seen |= seen_temp_volt;
break;
- case AltosLib.AO_LOG_DEPLOY:
- state.drogue = record.a;
- state.main = record.b;
- eeprom.seen |= seen_deploy;
- has_ignite = true;
- break;
+//
+// case AltosLib.AO_LOG_DEPLOY:
+// state.drogue = record.a;
+// state.main = record.b;
+// eeprom.seen |= seen_deploy;
+// has_ignite = true;
+// break;
+
case AltosLib.AO_LOG_STATE:
state.state = record.state();
break;
LinkedList<AltosRecord> list = new LinkedList<AltosRecord>();
Iterator<AltosOrderedMegaRecord> iterator = records.iterator();
AltosOrderedMegaRecord record = null;
- AltosRecord state = new AltosRecord();
- boolean last_reported = false;
+ AltosRecordMM state = new AltosRecordMM();
+ //boolean last_reported = false;
EepromState eeprom = new EepromState();
state.state = AltosLib.ao_flight_pad;
while (iterator.hasNext()) {
record = iterator.next();
if ((eeprom.seen & seen_basic) == seen_basic && record.tick != state.tick) {
- AltosRecord r = new AltosRecord(state);
+ AltosRecordMM 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);
+ AltosRecordMM r = state.clone();
r.time = (r.tick - eeprom.boost_tick) / 100.0;
list.add(r);
return list;
try {
for (;;) {
- String line = AltosRecord.gets(input);
+ String line = AltosLib.gets(input);
if (line == null)
break;
AltosOrderedMegaRecord record = new AltosOrderedMegaRecord(line, index++, prev_tick, prev_tick_valid);
- if (record == null)
- break;
if (record.cmd == AltosLib.AO_LOG_INVALID)
continue;
prev_tick = record.tick;