diff options
author | Keith Packard <keithp@keithp.com> | 2011-10-09 10:55:04 -0600 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-10-09 11:09:11 -0600 |
commit | 5c82b07471f017171c58a6968adf79901f46a987 (patch) | |
tree | e41009d4a56561a495d979dfbf6fd8c3f0a72e0c | |
parent | 636b7b368e67346b0796cd84fbfd71e10966d61f (diff) |
altosui: Deal with telem data that goes backwards in time
The new telemetry stuff can send packets with older timestamps, so
sort telem packets read from disk to create an in-order record of the flight.
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | altosui/AltosRecord.java | 6 | ||||
-rw-r--r-- | altosui/AltosTelemetryIterable.java | 8 | ||||
-rw-r--r-- | altosui/AltosTelemetryRecordRaw.java | 6 |
3 files changed, 11 insertions, 9 deletions
diff --git a/altosui/AltosRecord.java b/altosui/AltosRecord.java index ce6d86ab..486c96b2 100644 --- a/altosui/AltosRecord.java +++ b/altosui/AltosRecord.java @@ -22,7 +22,7 @@ import java.text.*; import java.util.HashMap; import java.io.*; -public class AltosRecord { +public class AltosRecord implements Comparable <AltosRecord> { final static int MISSING = 0x7fffffff; static final int seen_flight = 1; @@ -243,6 +243,10 @@ public class AltosRecord { return null; } + public int compareTo(AltosRecord o) { + return tick - o.tick; + } + public AltosRecord(AltosRecord old) { version = old.version; seen = old.seen; diff --git a/altosui/AltosTelemetryIterable.java b/altosui/AltosTelemetryIterable.java index 1a31b365..278cbfb7 100644 --- a/altosui/AltosTelemetryIterable.java +++ b/altosui/AltosTelemetryIterable.java @@ -22,7 +22,7 @@ import java.util.*; import java.text.*; public class AltosTelemetryIterable extends AltosRecordIterable { - LinkedList<AltosRecord> records; + TreeSet<AltosRecord> records; public Iterator<AltosRecord> iterator () { return records.iterator(); @@ -41,7 +41,7 @@ public class AltosTelemetryIterable extends AltosRecordIterable { int boost_tick = 0; AltosRecord previous = null; - records = new LinkedList<AltosRecord> (); + records = new TreeSet<AltosRecord> (); try { for (;;) { @@ -56,8 +56,8 @@ public class AltosTelemetryIterable extends AltosRecordIterable { if (records.isEmpty()) { current_tick = record.tick; } else { - int tick = record.tick | (current_tick & ~ 0xffff); - if (tick < current_tick - 0x1000) + int tick = record.tick; + while (tick < current_tick - 0x1000) tick += 0x10000; current_tick = tick; record.tick = current_tick; diff --git a/altosui/AltosTelemetryRecordRaw.java b/altosui/AltosTelemetryRecordRaw.java index 39b2ba07..fb2b495c 100644 --- a/altosui/AltosTelemetryRecordRaw.java +++ b/altosui/AltosTelemetryRecordRaw.java @@ -143,11 +143,9 @@ public class AltosTelemetryRecordRaw implements AltosTelemetryRecord { public AltosRecord update_state(AltosRecord previous) { AltosRecord next; - if (previous != null) { + if (previous != null) next = new AltosRecord(previous); - while (tick < previous.tick) - tick += 65536; - } else + else next = new AltosRecord(); next.serial = serial; next.tick = tick; |