Merge remote-tracking branch 'origin/master'
[fw/altos] / altoslib / AltosState.java
index f1bcb1c1a67a7e87ee5a3ef4cc70e1ce29c44351..e0d9bb1fc394dc1cb42b495bc03e755d135968bb 100644 (file)
@@ -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;
                }
        }