altoslib: Move computed state from AltosRecord to AltosState
[fw/altos] / altoslib / AltosRecord.java
index 8bab1d0cad2ad0c7b2700f809fc8ac09d14a6eff..091695154fea3cc01a2a5fecf7b2afebed47e218 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.altusmetrum.AltosLib;
 
-public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
+public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable {
 
        public static final int seen_flight = 1;
        public static final int seen_sensor = 2;
@@ -43,11 +43,6 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
        public int      state;
        public int      tick;
 
-       /* Current flight dynamic state */
-       public double   acceleration;   /* m/s² */
-       public double   speed;          /* m/s */
-       public double   height;         /* m */
-
        public AltosGPS gps;
        public boolean  new_gps;
 
@@ -63,6 +58,11 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
 
        public AltosRecordCompanion companion;
 
+       /* Telemetry sources have these values recorded from the flight computer */
+       public double   kalman_height;
+       public double   kalman_speed;
+       public double   kalman_acceleration;
+
        /*
         * Abstract methods that convert record data
         * to standard units:
@@ -75,76 +75,48 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
         *      temperature:    °C
         */
 
-       public double raw_pressure() { return MISSING; }
-
-       public double filtered_pressure() { return MISSING; }
-
-       public double ground_pressure() { return MISSING; }
-
-       public double battery_voltage() { return MISSING; }
+       abstract public double pressure();
+       abstract public double ground_pressure();
+       abstract public double acceleration();
 
-       public double main_voltage() { return MISSING; }
+       public double altitude() {
+               double  p = pressure();
 
-       public double drogue_voltage() { return MISSING; }
-
-       public double temperature() { return MISSING; }
-       
-       public double acceleration() { return MISSING; }
-
-       public double accel_speed() { return MISSING; }
-
-       public AltosIMU imu() { return null; }
-
-       public AltosMag mag() { return null; }
-
-       /*
-        * Convert various pressure values to altitude
-        */
-
-       public double raw_altitude() {
-               double p = raw_pressure();
                if (p == MISSING)
                        return MISSING;
                return AltosConvert.pressure_to_altitude(p);
        }
 
        public double ground_altitude() {
-               double p = ground_pressure();
+               double  p = ground_pressure();
+
                if (p == MISSING)
                        return MISSING;
                return AltosConvert.pressure_to_altitude(p);
        }
 
-       public double filtered_altitude() {
-               double  ga = ground_altitude();
-               if (height != MISSING && ga != MISSING)
-                       return height + ga;
+       public double height() {
+               double  g = ground_altitude();
+               double  a = altitude();
 
-               double  p = filtered_pressure();
-               if (p == MISSING)
-                       return raw_altitude();
-               return AltosConvert.pressure_to_altitude(p);
+               if (g == MISSING)
+                       return MISSING;
+               if (a == MISSING)
+                       return MISSING;
+               return a - g;
        }
 
-       public double filtered_height() {
-               if (height != MISSING)
-                       return height;
+       public double battery_voltage() { return MISSING; }
 
-               double f = filtered_altitude();
-               double g = ground_altitude();
-               if (f == MISSING || g == MISSING)
-                       return MISSING;
-               return f - g;
-       }
+       public double main_voltage() { return MISSING; }
 
-       public double raw_height() {
-               double r = raw_altitude();
-               double g = ground_altitude();
+       public double drogue_voltage() { return MISSING; }
 
-               if (r == MISSING || g == MISSING)
-                       return height;
-               return r - g;
-       }
+       public double temperature() { return MISSING; }
+       
+       public AltosIMU imu() { return null; }
+
+       public AltosMag mag() { return null; }
 
        public String state() {
                return AltosLib.state_name(state);
@@ -164,12 +136,12 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
                status = old.status;
                state = old.state;
                tick = old.tick;
-               acceleration = old.acceleration;
-               speed = old.speed;
-               height = old.height;
                gps = new AltosGPS(old.gps);
                new_gps = old.new_gps;
                companion = old.companion;
+               kalman_acceleration = old.kalman_acceleration;
+               kalman_speed = old.kalman_speed;
+               kalman_height = old.kalman_height;
        }
 
        public AltosRecord clone() {
@@ -192,11 +164,12 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
                status = 0;
                state = AltosLib.ao_flight_startup;
                tick = 0;
-               acceleration = MISSING;
-               speed = MISSING;
-               height = MISSING;
                gps = new AltosGPS();
                new_gps = false;
                companion = null;
+
+               kalman_acceleration = MISSING;
+               kalman_speed = MISSING;
+               kalman_height = MISSING;
        }
 }