summaryrefslogtreecommitdiff
path: root/altoslib/AltosEepromFile.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/AltosEepromFile.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/AltosEepromFile.java')
-rw-r--r--altoslib/AltosEepromFile.java64
1 files changed, 62 insertions, 2 deletions
diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java
index 48d2543c..bcc7171e 100644
--- a/altoslib/AltosEepromFile.java
+++ b/altoslib/AltosEepromFile.java
@@ -21,11 +21,47 @@ import java.io.*;
import java.util.*;
import java.text.*;
-public class AltosEepromFile {
+class AltosEepromIterator implements Iterator<AltosState> {
+ AltosState state;
+ Iterator<AltosEeprom> body;
+ AltosEeprom next;
+ boolean seen;
+
+ public boolean hasNext() {
+ return !seen || body.hasNext();
+ }
+
+ public AltosState next() {
+ if (seen) {
+ AltosState n = state.clone();
+ AltosEeprom e = body.next();
+
+ e.update_state(n);
+ state = n;
+ }
+ seen = true;
+ return state;
+ }
+
+ public void remove () {
+ }
+
+ public AltosEepromIterator(AltosState start, Iterator<AltosEeprom> body) {
+ this.state = start;
+ this.body = body;
+ this.seen = false;
+ }
+}
+
+public class AltosEepromFile extends AltosStateIterable {
AltosEepromIterable headers;
AltosEepromIterable body;
+ public void write_comments(PrintStream out) {
+ headers.write(out);
+ }
+
public void write(PrintStream out) {
headers.write(out);
body.write(out);
@@ -38,14 +74,38 @@ public class AltosEepromFile {
switch (state.log_format) {
case AltosLib.AO_LOG_FORMAT_FULL:
+ body = new AltosEepromIterable(AltosEepromTM.read(input));
+ break;
case AltosLib.AO_LOG_FORMAT_TINY:
case AltosLib.AO_LOG_FORMAT_TELEMETRY:
case AltosLib.AO_LOG_FORMAT_TELESCIENCE:
case AltosLib.AO_LOG_FORMAT_TELEMEGA:
break;
- case AltosLib.AO_LOG_FORMAT_MINI:
+ case AltosLib.AO_LOG_FORMAT_TELEMINI:
+ case AltosLib.AO_LOG_FORMAT_EASYMINI:
body = new AltosEepromIterable(AltosEepromMini.read(input));
break;
}
}
+
+ int boost_tick (AltosState start) {
+ AltosState state = start.clone();
+ for (AltosEeprom eeprom : body) {
+ eeprom.update_state(state);
+ if (state.state >= AltosLib.ao_flight_boost)
+ return state.tick;
+ }
+ return 0;
+ }
+
+ public Iterator<AltosState> iterator() {
+
+ AltosState state = headers.state();
+ Iterator<AltosEeprom> i = body.iterator();
+
+ while (i.hasNext() && !state.valid())
+ i.next().update_state(state);
+ state.set_boost_tick(boost_tick(state));
+ return new AltosEepromIterator(state, i);
+ }
} \ No newline at end of file