use multimaint-merge to make Debian changelogs less ugly
[fw/altos] / altosui / AltosState.java
index ec499d5acf2110e776e2096decf83e8b088a69e8..072cb790bfb1161b5d11d2d6c9f86c5ae560185d 100644 (file)
@@ -28,6 +28,7 @@ public class AltosState {
 
        long    report_time;
 
+       double  time;
        double  time_change;
        int     tick;
 
@@ -48,6 +49,7 @@ public class AltosState {
        double  max_height;
        double  max_acceleration;
        double  max_speed;
+       double  max_baro_speed;
 
        AltosGPS        gps;
 
@@ -71,7 +73,6 @@ public class AltosState {
        int     speak_tick;
        double  speak_altitude;
 
-
        void init (AltosRecord cur, AltosState prev_state) {
                int             i;
                AltosRecord prev;
@@ -79,7 +80,7 @@ public class AltosState {
                data = cur;
 
                ground_altitude = data.ground_altitude();
-               height = data.filtered_altitude() - ground_altitude;
+               height = data.filtered_height();
 
                report_time = System.currentTimeMillis();
 
@@ -104,6 +105,7 @@ public class AltosState {
                        max_height = prev_state.max_height;
                        max_acceleration = prev_state.max_acceleration;
                        max_speed = prev_state.max_speed;
+                       max_baro_speed = prev_state.max_baro_speed;
 
                        /* make sure the clock is monotonic */
                        while (tick < prev_state.tick)
@@ -114,10 +116,14 @@ public class AltosState {
                        /* compute barometric speed */
 
                        double height_change = height - prev_state.height;
-                       if (time_change > 0)
-                               baro_speed = (prev_state.baro_speed * 3 + (height_change / time_change)) / 4.0;
-                       else
-                               baro_speed = prev_state.baro_speed;
+                       if (data.speed != AltosRecord.MISSING)
+                               baro_speed = data.speed;
+                       else {
+                               if (time_change > 0)
+                                       baro_speed = (prev_state.baro_speed * 3 + (height_change / time_change)) / 4.0;
+                               else
+                                       baro_speed = prev_state.baro_speed;
+                       }
                } else {
                        npad = 0;
                        ngps = 0;
@@ -126,7 +132,9 @@ public class AltosState {
                        time_change = 0;
                }
 
-               if (state == Altos.ao_flight_pad) {
+               time = tick / 100.0;
+
+               if (state == Altos.ao_flight_pad || state == Altos.ao_flight_idle) {
 
                        /* Track consecutive 'good' gps reports, waiting for 10 of them */
                        if (data.gps != null && data.gps.locked && data.gps.nsat >= 4)
@@ -164,6 +172,8 @@ public class AltosState {
                        max_acceleration = acceleration;
                if (ascent && speed > max_speed)
                        max_speed = speed;
+               if (ascent && baro_speed > max_baro_speed)
+                       max_baro_speed = baro_speed;
 
                if (height > max_height)
                        max_height = height;