2 * Copyright © 2010 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
21 import org.altusmetrum.altoslib_4.*;
22 import org.altusmetrum.altosuilib_2.*;
24 public class AltosPad extends AltosUIFlightTab {
26 class Battery extends AltosUIVoltageIndicator {
27 public double voltage(AltosState state) { return state.battery_voltage; }
28 public double good() { return AltosLib.ao_battery_good; }
29 public Battery (AltosUIFlightTab container, int y) { super(container, y, "Battery Voltage", 2); }
32 class Apogee extends AltosUIVoltageIndicator {
33 public boolean hide(double v) { return v == AltosLib.MISSING; }
34 public double voltage(AltosState state) { return state.apogee_voltage; }
35 public double good() { return AltosLib.ao_igniter_good; }
36 public Apogee (AltosUIFlightTab container, int y) { super(container, y, "Apogee Igniter Voltage", 2); }
39 class Main extends AltosUIVoltageIndicator {
40 public boolean hide(double v) { return v == AltosLib.MISSING; }
41 public double voltage(AltosState state) { return state.main_voltage; }
42 public double good() { return AltosLib.ao_igniter_good; }
43 public Main (AltosUIFlightTab container, int y) { super(container, y, "Main Igniter Voltage", 2); }
46 class LoggingReady extends AltosUIIndicator {
47 public void show (AltosState state, AltosListenerState listener_state) {
48 if (state == null || state.flight == AltosLib.MISSING) {
51 if (state.flight != 0) {
52 if (state.state <= Altos.ao_flight_pad)
53 show("Ready to record");
54 else if (state.state < Altos.ao_flight_landed ||
55 state.state == AltosLib.ao_flight_stateless)
56 show("Recording data");
58 show("Recorded data");
61 set_lights(state.flight != 0);
64 public LoggingReady (AltosUIFlightTab container, int y) {
65 super(container, y, "On-board Data Logging", 1, true, 2);
69 class GPSLocked extends AltosUIIndicator {
70 public void show (AltosState state, AltosListenerState listener_state) {
71 if (state == null || state.gps == null)
74 int sol = state.gps.nsat;
75 int sat = state.gps.cc_gps_sat == null ? 0 : state.gps.cc_gps_sat.length;
76 show("%d in solution", sol, "%d in view", sat);
77 set_lights(state.gps.locked && sol >= 4);
80 public GPSLocked (AltosUIFlightTab container, int y) {
81 super (container, y, "GPS Locked", 2, true, 1);
85 class GPSReady extends AltosUIIndicator {
86 public void show (AltosState state, AltosListenerState listener_state) {
87 if (state == null || state.gps == null)
93 show("Waiting %d", state.gps_waiting);
94 set_lights(state.gps_ready);
97 public GPSReady (AltosUIFlightTab container, int y) {
98 super (container, y, "GPS Ready", 1, true, 2);
102 class ReceiverBattery extends AltosUIVoltageIndicator {
104 public double voltage(AltosState state) { return AltosLib.MISSING; }
106 public boolean hide(double v) { return v == AltosLib.MISSING; }
107 public double good() { return AltosLib.ao_battery_good; }
109 public double value(AltosState state, AltosListenerState listener_state, int i) {
110 if (listener_state == null)
111 return AltosLib.MISSING;
112 return listener_state.battery;
115 public ReceiverBattery (AltosUIFlightTab container, int y) {
116 super(container, y, "Receiver Battery", 2);
120 class PadLat extends AltosUIIndicator {
122 double last_lat = AltosLib.MISSING - 1;
124 public void show (AltosState state, AltosListenerState listener_state) {
125 double lat = AltosLib.MISSING;
129 if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lat != AltosLib.MISSING) {
134 label = "Pad Latitude";
137 if (lat != last_lat) {
138 if (lat != AltosLib.MISSING) {
139 show(AltosConvert.latitude.show(10, lat));
147 public void reset() {
149 last_lat = AltosLib.MISSING - 1;
152 public PadLat (AltosUIFlightTab container, int y) {
153 super (container, y, "Pad Latitude", 1, false, 2);
157 class PadLon extends AltosUIIndicator {
159 double last_lon = AltosLib.MISSING - 1;
161 public void show (AltosState state, AltosListenerState listener_state) {
162 double lon = AltosLib.MISSING;
166 if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lon != AltosLib.MISSING) {
171 label = "Pad Longitude";
174 if (lon != last_lon) {
175 if (lon != AltosLib.MISSING) {
176 show(AltosConvert.longitude.show(10, lon));
184 public void reset() {
186 last_lon = AltosLib.MISSING - 1;
189 public PadLon (AltosUIFlightTab container, int y) {
190 super (container, y, "Pad Longitude", 1, false, 2);
194 class PadAlt extends AltosUIIndicator {
196 double last_alt = AltosLib.MISSING - 1;
198 public void show (AltosState state, AltosListenerState listener_state) {
199 double alt = AltosLib.MISSING;
203 if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.alt != AltosLib.MISSING) {
208 label = "Pad Altitude";
211 if (alt != last_alt) {
212 if (alt != AltosLib.MISSING) {
213 show(AltosConvert.height.show(5, alt));
221 public void reset() {
223 last_alt = AltosLib.MISSING - 1;
226 public PadAlt (AltosUIFlightTab container, int y) {
227 super (container, y, "Pad Altitude", 1, false, 2);
230 public String getName() { return "Pad"; }
234 add(new Battery(this, y++));
235 add(new Apogee(this, y++));
236 add(new Main(this, y++));
237 add(new LoggingReady(this, y++));
238 add(new GPSLocked(this, y++));
239 add(new GPSReady(this, y++));
240 add(new ReceiverBattery(this, y++));
241 add(new PadLat(this, y++));
242 add(new PadLon(this, y++));
243 add(new PadAlt(this, y++));