summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-10-09 10:55:04 -0600
committerKeith Packard <keithp@keithp.com>2011-10-09 11:09:11 -0600
commit5c82b07471f017171c58a6968adf79901f46a987 (patch)
treee41009d4a56561a495d979dfbf6fd8c3f0a72e0c
parent636b7b368e67346b0796cd84fbfd71e10966d61f (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.java6
-rw-r--r--altosui/AltosTelemetryIterable.java8
-rw-r--r--altosui/AltosTelemetryRecordRaw.java6
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;