- new FlightStat(layout, y++, "Drogue descent rate",
- String.format("%5.0f m/s", stats.state_speed[Altos.ao_flight_drogue]),
- String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_drogue])));
- new FlightStat(layout, y++, "Main descent rate",
- String.format("%5.0f m/s", stats.state_speed[Altos.ao_flight_main]),
- String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main])));
- new FlightStat(layout, y++, "Ascent time",
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_boost] - stats.state_start[AltosLib.ao_flight_boost],
- AltosLib.state_name(Altos.ao_flight_boost)),
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_fast] - stats.state_start[AltosLib.ao_flight_fast],
- AltosLib.state_name(Altos.ao_flight_fast)),
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_coast] - stats.state_start[AltosLib.ao_flight_coast],
- AltosLib.state_name(Altos.ao_flight_coast)));
- new FlightStat(layout, y++, "Descent time",
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_drogue] - stats.state_start[AltosLib.ao_flight_drogue],
- AltosLib.state_name(Altos.ao_flight_drogue)),
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_main] - stats.state_start[AltosLib.ao_flight_main],
- AltosLib.state_name(Altos.ao_flight_main)));
- new FlightStat(layout, y++, "Flight time",
- String.format("%6.1f s", stats.state_end[Altos.ao_flight_main] -
- stats.state_start[Altos.ao_flight_boost]));
- if (stats.has_gps) {
+ if (stats.state_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING) {
+ String label;
+
+ if (stats.state_speed[AltosLib.ao_flight_main] == AltosLib.MISSING)
+ label = "Descent rate";
+ else
+ label = "Drogue descent rate";
+ new FlightStat(layout, y++, label,
+ String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_drogue]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue])));
+ }
+ if (stats.state_speed[AltosLib.ao_flight_main] != AltosLib.MISSING)
+ new FlightStat(layout, y++, "Main descent rate",
+ String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_main]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main])));
+ if (stats.state_time[AltosLib.ao_flight_drogue] != 0 || stats.state_time[AltosLib.ao_flight_main] != 0) {
+ double drogue_duration = stats.state_time[AltosLib.ao_flight_drogue];
+ double main_duration = stats.state_time[AltosLib.ao_flight_main];
+ double duration = drogue_duration + main_duration;
+
+ if (drogue_duration > 0 && main_duration > 0) {
+ new FlightStat(layout, y++, "Descent time",
+ String.format("%6.1f s %s", drogue_duration,
+ AltosLib.state_name(AltosLib.ao_flight_drogue)),
+ String.format("%6.1f s %s", main_duration,
+ AltosLib.state_name(AltosLib.ao_flight_main)));
+ } else if (duration > 0) {
+ new FlightStat(layout, y++, "Descent time",
+ String.format("%6.1f s", duration));
+ }
+ }
+ if (stats.landed_time > stats.boost_time)
+ new FlightStat(layout, y++, "Flight time",
+ String.format("%6.1f s", stats.landed_time - stats.boost_time));
+ if (stats.has_gps && stats.pad_lat != AltosLib.MISSING) {