altoslib: Start integrated value at 0 by default
[fw/altos] / altoslib / AltosState.java
index a920d4250caaf0eceeeb0ebe42b8e4d8b356a417..e874a498b0ed066aa02387afcab22fd54fe88b92 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;
                }
@@ -144,8 +150,12 @@ public class AltosState implements Cloneable {
                void set_integral(AltosValue in) {
                        double  change = in.integrate();
 
-                       if (change != AltosRecord.MISSING)
-                               set(prev_value + change, in.time());
+                       if (change != AltosRecord.MISSING) {
+                               double  prev = prev_value;
+                               if (prev == AltosRecord.MISSING)
+                                       prev = 0;
+                               set(prev + change, in.time());
+                       }
                }
 
                void copy(AltosValue old) {
@@ -278,9 +288,14 @@ public class AltosState implements Cloneable {
                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);
                }
        }
@@ -292,7 +307,7 @@ public class AltosState implements Cloneable {
        }
 
        public void set_ground_pressure (double pressure) {
-               ground_pressure.set(pressure, time);
+               ground_pressure.set_measured(pressure, time);
        }
 
        class AltosAltitude extends AltosCValue {
@@ -340,7 +355,10 @@ public class AltosState implements Cloneable {
        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);
                }
        }