use multimaint-merge to make Debian changelogs less ugly
[fw/altos] / altosui / AltosDataPointReader.java
index ee57d2ce811ef14116c7b73d6db4b84fb34afc31..c3aabb0c674721299d5202bfa0b0d5bb131db1a9 100644 (file)
@@ -14,12 +14,18 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {
     Iterator<AltosRecord> iter;
     AltosState state;
     AltosRecord record;
+    boolean has_gps;
+    boolean has_accel;
+    boolean has_ignite;
 
     final static int MISSING = AltosRecord.MISSING;
 
-    public AltosDataPointReader(Iterable<AltosRecord> reader) {
+    public AltosDataPointReader(AltosRecordIterable reader) {
         this.iter = reader.iterator();
         this.state = null;
+       has_accel = reader.has_accel();
+       has_gps = reader.has_gps();
+       has_ignite = reader.has_ignite();
     }
 
     private void read_next_record() 
@@ -46,13 +52,14 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {
             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 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 boolean has_accel() { return has_accel; }
         };
     }
 
@@ -62,10 +69,14 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {
                 throw new UnsupportedOperationException(); 
             }
             public boolean hasNext() {
+               if (record != null && record.state == Altos.ao_flight_landed)
+                   return false;
                 return iter.hasNext();
             }
             public AltosDataPoint next() {
-                read_next_record();
+               do {
+                   read_next_record();
+               } while (record.time < -1.0 && hasNext());
                 return current_dp();
             }
         };