altosui: Add imu and mag sensor values to plots
[fw/altos] / altosui / AltosFlightStats.java
index f278012fdc867b71b8b9aa1c2b8b77263059d771..b3ee14acc516cdc8e8e75bf0fb503e6ff8577648 100644 (file)
@@ -18,7 +18,7 @@
 package altosui;
 
 import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
 
 public class AltosFlightStats {
        double          max_height;
@@ -38,6 +38,9 @@ public class AltosFlightStats {
        boolean         has_gps;
        boolean         has_other_adc;
        boolean         has_rssi;
+       boolean         has_imu;
+       boolean         has_mag;
+       boolean         has_orient;
 
        double landed_time(AltosStateIterable states) {
                AltosState state = null;
@@ -77,20 +80,20 @@ public class AltosFlightStats {
        }
 
        double boost_time(AltosStateIterable states) {
-               double boost_time = AltosRecord.MISSING;
+               double boost_time = AltosLib.MISSING;
                AltosState      state = null;
 
                for (AltosState s : states) {
                        state = s;
                        if (state.acceleration() < 1)
                                boost_time = state.time;
-                       if (state.state >= Altos.ao_flight_boost)
+                       if (state.state >= AltosLib.ao_flight_boost && state.state <= AltosLib.ao_flight_landed)
                                break;
                }
                if (state == null)
                        return 0;
 
-               if (boost_time == AltosRecord.MISSING)
+               if (boost_time == AltosLib.MISSING)
                        boost_time = state.time;
                return boost_time;
        }
@@ -101,27 +104,32 @@ public class AltosFlightStats {
                double          end_time = 0;
                double          landed_time = landed_time(states);
 
-               year = month = day = AltosRecord.MISSING;
-               hour = minute = second = AltosRecord.MISSING;
-               serial = flight = AltosRecord.MISSING;
-               lat = lon = AltosRecord.MISSING;
+               year = month = day = AltosLib.MISSING;
+               hour = minute = second = AltosLib.MISSING;
+               serial = flight = AltosLib.MISSING;
+               lat = lon = AltosLib.MISSING;
                has_gps = false;
                has_other_adc = false;
                has_rssi = false;
+               has_imu = false;
+               has_mag = false;
+               has_orient = false;
                for (AltosState state : states) {
-                       if (serial == AltosRecord.MISSING && state.serial != AltosRecord.MISSING)
+                       if (serial == AltosLib.MISSING && state.serial != AltosLib.MISSING)
                                serial = state.serial;
-                       if (flight == AltosRecord.MISSING && state.flight != AltosRecord.MISSING)
+                       if (flight == AltosLib.MISSING && state.flight != AltosLib.MISSING)
                                flight = state.flight;
-                       if (state.battery_voltage != AltosRecord.MISSING)
+                       if (state.battery_voltage != AltosLib.MISSING)
                                has_other_adc = true;
-                       if (state.rssi != AltosRecord.MISSING)
+                       if (state.rssi != AltosLib.MISSING)
                                has_rssi = true;
                        end_time = state.time;
-                       if (state.time >= boost_time && state.state < Altos.ao_flight_boost)
-                               state.state = Altos.ao_flight_boost;
-                       if (state.time >= landed_time && state.state < Altos.ao_flight_landed)
-                               state.state = Altos.ao_flight_landed;
+
+                       int state_id = state.state;
+                       if (state.time >= boost_time && state_id < Altos.ao_flight_boost)
+                               state_id = Altos.ao_flight_boost;
+                       if (state.time >= landed_time && state_id < Altos.ao_flight_landed)
+                               state_id = Altos.ao_flight_landed;
                        if (state.gps != null && state.gps.locked) {
                                year = state.gps.year;
                                month = state.gps.month;
@@ -130,20 +138,24 @@ public class AltosFlightStats {
                                minute = state.gps.minute;
                                second = state.gps.second;
                        }
-                       if (0 <= state.state && state.state < Altos.ao_flight_invalid) {
-                               state_accel[state.state] += state.acceleration();
-                               state_speed[state.state] += state.speed();
-                               state_count[state.state]++;
-                               if (state_start[state.state] == 0.0)
-                                       state_start[state.state] = state.time;
-                               if (state_end[state.state] < state.time)
-                                       state_end[state.state] = state.time;
+                       if (0 <= state_id && state_id < Altos.ao_flight_invalid) {
+                               double acceleration = state.acceleration();
+                               double speed = state.speed();
+                               if (acceleration != AltosLib.MISSING && speed != AltosLib.MISSING) {
+                                       state_accel[state_id] += acceleration;
+                                       state_speed[state_id] += speed;
+                                       state_count[state_id]++;
+                               }
+                               if (state_start[state_id] == 0.0)
+                                       state_start[state_id] = state.time;
+                               if (state_end[state_id] < state.time)
+                                       state_end[state_id] = state.time;
                                max_height = state.max_height();
                                max_speed = state.max_speed();
                                max_acceleration = state.max_acceleration();
                        }
                        if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) {
-                               if (state.state <= Altos.ao_flight_pad) {
+                               if (state_id <= Altos.ao_flight_pad) {
                                        pad_lat = state.gps.lat;
                                        pad_lon = state.gps.lon;
                                }
@@ -151,6 +163,12 @@ public class AltosFlightStats {
                                lon = state.gps.lon;
                                has_gps = true;
                        }
+                       if (state.imu != null)
+                               has_imu = true;
+                       if (state.mag != null)
+                               has_mag = true;
+                       if (state.orient() != AltosLib.MISSING)
+                               has_orient = true;
                }
                for (int s = Altos.ao_flight_startup; s <= Altos.ao_flight_landed; s++) {
                        if (state_count[s] > 0) {