altoslib: Report whether GPS data contains new location/sat info
authorKeith Packard <keithp@keithp.com>
Thu, 13 Feb 2020 23:04:40 +0000 (15:04 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 13 Feb 2020 23:43:35 +0000 (15:43 -0800)
Use this to limit time series additions to fresh data.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosDataListener.java
altoslib/AltosEepromDownload.java
altoslib/AltosEepromRecord.java
altoslib/AltosEepromRecordGps.java
altoslib/AltosFlightSeries.java
altoslib/AltosGPS.java
altoslib/AltosReplayReader.java
altoslib/AltosState.java
altoslib/AltosTelemetryLegacy.java
altoslib/AltosTelemetryLocation.java
altoslib/AltosTelemetrySatellite.java

index 52aeb5d5d8a692c55142c23a94f3b7e385504ffc..43b0df68dfa1c509786d580c64d5dbfee299dd4b 100644 (file)
@@ -118,7 +118,7 @@ public abstract class AltosDataListener {
        public abstract void set_apogee_voltage(double volts);
        public abstract void set_main_voltage(double volts);
 
-       public void set_gps(AltosGPS gps) {
+       public void set_gps(AltosGPS gps, boolean set_location, boolean set_sats) {
                AltosCalData cal_data = cal_data();
                cal_data.set_cal_gps(gps);
        }
index f305ed336ece9d7c9f68bc753deab5107c5dae65..9a1c0304d9e29be423a386b1ed07bee3e1078c23 100644 (file)
@@ -45,8 +45,8 @@ class AltosEepromNameData extends AltosDataListener {
                avoid_duplicate_files = true;
        }
 
-       public void set_gps(AltosGPS gps) {
-               super.set_gps(gps);
+       public void set_gps(AltosGPS gps, boolean set_location, boolean set_sats) {
+               super.set_gps(gps, set_location, set_sats);
                if (gps != null &&
                    gps.year != AltosLib.MISSING &&
                    gps.month != AltosLib.MISSING &&
index 22cb8f894b2f7d73ac5078032b09026304d01b06..0e1c8d99f6bef173e0f223d4aef4ac7804b44ed0 100644 (file)
@@ -106,7 +106,7 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
                if (!AltosLib.is_gps_cmd(cmd())) {
                        AltosGPS gps = listener.temp_gps();
                        if (gps != null)
-                               listener.set_gps(gps);
+                               listener.set_gps(gps, true, true);
                }
        }
 
index e2fd7928aa2b9ffdf590ec096b1b6b0d4bc7d939..992893ae05a783fd537b0158e8c7b2fa453cfe96 100644 (file)
@@ -123,7 +123,7 @@ public class AltosEepromRecordGps extends AltosEepromRecord {
                                if (gps.vdop < 0.8)
                                        gps.vdop += 2.56;
                        }
-                       listener.set_gps(gps);
+                       listener.set_gps(gps, true, true);
                        break;
                }
        }
index 3edabfcbfa8b90c7f18b0422c367afdad603becc..cfd8a0bff2bb79aa37b39b2b108d6e406bc3ebd5 100644 (file)
@@ -542,63 +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) {
-               super.set_gps(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);
+                       }
                }
        }
 
index 57ac4061dbadde59678979119add0c6a7aae8adf..9c2009c55c65319541e0e82829633d2494ec4ec9 100644 (file)
@@ -391,7 +391,7 @@ public class AltosGPS implements Cloneable {
                try {
                        AltosGPS gps = new AltosGPS(link, link.config_data());
                        if (gps != null)
-                               listener.set_gps(gps);
+                               listener.set_gps(gps, true, true);
                } catch (TimeoutException te) {
                }
        }
index 1960aac002269476d54a185511d1b9d54de2f8fe..ec682bd4757ea949c9dd402f9e5601e333a0568f 100644 (file)
@@ -70,7 +70,10 @@ class AltosReplay extends AltosDataListener implements Runnable {
        public void set_apogee_voltage(double volts) { state.set_apogee_voltage(volts); }
        public void set_main_voltage(double volts) { state.set_main_voltage(volts); }
 
-       public void set_gps(AltosGPS gps) { super.set_gps(gps); state.set_gps(gps); }
+       public void set_gps(AltosGPS gps, boolean set_location, boolean set_sats) {
+               super.set_gps(gps, set_location, set_sats);
+               state.set_gps(gps, set_location, set_sats);
+       }
 
        public void set_orient(double orient) { state.set_orient(orient); }
        public void set_gyro(double roll, double pitch, double yaw) { state.set_gyro(roll, pitch, yaw); }
index 3ab2c0eb5dd4a4fdcefa95b4c60c7cb3922fdfdb..712f8e19dd4e566c11c0628b8c6175b323b4583b 100644 (file)
@@ -884,8 +884,8 @@ public class AltosState extends AltosDataListener {
                received_time = ms;
        }
 
-       public void set_gps(AltosGPS gps) {
-               super.set_gps(gps);
+       public void set_gps(AltosGPS gps, boolean set_location, boolean set_sats) {
+               super.set_gps(gps, set_location, set_sats);
                if (gps != null) {
                        this.gps = gps;
                        update_gps();
index d2b29835616432bcf5b0ccbd54b217b66e7d42a1..2b973784102046a76a2407874ccd9a5fc51d2d90 100644 (file)
@@ -568,6 +568,6 @@ public class AltosTelemetryLegacy extends AltosTelemetry {
                listener.set_apogee_voltage(AltosConvert.cc_igniter_to_voltage(apogee));
                listener.set_main_voltage(AltosConvert.cc_igniter_to_voltage(main));
                if (gps != null)
-                       listener.set_gps(gps);
+                       listener.set_gps(gps, true, true);
        }
 }
index 25570bf934f8c923d3fed8da473eff1852136408..f624571f97631369257b800abf37343623ce8442 100644 (file)
@@ -78,6 +78,6 @@ public class AltosTelemetryLocation extends AltosTelemetryStandard {
                        gps.course = course() * 2;
                        gps.climb_rate = climb_rate() * 1.0e-2;
                }
-               listener.set_gps(gps);
+               listener.set_gps(gps, true, false);
        }
 }
index 8213a43eda437694d44fb81e5991c1d33fe40f00..77a325a98fa4093202c472e1972cb66fdf850503 100644 (file)
@@ -52,6 +52,6 @@ public class AltosTelemetrySatellite extends AltosTelemetryStandard {
                AltosGPS        gps = listener.make_temp_gps(true);
 
                gps.cc_gps_sat = sats();
-               listener.set_gps(gps);
+               listener.set_gps(gps, false, true);
        }
 }