altosdroid: Deal with AltosState changes
[fw/altos] / altoslib / AltosFlightSeries.java
index 0eea34b7e72ac996ac5a5d78beb308c35c2774c5..5cf552fcf00d178048f56fbafe3f2815b279820e 100644 (file)
@@ -18,7 +18,7 @@ import java.util.*;
 
 public class AltosFlightSeries extends AltosDataListener {
 
-       public ArrayList<AltosTimeSeries> series;
+       public ArrayList<AltosTimeSeries> series = new ArrayList<AltosTimeSeries>();
 
        public int[] indices() {
                int[] indices = new int[series.size()];
@@ -86,6 +86,14 @@ public class AltosFlightSeries extends AltosDataListener {
                return AltosLib.MISSING;
        }
 
+       public double value(String name, double time) {
+               for (AltosTimeSeries s : series) {
+                       if (s.label.equals(name))
+                               return s.value(time);
+               }
+               return AltosLib.MISSING;
+       }
+
        public double value_before(String name, double time) {
                for (AltosTimeSeries s : series) {
                        if (s.label.equals(name))
@@ -136,7 +144,6 @@ public class AltosFlightSeries extends AltosDataListener {
                        state_series = add_series(state_name, AltosConvert.state_name);
                else if (this.state == state)
                        return;
-               System.out.printf("state %s\n", AltosLib.state_name(state));
                this.state = state;
                state_series.add(time(), state);
        }
@@ -147,7 +154,6 @@ public class AltosFlightSeries extends AltosDataListener {
 
        public void set_acceleration(double acceleration) {
                if (accel_series == null) {
-                       System.out.printf("set acceleration %g\n", acceleration);
                        accel_series = add_series(accel_name, AltosConvert.accel);
                }
                accel_series.add(time(), acceleration);
@@ -208,8 +214,9 @@ public class AltosFlightSeries extends AltosDataListener {
                altitude_series.add(time(), altitude);
        }
 
-       private void compute_height(double ground_altitude) {
-               if (height_series == null) {
+       private void compute_height() {
+               double ground_altitude = cal_data.ground_altitude;
+               if (height_series == null && ground_altitude != AltosLib.MISSING && altitude_series != null) {
                        height_series = add_series(height_name, AltosConvert.height);
                        for (AltosTimeValue alt : altitude_series)
                                height_series.add(alt.time, alt.value - ground_altitude);
@@ -221,10 +228,8 @@ public class AltosFlightSeries extends AltosDataListener {
        public static final String speed_name = "Speed";
 
        private void compute_speed() {
-               if (speed_series != null) {
-                       System.out.printf("speed series already made\n");
+               if (speed_series != null)
                        return;
-               }
 
                AltosTimeSeries alt_speed_series = null;
                AltosTimeSeries accel_speed_series = null;
@@ -235,8 +240,6 @@ public class AltosFlightSeries extends AltosDataListener {
 
                        alt_speed_series = make_series(speed_name, AltosConvert.speed);
                        temp_series.filter(alt_speed_series, 10.0);
-               } else {
-                       System.out.printf("no altitude series\n");
                }
                if (accel_series != null) {
                        AltosTimeSeries temp_series = make_series(speed_name, AltosConvert.speed);
@@ -244,8 +247,6 @@ public class AltosFlightSeries extends AltosDataListener {
 
                        accel_speed_series = make_series(speed_name, AltosConvert.speed);
                        temp_series.filter(accel_speed_series, 0.1);
-               } else {
-                       System.out.printf("no accel series\n");
                }
 
                if (alt_speed_series != null && accel_speed_series != null) {
@@ -277,11 +278,8 @@ public class AltosFlightSeries extends AltosDataListener {
                } else if (accel_speed_series != null) {
                        speed_series = accel_speed_series;
                }
-               if (speed_series != null) {
+               if (speed_series != null)
                        add_series(speed_series);
-                       System.out.printf("speed series for %s set to %s\n", this.toString(), speed_series.toString());
-               } else
-                       System.out.printf("didn't manage to make speed series\n");
        }
 
        AltosTimeSeries kalman_height_series, kalman_speed_series, kalman_accel_series;
@@ -574,27 +572,18 @@ public class AltosFlightSeries extends AltosDataListener {
        public void set_companion(AltosCompanion companion) {
        }
 
-       public void fill_in() {
-               System.out.printf("fill in %s\n", this.toString());
+       public void finish() {
                compute_speed();
                compute_accel();
-               if (cal_data.ground_altitude != AltosLib.MISSING)
-                       compute_height(cal_data.ground_altitude);
-       }
-
-       public void init() {
-               time = AltosLib.MISSING;
-               series = new ArrayList<AltosTimeSeries>();
+               compute_height();
        }
 
        public AltosTimeSeries[] series() {
-               fill_in();
+               finish();
                return series.toArray(new AltosTimeSeries[0]);
        }
 
        public AltosFlightSeries(AltosCalData cal_data) {
                super(cal_data);
-               System.out.printf("new flight series %s\n", this.toString());
-               init();
        }
 }