X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosFlightStats.java;h=ea1a9675aba8c818c814481bb45e6e545568cae0;hb=refs%2Fheads%2Ffake-flight;hp=6f8732cf5c25af479793e670fb256b6dc3312cfe;hpb=c8dbcaf69cd538a31ab6e2b568237ae7c8656a9a;p=fw%2Faltos diff --git a/altoslib/AltosFlightStats.java b/altoslib/AltosFlightStats.java index 6f8732cf..ea1a9675 100644 --- a/altoslib/AltosFlightStats.java +++ b/altoslib/AltosFlightStats.java @@ -26,6 +26,7 @@ public class AltosFlightStats { public double max_speed; public double max_acceleration; public double[] state_speed = new double[AltosLib.ao_flight_invalid + 1]; + public double[] state_enter_speed = new double[AltosLib.ao_flight_invalid + 1]; public double[] state_accel = new double[AltosLib.ao_flight_invalid + 1]; public double[] state_time = new double[AltosLib.ao_flight_invalid + 1]; public String product; @@ -131,6 +132,8 @@ public class AltosFlightStats { private void add_times(AltosFlightSeries series, int state, double start_time, double end_time) { double delta_time = end_time - start_time; if (0 <= state && state <= AltosLib.ao_flight_invalid && delta_time > 0) { + if (state_enter_speed[state] == AltosLib.MISSING) + state_enter_speed[state] = series.speed_series.value(start_time); speeds[state].value += series.speed_series.average(start_time, end_time) * delta_time; speeds[state].time += delta_time; accels[state].value += series.accel_series.average(start_time, end_time) * delta_time; @@ -192,6 +195,7 @@ public class AltosFlightStats { for (int s = 0; s < AltosLib.ao_flight_invalid + 1; s++) { state_speed[s] = AltosLib.MISSING; + state_enter_speed[s] = AltosLib.MISSING; state_accel[s] = AltosLib.MISSING; state_time[s] = 0; speeds[s] = new AltosTimeValue(0, 0); @@ -208,8 +212,11 @@ public class AltosFlightStats { add_times(series, (int) prev.value, prev.time, state.time); prev = state; } - if (prev != null) - add_times(series, (int) prev.value, prev.time, series.accel_series.last().time); + if (prev != null) { + AltosTimeValue last_accel = series.accel_series.last(); + if (last_accel != null) + add_times(series, (int) prev.value, prev.time, last_accel.time); + } } for (int s = 0; s <= AltosLib.ao_flight_invalid; s++) { @@ -241,14 +248,15 @@ public class AltosFlightStats { has_gps = true; lat = pad_lat = gps.lat; lon = pad_lon = gps.lon; - for (AltosGPSTimeValue gtv : series.gps_series) { - gps = gtv.gps; - if (gps.locked && gps.nsat >= 4) { - lat = gps.lat; - lon = gps.lon; + if (series.gps_series != null) { + for (AltosGPSTimeValue gtv : series.gps_series) { + gps = gtv.gps; + if (gps.locked && gps.nsat >= 4) { + lat = gps.lat; + lon = gps.lon; + } } } - } max_height = AltosLib.MISSING;