X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosState.java;h=e0d9bb1fc394dc1cb42b495bc03e755d135968bb;hb=f6661cc015e1a92450dc3eede97d66005f69cc72;hp=f1bcb1c1a67a7e87ee5a3ef4cc70e1ce29c44351;hpb=398c02b945a58634c8932f07df2c2be8438da7d1;p=fw%2Faltos diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index f1bcb1c1..e0d9bb1f 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -40,6 +40,7 @@ public class AltosState { public double ground_altitude; public double altitude; public double height; + public double pressure; public double acceleration; public double battery; public double temperature; @@ -54,6 +55,7 @@ public class AltosState { public double max_baro_speed; public AltosGPS gps; + public int gps_sequence; public AltosIMU imu; public AltosMag mag; @@ -124,6 +126,7 @@ public class AltosState { drogue_sense = data.drogue_voltage(); main_sense = data.main_voltage(); battery = data.battery_voltage(); + pressure = data.pressure(); tick = data.tick; state = data.state; @@ -133,6 +136,7 @@ public class AltosState { npad = prev_state.npad; ngps = prev_state.ngps; gps = prev_state.gps; + gps_sequence = prev_state.gps_sequence; pad_lat = prev_state.pad_lat; pad_lon = prev_state.pad_lon; pad_alt = prev_state.pad_alt; @@ -187,6 +191,7 @@ public class AltosState { npad = 0; ngps = 0; gps = null; + gps_sequence = 0; baro_speed = AltosRecord.MISSING; accel_speed = AltosRecord.MISSING; pad_alt = AltosRecord.MISSING; @@ -199,7 +204,7 @@ public class AltosState { time = tick / 100.0; - if (cur.new_gps && (state < AltosLib.ao_flight_boost)) { + if (data.gps != null && data.gps_sequence != gps_sequence && (state < AltosLib.ao_flight_boost)) { /* Track consecutive 'good' gps reports, waiting for 10 of them */ if (data.gps != null && data.gps.locked && data.gps.nsat >= 4) @@ -226,7 +231,7 @@ public class AltosState { pad_alt = ground_altitude; } - data.new_gps = false; + gps_sequence = data.gps_sequence; gps_waiting = MIN_PAD_SAMPLES - npad; if (gps_waiting < 0) @@ -248,23 +253,20 @@ public class AltosState { if (height != AltosRecord.MISSING && height > max_height) max_height = height; - if (data.gps != null) { - if (gps == null || !gps.locked || data.gps.locked) - gps = data.gps; - if (ngps > 0 && gps.locked) { - from_pad = new AltosGreatCircle(pad_lat, pad_lon, gps.lat, gps.lon); - } - } elevation = 0; range = -1; - if (ngps > 0) { - gps_height = gps.alt - pad_alt; - if (from_pad != null) { - elevation = Math.atan2(height, from_pad.distance) * 180 / Math.PI; - range = Math.sqrt(height * height + from_pad.distance * from_pad.distance); + gps_height = 0; + if (data.gps != null) { + gps = data.gps; + if (ngps > 0 && gps.locked) { + double h = height; + + if (h == AltosRecord.MISSING) h = 0; + from_pad = new AltosGreatCircle(pad_lat, pad_lon, 0, gps.lat, gps.lon, h); + elevation = from_pad.elevation; + range = from_pad.range; + gps_height = gps.alt - pad_alt; } - } else { - gps_height = 0; } }