altosui: Report baro ground alt for 'Pad Altitude' when GPS missing
[fw/altos] / altoslib / AltosState.java
index 93104fb0878c946468aaec1f898b3e844de4c6af..fc9727481201162bf636e6c4324b2d3140458310 100644 (file)
@@ -20,7 +20,7 @@
  * Track flight state from telemetry or eeprom data stream
  */
 
-package org.altusmetrum.altoslib_13;
+package org.altusmetrum.altoslib_14;
 
 public class AltosState extends AltosDataListener {
 
@@ -307,13 +307,12 @@ public class AltosState extends AltosDataListener {
        class AltosGpsGroundAltitude extends AltosValue {
                void set(double a, double t) {
                        super.set(a, t);
-                       pad_alt = value();
+
                        gps_altitude.set_gps_height();
                }
 
                void set_filtered(double a, double t) {
                        super.set_filtered(a, t);
-                       pad_alt = value();
                        gps_altitude.set_gps_height();
                }
 
@@ -513,26 +512,27 @@ public class AltosState extends AltosDataListener {
        }
 
        public double height() {
-               double k = kalman_height.value();
-               if (k != AltosLib.MISSING)
-                       return k;
-
                double b = baro_height();
                if (b != AltosLib.MISSING)
                        return b;
 
+               double k = kalman_height.value();
+               if (k != AltosLib.MISSING)
+                       return k;
+
                return gps_height();
        }
 
        public double max_height() {
-               double  k = kalman_height.max();
-               if (k != AltosLib.MISSING)
-                       return k;
-
                double a = altitude.max();
                double g = ground_altitude();
                if (a != AltosLib.MISSING && g != AltosLib.MISSING)
                        return a - g;
+
+               double  k = kalman_height.max();
+               if (k != AltosLib.MISSING)
+                       return k;
+
                return max_gps_height();
        }
 
@@ -692,7 +692,7 @@ public class AltosState extends AltosDataListener {
 
        public double   gps_height;
 
-       public double pad_lat, pad_lon, pad_alt;
+       public double pad_lat, pad_lon;
 
        public int      speak_tick;
        public double   speak_altitude;
@@ -774,7 +774,6 @@ public class AltosState extends AltosDataListener {
 
                pad_lat = AltosLib.MISSING;
                pad_lon = AltosLib.MISSING;
-               pad_alt = AltosLib.MISSING;
 
                gps_altitude = new AltosGpsAltitude();
                gps_ground_altitude = new AltosGpsGroundAltitude();
@@ -842,6 +841,8 @@ public class AltosState extends AltosDataListener {
                                                        gps.climb_rate * gps.climb_rate), time);
                        if (gps.course != AltosLib.MISSING)
                                gps_course.set(gps.course, time);
+               } else if (state() == AltosLib.ao_flight_pad || state() == AltosLib.ao_flight_stateless) {
+                       set_npad(0);
                }
                if (gps.lat != 0 && gps.lon != 0 &&
                    pad_lat != AltosLib.MISSING &&
@@ -858,10 +859,6 @@ public class AltosState extends AltosDataListener {
                }
        }
 
-       public String state_name() {
-               return AltosLib.state_name(state());
-       }
-
        public void set_state(int state) {
                super.set_state(state);
                ascent = (AltosLib.ao_flight_boost <= state() &&
@@ -886,8 +883,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();
@@ -901,9 +898,9 @@ public class AltosState extends AltosDataListener {
 
        void update_pad_rotation() {
                if (cal_data().pad_orientation != AltosLib.MISSING && accel_ground_along != AltosLib.MISSING) {
-                       rotation = new AltosRotation(AltosIMU.convert_accel(accel_ground_across - cal_data().accel_zero_across),
-                                                    AltosIMU.convert_accel(accel_ground_through - cal_data().accel_zero_through),
-                                                    AltosIMU.convert_accel(accel_ground_along - cal_data().accel_zero_along),
+                       rotation = new AltosRotation(accel_ground_across,
+                                                    accel_ground_through,
+                                                    accel_ground_along,
                                                     cal_data().pad_orientation);
                        orient.set_computed(rotation.tilt(), time);
                }