From 58e7fccc24f933fd64e272207f783ca79002b7ba Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 13 Feb 2020 15:04:40 -0800 Subject: [PATCH] altoslib: Report whether GPS data contains new location/sat info Use this to limit time series additions to fresh data. Signed-off-by: Keith Packard --- altoslib/AltosDataListener.java | 2 +- altoslib/AltosEepromDownload.java | 4 +- altoslib/AltosEepromRecord.java | 2 +- altoslib/AltosEepromRecordGps.java | 2 +- altoslib/AltosFlightSeries.java | 99 ++++++++++++++------------- altoslib/AltosGPS.java | 2 +- altoslib/AltosReplayReader.java | 5 +- altoslib/AltosState.java | 4 +- altoslib/AltosTelemetryLegacy.java | 2 +- altoslib/AltosTelemetryLocation.java | 2 +- altoslib/AltosTelemetrySatellite.java | 2 +- 11 files changed, 67 insertions(+), 59 deletions(-) diff --git a/altoslib/AltosDataListener.java b/altoslib/AltosDataListener.java index 52aeb5d5..43b0df68 100644 --- a/altoslib/AltosDataListener.java +++ b/altoslib/AltosDataListener.java @@ -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); } diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java index f305ed33..9a1c0304 100644 --- a/altoslib/AltosEepromDownload.java +++ b/altoslib/AltosEepromDownload.java @@ -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 && diff --git a/altoslib/AltosEepromRecord.java b/altoslib/AltosEepromRecord.java index 22cb8f89..0e1c8d99 100644 --- a/altoslib/AltosEepromRecord.java +++ b/altoslib/AltosEepromRecord.java @@ -106,7 +106,7 @@ public abstract class AltosEepromRecord implements Comparable if (!AltosLib.is_gps_cmd(cmd())) { AltosGPS gps = listener.temp_gps(); if (gps != null) - listener.set_gps(gps); + listener.set_gps(gps, true, true); } } diff --git a/altoslib/AltosEepromRecordGps.java b/altoslib/AltosEepromRecordGps.java index e2fd7928..992893ae 100644 --- a/altoslib/AltosEepromRecordGps.java +++ b/altoslib/AltosEepromRecordGps.java @@ -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; } } diff --git a/altoslib/AltosFlightSeries.java b/altoslib/AltosFlightSeries.java index 3edabfcb..cfd8a0bf 100644 --- a/altoslib/AltosFlightSeries.java +++ b/altoslib/AltosFlightSeries.java @@ -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(); 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); + } } } diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 57ac4061..9c2009c5 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -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) { } } diff --git a/altoslib/AltosReplayReader.java b/altoslib/AltosReplayReader.java index 1960aac0..ec682bd4 100644 --- a/altoslib/AltosReplayReader.java +++ b/altoslib/AltosReplayReader.java @@ -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); } diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 3ab2c0eb..712f8e19 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -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(); diff --git a/altoslib/AltosTelemetryLegacy.java b/altoslib/AltosTelemetryLegacy.java index d2b29835..2b973784 100644 --- a/altoslib/AltosTelemetryLegacy.java +++ b/altoslib/AltosTelemetryLegacy.java @@ -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); } } diff --git a/altoslib/AltosTelemetryLocation.java b/altoslib/AltosTelemetryLocation.java index 25570bf9..f624571f 100644 --- a/altoslib/AltosTelemetryLocation.java +++ b/altoslib/AltosTelemetryLocation.java @@ -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); } } diff --git a/altoslib/AltosTelemetrySatellite.java b/altoslib/AltosTelemetrySatellite.java index 8213a43e..77a325a9 100644 --- a/altoslib/AltosTelemetrySatellite.java +++ b/altoslib/AltosTelemetrySatellite.java @@ -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); } } -- 2.30.2