altoslib: Report whether GPS data contains new location/sat info
[fw/altos] / altoslib / AltosFlightSeries.java
index 2eaf80330d4d4b6b8b6c087981e0da599d1c6824..cfd8a0bff2bb79aa37b39b2b108d6e406bc3ebd5 100644 (file)
@@ -12,7 +12,7 @@
  * General Public License for more details.
  */
 
-package org.altusmetrum.altoslib_12;
+package org.altusmetrum.altoslib_13;
 
 import java.util.*;
 
@@ -257,6 +257,15 @@ public class AltosFlightSeries extends AltosDataListener {
 
        public AltosTimeSeries height_series;
 
+       public double max_height = AltosLib.MISSING;
+
+       public  void set_min_pressure(double pa) {
+               double ground_altitude = cal_data().ground_altitude;
+               if (ground_altitude != AltosLib.MISSING)
+                       max_height = AltosConvert.pressure_to_altitude(pa) -
+                               ground_altitude;
+       }
+
        public static final String height_name = "Height";
 
        public  void set_pressure(double pa) {
@@ -382,16 +391,18 @@ public class AltosFlightSeries extends AltosDataListener {
                if (accel_ground_across == AltosLib.MISSING)
                        return;
 
-               if (cal_data().pad_orientation == AltosLib.MISSING)
+               AltosCalData cal_data = cal_data();
+
+               if (cal_data.pad_orientation == AltosLib.MISSING)
                        return;
 
-               if (cal_data().accel_zero_across == AltosLib.MISSING)
+               if (cal_data.accel_zero_across == AltosLib.MISSING)
                        return;
 
-               AltosRotation rotation = new AltosRotation(AltosIMU.convert_accel(accel_ground_across - cal_data().accel_zero_across),
-                                                          AltosIMU.convert_accel(accel_ground_through - cal_data().accel_zero_through),
-                                                          AltosIMU.convert_accel(accel_ground_along - cal_data().accel_zero_along),
-                                                          cal_data().pad_orientation);
+               AltosRotation rotation = new AltosRotation(accel_ground_across,
+                                                          accel_ground_through,
+                                                          accel_ground_along,
+                                                          cal_data.pad_orientation);
                double prev_time = ground_time;
 
                orient_series = add_series(orient_name, AltosConvert.orient);
@@ -531,62 +542,68 @@ public class AltosFlightSeries extends AltosDataListener {
        public static final String gps_vdop_name = "GPS Vertical Dilution of Precision";
        public static final String gps_hdop_name = "GPS Horizontal Dilution of Precision";
 
-       public void set_gps(AltosGPS gps) {
+       public void set_gps(AltosGPS gps, boolean new_location, boolean new_sats) {
+               super.set_gps(gps, new_location, new_sats);
+               AltosCalData cal_data = cal_data();
                if (gps_series == null)
                        gps_series = new ArrayList<AltosGPSTimeValue>();
                gps_series.add(new AltosGPSTimeValue(time(), gps));
 
-               if (sats_in_soln == null) {
-                       sats_in_soln = add_series(sats_in_soln_name, null);
-               }
-               sats_in_soln.add(time(), gps.nsat);
-               if (gps.pdop != AltosLib.MISSING) {
-                       if (gps_pdop == null)
-                               gps_pdop = add_series(gps_pdop_name, null);
-                       gps_pdop.add(time(), gps.pdop);
-               }
-               if (gps.hdop != AltosLib.MISSING) {
-                       if (gps_hdop == null)
-                               gps_hdop = add_series(gps_hdop_name, null);
-                       gps_hdop.add(time(), gps.hdop);
-               }
-               if (gps.vdop != AltosLib.MISSING) {
-                       if (gps_vdop == null)
-                               gps_vdop = add_series(gps_vdop_name, null);
-                       gps_vdop.add(time(), gps.vdop);
-               }
-               if (gps.locked) {
-                       if (gps.alt != AltosLib.MISSING) {
-                               if (gps_altitude == null)
-                                       gps_altitude = add_series(gps_altitude_name, AltosConvert.height);
-                               gps_altitude.add(time(), gps.alt);
+               if (new_location) {
+                       if (sats_in_soln == null) {
+                               sats_in_soln = add_series(sats_in_soln_name, null);
                        }
-                       if (gps.ground_speed != AltosLib.MISSING) {
-                               if (gps_ground_speed == null)
-                                       gps_ground_speed = add_series(gps_ground_speed_name, AltosConvert.speed);
-                               gps_ground_speed.add(time(), gps.ground_speed);
+                       sats_in_soln.add(time(), gps.nsat);
+                       if (gps.pdop != AltosLib.MISSING) {
+                               if (gps_pdop == null)
+                                       gps_pdop = add_series(gps_pdop_name, null);
+                               gps_pdop.add(time(), gps.pdop);
                        }
-                       if (gps.climb_rate != AltosLib.MISSING) {
-                               if (gps_ascent_rate == null)
-                                       gps_ascent_rate = add_series(gps_ascent_rate_name, AltosConvert.speed);
-                               gps_ascent_rate.add(time(), gps.climb_rate);
+                       if (gps.hdop != AltosLib.MISSING) {
+                               if (gps_hdop == null)
+                                       gps_hdop = add_series(gps_hdop_name, null);
+                               gps_hdop.add(time(), gps.hdop);
                        }
-                       if (gps.course != AltosLib.MISSING) {
-                               if (gps_course == null)
-                                       gps_course = add_series(gps_course_name, null);
-                               gps_course.add(time(), gps.course);
+                       if (gps.vdop != AltosLib.MISSING) {
+                               if (gps_vdop == null)
+                                       gps_vdop = add_series(gps_vdop_name, null);
+                               gps_vdop.add(time(), gps.vdop);
                        }
-                       if (gps.ground_speed != AltosLib.MISSING && gps.climb_rate != AltosLib.MISSING) {
-                               if (gps_speed == null)
-                                       gps_speed = add_series(gps_speed_name, null);
-                               gps_speed.add(time(), Math.sqrt(gps.ground_speed * gps.ground_speed +
-                                                               gps.climb_rate * gps.climb_rate));
+                       if (gps.locked) {
+                               if (gps.alt != AltosLib.MISSING) {
+                                       if (gps_altitude == null)
+                                               gps_altitude = add_series(gps_altitude_name, AltosConvert.height);
+                                       gps_altitude.add(time(), gps.alt);
+                               }
+                               if (gps.ground_speed != AltosLib.MISSING) {
+                                       if (gps_ground_speed == null)
+                                               gps_ground_speed = add_series(gps_ground_speed_name, AltosConvert.speed);
+                                       gps_ground_speed.add(time(), gps.ground_speed);
+                               }
+                               if (gps.climb_rate != AltosLib.MISSING) {
+                                       if (gps_ascent_rate == null)
+                                               gps_ascent_rate = add_series(gps_ascent_rate_name, AltosConvert.speed);
+                                       gps_ascent_rate.add(time(), gps.climb_rate);
+                               }
+                               if (gps.course != AltosLib.MISSING) {
+                                       if (gps_course == null)
+                                               gps_course = add_series(gps_course_name, null);
+                                       gps_course.add(time(), gps.course);
+                               }
+                               if (gps.ground_speed != AltosLib.MISSING && gps.climb_rate != AltosLib.MISSING) {
+                                       if (gps_speed == null)
+                                               gps_speed = add_series(gps_speed_name, null);
+                                       gps_speed.add(time(), Math.sqrt(gps.ground_speed * gps.ground_speed +
+                                                                       gps.climb_rate * gps.climb_rate));
+                               }
                        }
                }
-               if (gps.cc_gps_sat != null) {
-                       if (sats_in_view == null)
-                               sats_in_view = add_series(sats_in_view_name, null);
-                       sats_in_view.add(time(), gps.cc_gps_sat.length);
+               if (new_sats) {
+                       if (gps.cc_gps_sat != null) {
+                               if (sats_in_view == null)
+                                       sats_in_view = add_series(sats_in_view_name, null);
+                               sats_in_view.add(time(), gps.cc_gps_sat.length);
+                       }
                }
        }