long report_time;
+ double time;
double time_change;
int tick;
double max_height;
double max_acceleration;
double max_speed;
+ double max_baro_speed;
AltosGPS gps;
int speak_tick;
double speak_altitude;
-
void init (AltosRecord cur, AltosState prev_state) {
int i;
AltosRecord prev;
data = cur;
ground_altitude = data.ground_altitude();
- height = data.filtered_altitude() - ground_altitude;
+ height = data.filtered_height();
report_time = System.currentTimeMillis();
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)
/* 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;
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)
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;