Change differentiation filter constants and limits
[fw/altos] / altoslib / AltosState.java
index 422590573459b3829366f6a37dc3e88601bd132d..a01cddb774d1a5a567d10869a80ee669fe783938 100644 (file)
@@ -29,8 +29,8 @@ public class AltosState implements Cloneable {
 
        public int set;
 
-       static final double ascent_filter_len = 0.1;
-       static final double descent_filter_len = 2.0;
+       static final double ascent_filter_len = 0.5;
+       static final double descent_filter_len = 0.5;
 
        /* derived data */
 
@@ -49,7 +49,6 @@ public class AltosState implements Cloneable {
                private double  max_value;
                private double  set_time;
                private double  prev_set_time;
-               private double  max_rate = 1000.0;
 
                void set(double new_value, double time) {
                        if (new_value != AltosLib.MISSING) {
@@ -125,12 +124,14 @@ public class AltosState implements Cloneable {
                        double  ddt = in.time() - pt;
                        double  ddv = (n - p) / ddt;
                                
+                       final double max = 100000;
+
                        /* 100gs */
-                       if (Math.abs(ddv) > 1000) {
+                       if (Math.abs(ddv) > max) {
                                if (n > p)
-                                       n = p + ddt * 1000;
+                                       n = p + ddt * max;
                                else
-                                       n = p - ddt * 1000;
+                                       n = p - ddt * max;
                        }
 
                        double filter_len;
@@ -269,6 +270,7 @@ public class AltosState implements Cloneable {
        public int      state;
        public int      flight;
        public int      serial;
+       public int      receiver_serial;
        public boolean  landed;
        public boolean  ascent; /* going up? */
        public boolean  boost;  /* under power */
@@ -300,7 +302,8 @@ public class AltosState implements Cloneable {
        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);
+                       if (!is_measured())
+                               ground_altitude.set_computed(pressure_to_altitude(computed.value()), time);
                }
 
                void set_measured(double p, double time) {
@@ -604,6 +607,7 @@ public class AltosState implements Cloneable {
 
                log_format = AltosLib.MISSING;
                serial = AltosLib.MISSING;
+               receiver_serial = AltosLib.MISSING;
 
                baro = null;
                companion = null;
@@ -655,6 +659,7 @@ public class AltosState implements Cloneable {
                
                set = 0;
 
+               ground_pressure.copy(old.ground_pressure);
                ground_altitude.copy(old.ground_altitude);
                altitude.copy(old.altitude);
                pressure.copy(old.pressure);
@@ -725,6 +730,7 @@ public class AltosState implements Cloneable {
 
                log_format = old.log_format;
                serial = old.serial;
+               receiver_serial = old.receiver_serial;
 
                baro = old.baro;
                companion = old.companion;
@@ -847,6 +853,11 @@ public class AltosState implements Cloneable {
                }
        }
 
+       public void set_receiver_serial(int serial) {
+               if (serial != AltosLib.MISSING)
+                       receiver_serial = serial;
+       }
+
        public int rssi() {
                if (rssi == AltosLib.MISSING)
                        return 0;