altosuilib/micropeak: Add state markers to micropeak graph
[fw/altos] / altosui / AltosDataPointReader.java
index 4335421c21a96922e0ef0f3bf6f3026efcdcfb3f..0b4bd6c19f79a2a80f02bc7333c1e8907c55ac9f 100644 (file)
@@ -4,16 +4,14 @@
 
 package altosui;
 
-import java.io.IOException;
-import java.text.ParseException;
 import java.lang.UnsupportedOperationException;
 import java.util.NoSuchElementException;
 import java.util.Iterator;
+import org.altusmetrum.altoslib_1.*;
 
 class AltosDataPointReader implements Iterable<AltosDataPoint> {
     Iterator<AltosRecord> iter;
     AltosState state;
-    AltosRecord record;
     boolean has_gps;
     boolean has_accel;
     boolean has_ignite;
@@ -23,7 +21,7 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {
     public AltosDataPointReader(AltosRecordIterable reader) {
         this.iter = reader.iterator();
         this.state = null;
-       has_accel = reader.has_accel();
+       has_accel = true;
        has_gps = reader.has_gps();
        has_ignite = reader.has_ignite();
     }
@@ -31,34 +29,31 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {
     private void read_next_record() 
         throws NoSuchElementException
     {
-        record = iter.next();
-        state = new AltosState(record, state);
+        state = new AltosState(iter.next(), state);
     }
 
     private AltosDataPoint current_dp() {
-        assert this.record != null;
+        assert this.state != null;
         
         return new AltosDataPoint() {
-            public int version() { return record.version; }
-            public int serial() { return record.serial; }
-            public int flight() { return record.flight; }
-            public String callsign() { return record.callsign; }
-            public double time() { return record.time; }
-            public double rssi() { return record.rssi; }
+            public int version() { return state.data.version; }
+            public int serial() { return state.data.serial; }
+            public int flight() { return state.data.flight; }
+            public String callsign() { return state.data.callsign; }
+            public double time() { return state.data.time; }
+            public double rssi() { return state.data.rssi; }
 
-            public int state() { return record.state; }
-            public String state_name() { return record.state(); }
+            public int state() { return state.state; }
+            public String state_name() { return state.data.state(); }
 
-            public double acceleration() { return record.acceleration(); }
-            public double pressure() { return record.raw_pressure(); }
-            public double altitude() { return record.raw_altitude(); }
-           public double height() { return record.raw_height(); }
-            public double accel_speed() { return record.accel_speed(); }
-            public double baro_speed() { return state.baro_speed; }
-            public double temperature() { return record.temperature(); }
-            public double battery_voltage() { return record.battery_voltage(); }
-            public double drogue_voltage() { return record.drogue_voltage(); }
-            public double main_voltage() { return record.main_voltage(); }
+            public double acceleration() { return state.acceleration; }
+           public double height() { return state.height; }
+           public double speed() { return state.speed(); }
+            public double temperature() { return state.temperature; }
+            public double battery_voltage() { return state.battery; }
+            public double drogue_voltage() { return state.drogue_sense; }
+            public double main_voltage() { return state.main_sense; }
+           public boolean has_accel() { return true; } // return state.acceleration != AltosRecord.MISSING; }
         };
     }
 
@@ -68,10 +63,14 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {
                 throw new UnsupportedOperationException(); 
             }
             public boolean hasNext() {
+               if (state != null && state.state == Altos.ao_flight_landed)
+                   return false;
                 return iter.hasNext();
             }
             public AltosDataPoint next() {
-                read_next_record();
+               do {
+                   read_next_record();
+               } while (state.data.time < -1.0 && hasNext());
                 return current_dp();
             }
         };