altoslib: Use first few baro samples for ground pressure on TM
authorKeith Packard <keithp@keithp.com>
Tue, 3 Sep 2013 23:40:04 +0000 (17:40 -0600)
committerKeith Packard <keithp@keithp.com>
Tue, 3 Sep 2013 23:40:04 +0000 (17:40 -0600)
TM didn't record the ground baro reading in the log file, so pull out
the first few measured baro samples and use those instead.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosState.java

index a920d4250caaf0eceeeb0ebe42b8e4d8b356a417..726c3041f4587edc5c3533a701e3d0a242f2f57d 100644 (file)
@@ -62,6 +62,12 @@ public class AltosState implements Cloneable {
                        }
                }
 
                        }
                }
 
+               void set_filtered(double new_value, double time) {
+                       if (prev_value != AltosRecord.MISSING)
+                               new_value = (prev_value * 15.0 + new_value) / 16.0;
+                       set(new_value, time);
+               }
+
                double value() {
                        return value;
                }
                double value() {
                        return value;
                }
@@ -278,9 +284,14 @@ public class AltosState implements Cloneable {
                ground_altitude.set_measured(a, time);
        }
 
                ground_altitude.set_measured(a, time);
        }
 
-       class AltosGroundPressure extends AltosValue {
-               void set(double p, double time) {
-                       super.set(p, time);
+       class AltosGroundPressure extends AltosCValue {
+               void set_filtered(double p, double time) {
+                       computed.set_filtered(p, time);
+                       ground_altitude.set_computed(pressure_to_altitude(computed.value()), time);
+               }
+
+               void set_measured(double p, double time) {
+                       super.set_measured(p, time);
                        ground_altitude.set_computed(pressure_to_altitude(p), time);
                }
        }
                        ground_altitude.set_computed(pressure_to_altitude(p), time);
                }
        }
@@ -292,7 +303,7 @@ public class AltosState implements Cloneable {
        }
 
        public void set_ground_pressure (double pressure) {
        }
 
        public void set_ground_pressure (double pressure) {
-               ground_pressure.set(pressure, time);
+               ground_pressure.set_measured(pressure, time);
        }
 
        class AltosAltitude extends AltosCValue {
        }
 
        class AltosAltitude extends AltosCValue {
@@ -340,7 +351,10 @@ public class AltosState implements Cloneable {
        class AltosPressure extends AltosValue {
                void set(double p, double time) {
                        super.set(p, time);
        class AltosPressure extends AltosValue {
                void set(double p, double time) {
                        super.set(p, time);
-                       altitude.set_computed(pressure_to_altitude(p), time);
+                       if (state == AltosLib.ao_flight_pad)
+                               ground_pressure.set_filtered(p, time);
+                       double a = pressure_to_altitude(p);
+                       altitude.set_computed(a, time);
                }
        }
 
                }
        }