altosuilib: Don't offer to graph some GPS details that TM doesn't log
[fw/altos] / altosuilib / AltosGraph.java
index 5e5a35cf3a7a8c0e9973208694fb5dc1eacc8291..e2db9e124b96298c9f2d05842cbc4850084979b9 100644 (file)
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altosuilib_2;
+package org.altusmetrum.altosuilib_3;
 
 import java.io.*;
 import java.util.ArrayList;
 
 import java.awt.*;
 import javax.swing.*;
-import org.altusmetrum.altoslib_4.*;
+import org.altusmetrum.altoslib_5.*;
 
 import org.jfree.ui.*;
 import org.jfree.chart.*;
@@ -172,6 +172,29 @@ class AltosMagUnits extends AltosUnits {
        }
 }
 
+class AltosDopUnits extends AltosUnits {
+
+       public double value(double p, boolean imperial_units) {
+               return p;
+       }
+
+       public double inverse(double p, boolean imperial_units) {
+               return p;
+       }
+
+       public String show_units(boolean imperial_units) {
+               return null;
+       }
+
+       public String say_units(boolean imperial_units) {
+               return null;
+       }
+
+       public int show_fraction(int width, boolean imperial_units) {
+               return 1;
+       }
+}
+
 public class AltosGraph extends AltosUIGraph {
 
        static final private Color height_color = new Color(194,31,31);
@@ -191,6 +214,9 @@ public class AltosGraph extends AltosUIGraph {
        static final private Color gps_course_color = new Color (100, 31, 112);
        static final private Color gps_ground_speed_color = new Color (31, 112, 100);
        static final private Color gps_climb_rate_color = new Color (31, 31, 112);
+       static final private Color gps_pdop_color = new Color(50, 194, 0);
+       static final private Color gps_hdop_color = new Color(50, 0, 194);
+       static final private Color gps_vdop_color = new Color(194, 0, 50);
        static final private Color temperature_color = new Color (31, 194, 194);
        static final private Color dbm_color = new Color(31, 100, 100);
        static final private Color state_color = new Color(0,0,0);
@@ -212,11 +238,12 @@ public class AltosGraph extends AltosUIGraph {
        static AltosGyroUnits gyro_units = new AltosGyroUnits();
        static AltosOrient orient_units = new AltosOrient();
        static AltosMagUnits mag_units = new AltosMagUnits();
+       static AltosDopUnits dop_units = new AltosDopUnits();
 
        AltosUIAxis     height_axis, speed_axis, accel_axis, voltage_axis, temperature_axis, nsat_axis, dbm_axis;
        AltosUIAxis     distance_axis, pressure_axis;
        AltosUIAxis     gyro_axis, orient_axis, mag_axis;
-       AltosUIAxis     course_axis;
+       AltosUIAxis     course_axis, dop_axis;
 
        public AltosGraph(AltosUIEnable enable, AltosFlightStats stats, AltosGraphDataSet dataSet) {
                super(enable);
@@ -236,33 +263,42 @@ public class AltosGraph extends AltosUIGraph {
                orient_axis = newAxis("Tilt Angle", orient_units, orient_color, 0);
                mag_axis = newAxis("Magnetic Field", mag_units, mag_x_color, 0);
                course_axis = newAxis("Course", orient_units, gps_course_color, 0);
+               dop_axis = newAxis("Dilution of Precision", dop_units, gps_pdop_color, 0);
 
                addMarker("State", AltosGraphDataPoint.data_state, state_color);
-               addSeries("Height",
-                         AltosGraphDataPoint.data_height,
-                         AltosConvert.height,
-                         height_color,
-                         true,
-                         height_axis);
-               addSeries("Pressure",
-                         AltosGraphDataPoint.data_pressure,
-                         pressure_units,
-                         pressure_color,
-                         false,
-                         pressure_axis);
-               addSeries("Speed",
-                         AltosGraphDataPoint.data_speed,
-                         AltosConvert.speed,
-                         speed_color,
-                         true,
-                         speed_axis);
-               addSeries("Acceleration",
-                         AltosGraphDataPoint.data_accel,
-                         AltosConvert.accel,
-                         accel_color,
-                         true,
-                         accel_axis);
+
+               if (stats.has_flight_data) {
+                       addSeries("Height",
+                                 AltosGraphDataPoint.data_height,
+                                 AltosConvert.height,
+                                 height_color,
+                                 true,
+                                 height_axis);
+                       addSeries("Pressure",
+                                 AltosGraphDataPoint.data_pressure,
+                                 pressure_units,
+                                 pressure_color,
+                                 false,
+                                 pressure_axis);
+                       addSeries("Speed",
+                                 AltosGraphDataPoint.data_speed,
+                                 AltosConvert.speed,
+                                 speed_color,
+                                 true,
+                                 speed_axis);
+                       addSeries("Acceleration",
+                                 AltosGraphDataPoint.data_accel,
+                                 AltosConvert.accel,
+                                 accel_color,
+                                 true,
+                                 accel_axis);
+               }
                if (stats.has_gps) {
+                       boolean enable_gps = false;
+
+                       if (!stats.has_flight_data)
+                               enable_gps = true;
+
                        addSeries("Range",
                                  AltosGraphDataPoint.data_range,
                                  AltosConvert.distance,
@@ -273,12 +309,18 @@ public class AltosGraph extends AltosUIGraph {
                                  AltosGraphDataPoint.data_distance,
                                  AltosConvert.distance,
                                  distance_color,
-                                 false,
+                                 enable_gps,
                                  distance_axis);
                        addSeries("GPS Height",
                                  AltosGraphDataPoint.data_gps_height,
                                  AltosConvert.height,
                                  gps_height_color,
+                                 enable_gps,
+                                 height_axis);
+                       addSeries("GPS Altitude",
+                                 AltosGraphDataPoint.data_gps_altitude,
+                                 AltosConvert.height,
+                                 gps_height_color,
                                  false,
                                  height_axis);
                        addSeries("GPS Satellites in Solution",
@@ -287,30 +329,54 @@ public class AltosGraph extends AltosUIGraph {
                                  gps_nsat_solution_color,
                                  false,
                                  nsat_axis);
-                       addSeries("GPS Satellites in View",
-                                 AltosGraphDataPoint.data_gps_nsat_view,
-                                 nsat_units,
-                                 gps_nsat_view_color,
-                                 false,
-                                 nsat_axis);
-                       addSeries("GPS Course",
-                                 AltosGraphDataPoint.data_gps_course,
-                                 orient_units,
-                                 gps_course_color,
-                                 false,
-                                 course_axis);
-                       addSeries("GPS Ground Speed",
-                                 AltosGraphDataPoint.data_gps_ground_speed,
-                                 AltosConvert.speed,
-                                 gps_ground_speed_color,
-                                 false,
-                                 speed_axis);
-                       addSeries("GPS Climb Rate",
-                                 AltosGraphDataPoint.data_gps_climb_rate,
-                                 AltosConvert.speed,
-                                 gps_climb_rate_color,
+                       if (stats.has_gps_sats) {
+                               addSeries("GPS Satellites in View",
+                                         AltosGraphDataPoint.data_gps_nsat_view,
+                                         nsat_units,
+                                         gps_nsat_view_color,
+                                         false,
+                                         nsat_axis);
+                       }
+                       if (stats.has_gps_detail) {
+                               addSeries("GPS Course",
+                                         AltosGraphDataPoint.data_gps_course,
+                                         orient_units,
+                                         gps_course_color,
+                                         false,
+                                         course_axis);
+                               addSeries("GPS Ground Speed",
+                                         AltosGraphDataPoint.data_gps_ground_speed,
+                                         AltosConvert.speed,
+                                         gps_ground_speed_color,
+                                         enable_gps,
+                                         speed_axis);
+                               addSeries("GPS Climb Rate",
+                                         AltosGraphDataPoint.data_gps_climb_rate,
+                                         AltosConvert.speed,
+                                         gps_climb_rate_color,
+                                         enable_gps,
+                                         speed_axis);
+                       }
+                       addSeries("GPS Position DOP",
+                                 AltosGraphDataPoint.data_gps_pdop,
+                                 dop_units,
+                                 gps_pdop_color,
                                  false,
-                                 speed_axis);
+                                 dop_axis);
+                       if (stats.has_gps_detail) {
+                               addSeries("GPS Horizontal DOP",
+                                         AltosGraphDataPoint.data_gps_hdop,
+                                         dop_units,
+                                         gps_hdop_color,
+                                         false,
+                                         dop_axis);
+                               addSeries("GPS Vertical DOP",
+                                         AltosGraphDataPoint.data_gps_vdop,
+                                         dop_units,
+                                         gps_vdop_color,
+                                         false,
+                                         dop_axis);
+                       }
                }
                if (stats.has_rssi)
                        addSeries("Received Signal Strength",
@@ -319,19 +385,22 @@ public class AltosGraph extends AltosUIGraph {
                                  dbm_color,
                                  false,
                                  dbm_axis);
-               if (stats.has_other_adc) {
-                       addSeries("Temperature",
-                                 AltosGraphDataPoint.data_temperature,
-                                 AltosConvert.temperature,
-                                 temperature_color,
-                                 false,
-                                 temperature_axis);
+
+               if (stats.has_battery)
                        addSeries("Battery Voltage",
                                  AltosGraphDataPoint.data_battery_voltage,
                                  voltage_units,
                                  battery_voltage_color,
                                  false,
                                  voltage_axis);
+
+               if (stats.has_flight_adc) {
+                       addSeries("Temperature",
+                                 AltosGraphDataPoint.data_temperature,
+                                 AltosConvert.temperature,
+                                 temperature_color,
+                                 false,
+                                 temperature_axis);
                        addSeries("Drogue Voltage",
                                  AltosGraphDataPoint.data_drogue_voltage,
                                  voltage_units,
@@ -347,58 +416,58 @@ public class AltosGraph extends AltosUIGraph {
                }
 
                if (stats.has_imu) {
-                       addSeries("Acceleration X",
-                                 AltosGraphDataPoint.data_accel_x,
+                       addSeries("Acceleration Along",
+                                 AltosGraphDataPoint.data_accel_along,
                                  AltosConvert.accel,
                                  accel_x_color,
                                  false,
                                  accel_axis);
-                       addSeries("Acceleration Y",
-                                 AltosGraphDataPoint.data_accel_y,
+                       addSeries("Acceleration Across",
+                                 AltosGraphDataPoint.data_accel_across,
                                  AltosConvert.accel,
                                  accel_y_color,
                                  false,
                                  accel_axis);
-                       addSeries("Acceleration Z",
-                                 AltosGraphDataPoint.data_accel_z,
+                       addSeries("Acceleration Through",
+                                 AltosGraphDataPoint.data_accel_through,
                                  AltosConvert.accel,
                                  accel_z_color,
                                  false,
                                  accel_axis);
-                       addSeries("Rotation Rate X",
-                                 AltosGraphDataPoint.data_gyro_x,
+                       addSeries("Roll Rate",
+                                 AltosGraphDataPoint.data_gyro_roll,
                                  gyro_units,
                                  gyro_x_color,
                                  false,
                                  gyro_axis);
-                       addSeries("Rotation Rate Y",
-                                 AltosGraphDataPoint.data_gyro_y,
+                       addSeries("Pitch Rate",
+                                 AltosGraphDataPoint.data_gyro_pitch,
                                  gyro_units,
                                  gyro_y_color,
                                  false,
                                  gyro_axis);
-                       addSeries("Rotation Rate Z",
-                                 AltosGraphDataPoint.data_gyro_z,
+                       addSeries("Yaw Rate",
+                                 AltosGraphDataPoint.data_gyro_yaw,
                                  gyro_units,
                                  gyro_z_color,
                                  false,
                                  gyro_axis);
                }
                if (stats.has_mag) {
-                       addSeries("Magnetometer X",
-                                 AltosGraphDataPoint.data_mag_x,
+                       addSeries("Magnetometer Along",
+                                 AltosGraphDataPoint.data_mag_along,
                                  mag_units,
                                  mag_x_color,
                                  false,
                                  mag_axis);
-                       addSeries("Magnetometer Y",
-                                 AltosGraphDataPoint.data_mag_y,
+                       addSeries("Magnetometer Across",
+                                 AltosGraphDataPoint.data_mag_across,
                                  mag_units,
                                  mag_y_color,
                                  false,
                                  mag_axis);
-                       addSeries("Magnetometer Z",
-                                 AltosGraphDataPoint.data_mag_z,
+                       addSeries("Magnetometer Through",
+                                 AltosGraphDataPoint.data_mag_through,
                                  mag_units,
                                  mag_z_color,
                                  false,