altosui: Add GPS course, ground speed and climb rate to graphs
authorKeith Packard <keithp@keithp.com>
Tue, 6 May 2014 06:41:43 +0000 (23:41 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 9 May 2014 03:44:10 +0000 (20:44 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosGraph.java
altosui/AltosGraphDataPoint.java

index 564bed86855818c1ffa6b2a37e78e652cb998693..d5c00247891394376fa0861d5adeb0b08bb388e5 100644 (file)
@@ -189,6 +189,9 @@ public class AltosGraph extends AltosUIGraph {
        static final private Color gps_nsat_color = new Color (194, 31, 194);
        static final private Color gps_nsat_solution_color = new Color (194, 31, 194);
        static final private Color gps_nsat_view_color = new Color (150, 31, 150);
+       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 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);
@@ -214,6 +217,7 @@ public class AltosGraph extends AltosUIGraph {
        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;
 
        public AltosGraph(AltosUIEnable enable, AltosFlightStats stats, AltosGraphDataSet dataSet) {
                super(enable);
@@ -232,6 +236,7 @@ public class AltosGraph extends AltosUIGraph {
                gyro_axis = newAxis("Rotation Rate", gyro_units, gyro_z_color, 0);
                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);
 
                addMarker("State", AltosGraphDataPoint.data_state, state_color);
                addSeries("Height",
@@ -288,7 +293,25 @@ public class AltosGraph extends AltosUIGraph {
                                  nsat_units,
                                  gps_nsat_view_color,
                                  false,
-                         nsat_axis);
+                                 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,
+                                 false,
+                                 speed_axis);
                }
                if (stats.has_rssi)
                        addSeries("Received Signal Strength",
index a771db53c47cfc1abc71074159b3b840af4f2d94..a0b0925cfb693cb8bec77d9d493191922fd1c913 100644 (file)
@@ -50,7 +50,10 @@ public class AltosGraphDataPoint implements AltosUIDataPoint {
        public static final int data_mag_y = 23;
        public static final int data_mag_z = 24;
        public static final int data_orient = 25;
-       public static final int data_ignitor_0 = 26;
+       public static final int data_gps_course = 26;
+       public static final int data_gps_ground_speed = 27;
+       public static final int data_gps_climb_rate = 28;
+       public static final int data_ignitor_0 = 29;
        public static final int data_ignitor_num = 32;
        public static final int data_ignitor_max = data_ignitor_0 + data_ignitor_num - 1;
        public static final int data_ignitor_fired_0 = data_ignitor_0 + data_ignitor_num;
@@ -166,6 +169,24 @@ public class AltosGraphDataPoint implements AltosUIDataPoint {
                case data_orient:
                        y = state.orient();
                        break;
+               case data_gps_course:
+                       if (state.gps != null)
+                               y = state.gps.course;
+                       else
+                               y = AltosLib.MISSING;
+                       break;
+               case data_gps_ground_speed:
+                       if (state.gps != null)
+                               y = state.gps.ground_speed;
+                       else
+                               y = AltosLib.MISSING;
+                       break;
+               case data_gps_climb_rate:
+                       if (state.gps != null)
+                               y = state.gps.climb_rate;
+                       else
+                               y = AltosLib.MISSING;
+                       break;
                default:
                        if (data_ignitor_0 <= index && index <= data_ignitor_max) {
                                int ignitor = index - data_ignitor_0;
@@ -190,9 +211,8 @@ public class AltosGraphDataPoint implements AltosUIDataPoint {
        public int id(int index) {
                if (index == data_state) {
                        int s = state.state;
-                       if (s < Altos.ao_flight_boost || s > Altos.ao_flight_landed)
-                               return -1;
-                       return s;
+                       if (Altos.ao_flight_boost <= s && s <= Altos.ao_flight_landed)
+                               return s;
                } else if (data_ignitor_fired_0 <= index && index <= data_ignitor_fired_max) {
                        int ignitor = index - data_ignitor_fired_0;
                        if (state.ignitor_voltage != null && ignitor < state.ignitor_voltage.length) {
@@ -202,7 +222,7 @@ public class AltosGraphDataPoint implements AltosUIDataPoint {
                                }
                        }
                }
-               return 0;
+               return -1;
        }
 
        public String id_name(int index) {