/* compute barometric speed */
double height_change = height - prev_state.height;
+
+ double prev_baro_speed = prev_state.baro_speed;
+ if (prev_baro_speed == AltosRecord.MISSING)
+ prev_baro_speed = 0;
+
if (time_change > 0)
- baro_speed = (prev_state.baro_speed * 3 + (height_change / time_change)) / 4.0;
+ baro_speed = (prev_baro_speed * 3 + (height_change / time_change)) / 4.0;
else
baro_speed = prev_state.baro_speed;
+ double prev_accel_speed = prev_state.accel_speed;
+
+ if (prev_accel_speed == AltosRecord.MISSING)
+ prev_accel_speed = 0;
+
if (acceleration == AltosRecord.MISSING) {
/* Fill in mising acceleration value */
accel_speed = baro_speed;
- if (time_change > 0)
- acceleration = (accel_speed - prev_state.accel_speed) / time_change;
+
+ if (time_change > 0 && accel_speed != AltosRecord.MISSING)
+ acceleration = (accel_speed - prev_accel_speed) / time_change;
else
acceleration = prev_state.acceleration;
} else {
/* compute accelerometer speed */
- accel_speed = prev_state.accel_speed + acceleration * time_change;
+ accel_speed = prev_accel_speed + acceleration * time_change;
}
}
-
} else {
npad = 0;
ngps = 0;
gps = null;
baro_speed = AltosRecord.MISSING;
accel_speed = AltosRecord.MISSING;
+ pad_alt = AltosRecord.MISSING;
max_baro_speed = 0;
max_accel_speed = 0;
max_height = 0;
if (height != AltosRecord.MISSING && height > max_height)
max_height = height;
+ elevation = 0;
+ range = -1;
+ gps_height = 0;
if (data.gps != null) {
if (gps == null || !gps.locked || data.gps.locked)
gps = data.gps;
if (ngps > 0 && gps.locked) {
- from_pad = new AltosGreatCircle(pad_lat, pad_lon, gps.lat, gps.lon);
- }
- }
- elevation = 0;
- range = -1;
- if (ngps > 0) {
- gps_height = gps.alt - pad_alt;
- if (from_pad != null) {
- elevation = Math.atan2(height, from_pad.distance) * 180 / Math.PI;
- range = Math.sqrt(height * height + from_pad.distance * from_pad.distance);
+ double h = height;
+
+ if (h == AltosRecord.MISSING) h = 0;
+ from_pad = new AltosGreatCircle(pad_lat, pad_lon, 0, gps.lat, gps.lon, h);
+ elevation = from_pad.elevation;
+ range = from_pad.range;
+ gps_height = gps.alt - pad_alt;
}
- } else {
- gps_height = 0;
}
}