summaryrefslogtreecommitdiff
path: root/altoslib/AltosEepromIterable.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-08-29 19:24:51 -0500
committerKeith Packard <keithp@keithp.com>2013-08-29 19:24:51 -0500
commitde8d9c5630ae46378c50faf97f7d2e97fe139e30 (patch)
treee8e41e4186c5d27e1a5184d915bdb9f08926fa7a /altoslib/AltosEepromIterable.java
parentce1378385ef273010498e81c205f42d8e32c7dc1 (diff)
altoslib, altosui: Restructured state management now does TM eeprom files
Removed uses of AltosRecord from AltosState, now just need to rewrite the other AltosState changing code to match Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosEepromIterable.java')
-rw-r--r--altoslib/AltosEepromIterable.java72
1 files changed, 70 insertions, 2 deletions
diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java
index 470a7a8a..8e6a2313 100644
--- a/altoslib/AltosEepromIterable.java
+++ b/altoslib/AltosEepromIterable.java
@@ -21,6 +21,74 @@ import java.io.*;
import java.util.*;
import java.text.*;
+class AltosEepromOrdered implements Comparable<AltosEepromOrdered> {
+ AltosEeprom eeprom;
+ int index;
+ int tick;
+
+ int cmdi() {
+ if (eeprom.cmd == AltosLib.AO_LOG_FLIGHT)
+ return 0;
+ return 1;
+ }
+
+ public int compareTo(AltosEepromOrdered o) {
+ int cmd_diff = cmdi() - o.cmdi();
+
+ if (cmd_diff != 0)
+ return cmd_diff;
+
+ int tick_diff = tick - o.tick;
+
+ if (tick_diff != 0)
+ return tick_diff;
+ return index - o.index;
+ }
+
+ AltosEepromOrdered (AltosEeprom eeprom, int index, int tick) {
+ this.eeprom = eeprom;
+ this.index = index;
+ this.tick = tick;
+ }
+}
+
+class AltosEepromOrderedIterator implements Iterator<AltosEeprom> {
+ TreeSet<AltosEepromOrdered> olist;
+ Iterator<AltosEepromOrdered> oiterator;
+
+ public AltosEepromOrderedIterator(Iterable<AltosEeprom> eeproms) {
+ olist = new TreeSet<AltosEepromOrdered>();
+
+ int tick = 0;
+ int index = 0;
+ boolean first = true;
+
+ for (AltosEeprom e : eeproms) {
+ int t = e.tick;
+ if (first)
+ tick = t;
+ else {
+ while (t < tick - 32767)
+ t += 65536;
+ tick = t;
+ }
+ olist.add(new AltosEepromOrdered(e, index++, tick));
+ }
+ oiterator = olist.iterator();
+ }
+
+ public boolean hasNext() {
+ return oiterator.hasNext();
+ }
+
+ public AltosEeprom next() {
+ return oiterator.next().eeprom;
+ }
+
+ public void remove () {
+ }
+}
+
public class AltosEepromIterable implements Iterable<AltosEeprom> {
public LinkedList<AltosEeprom> eeproms;
@@ -30,7 +98,7 @@ public class AltosEepromIterable implements Iterable<AltosEeprom> {
}
public AltosState state() {
- AltosState state = new AltosState(null);
+ AltosState state = new AltosState();
for (AltosEeprom header : eeproms)
header.update_state(state);
@@ -44,6 +112,6 @@ public class AltosEepromIterable implements Iterable<AltosEeprom> {
public Iterator<AltosEeprom> iterator() {
if (eeproms == null)
eeproms = new LinkedList<AltosEeprom>();
- return eeproms.iterator();
+ return new AltosEepromOrderedIterator(eeproms);
}
} \ No newline at end of file