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; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22 import org.altusmetrum.altoslib_11.*;
23 import org.altusmetrum.altosuilib_11.*;
25 public class AltosPad extends AltosUIFlightTab {
27 class Battery extends AltosUIVoltageIndicator {
28 public double voltage(AltosState state) { return state.battery_voltage; }
29 public double good() { return AltosLib.ao_battery_good; }
30 public Battery (AltosUIFlightTab container, int y) { super(container, y, "Battery Voltage", 2); }
33 class Apogee extends AltosUIVoltageIndicator {
34 public boolean hide(double v) { return v == AltosLib.MISSING; }
35 public double voltage(AltosState state) { return state.apogee_voltage; }
36 public double good() { return AltosLib.ao_igniter_good; }
37 public Apogee (AltosUIFlightTab container, int y) { super(container, y, "Apogee Igniter Voltage", 2); }
40 class Main extends AltosUIVoltageIndicator {
41 public boolean hide(double v) { return v == AltosLib.MISSING; }
42 public double voltage(AltosState state) { return state.main_voltage; }
43 public double good() { return AltosLib.ao_igniter_good; }
44 public Main (AltosUIFlightTab container, int y) { super(container, y, "Main Igniter Voltage", 2); }
47 class LoggingReady extends AltosUIIndicator {
48 public void show (AltosState state, AltosListenerState listener_state) {
49 if (state == null || state.flight == AltosLib.MISSING) {
52 if (state.flight != 0) {
53 if (state.state() <= Altos.ao_flight_pad)
54 show("Ready to record");
55 else if (state.state() < Altos.ao_flight_landed ||
56 state.state() == AltosLib.ao_flight_stateless)
57 show("Recording data");
59 show("Recorded data");
62 set_lights(state.flight != 0);
65 public LoggingReady (AltosUIFlightTab container, int y) {
66 super(container, y, "On-board Data Logging", 1, true, 2);
70 class GPSLocked extends AltosUIIndicator {
71 public void show (AltosState state, AltosListenerState listener_state) {
72 if (state == null || state.gps == null)
75 int sol = state.gps.nsat;
76 int sat = state.gps.cc_gps_sat == null ? 0 : state.gps.cc_gps_sat.length;
77 show("%d in solution", sol, "%d in view", sat);
78 set_lights(state.gps.locked && sol >= 4);
81 public GPSLocked (AltosUIFlightTab container, int y) {
82 super (container, y, "GPS Locked", 2, true, 1);
86 class GPSReady extends AltosUIIndicator {
87 public void show (AltosState state, AltosListenerState listener_state) {
88 if (state == null || state.gps == null)
94 show("Waiting %d", state.gps_waiting);
95 set_lights(state.gps_ready);
98 public GPSReady (AltosUIFlightTab container, int y) {
99 super (container, y, "GPS Ready", 1, true, 2);
103 class ReceiverBattery extends AltosUIVoltageIndicator {
105 double last_voltage = AltosLib.MISSING;
107 public double voltage(AltosState state) {
111 public double good() { return AltosLib.ao_battery_good; }
113 public boolean hide(AltosState state, AltosListenerState listener_state, int i) {
114 return value(state, listener_state, i) == AltosLib.MISSING;
117 public double value(AltosState state, AltosListenerState listener_state, int i) {
118 if (listener_state == null)
119 last_voltage = AltosLib.MISSING;
121 last_voltage = listener_state.battery;
125 public ReceiverBattery (AltosUIFlightTab container, int y) {
126 super(container, y, "Receiver Battery", 2);
130 boolean report_pad(AltosState state) {
131 if ((state.state() == AltosLib.ao_flight_stateless ||
132 state.state() < AltosLib.ao_flight_pad) &&
134 state.gps.lat != AltosLib.MISSING)
141 class PadLat extends AltosUIIndicator {
143 double last_lat = AltosLib.MISSING - 1;
145 public void show (AltosState state, AltosListenerState listener_state) {
146 double lat = AltosLib.MISSING;
150 if (report_pad(state)) {
152 label = "Pad Latitude";
158 if (lat != last_lat) {
159 if (lat != AltosLib.MISSING) {
160 show(AltosConvert.latitude.show(10, lat));
168 public void reset() {
170 last_lat = AltosLib.MISSING - 1;
173 public PadLat (AltosUIFlightTab container, int y) {
174 super (container, y, "Pad Latitude", 1, false, 2);
178 class PadLon extends AltosUIIndicator {
180 double last_lon = AltosLib.MISSING - 1;
182 public void show (AltosState state, AltosListenerState listener_state) {
183 double lon = AltosLib.MISSING;
187 if (report_pad(state)) {
189 label = "Pad Longitude";
195 if (lon != last_lon) {
196 if (lon != AltosLib.MISSING) {
197 show(AltosConvert.longitude.show(10, lon));
205 public void reset() {
207 last_lon = AltosLib.MISSING - 1;
210 public PadLon (AltosUIFlightTab container, int y) {
211 super (container, y, "Pad Longitude", 1, false, 2);
215 class PadAlt extends AltosUIUnitsIndicator {
217 public double value(AltosState state, int i) {
218 if (report_pad(state))
219 return state.pad_alt;
221 return state.gps.alt;
224 public void show (AltosState state, AltosListenerState listener_state) {
225 String label = "Altitude";
227 if (state != null && report_pad(state))
228 label = "Pad Altitude";
230 super.show(state, listener_state);
233 public PadAlt (AltosUIFlightTab container, int y) {
234 super (container, y, AltosConvert.height, "Pad Altitude", 1, false, 2);
237 public String getName() { return "Pad"; }
241 add(new Battery(this, y++));
242 add(new ReceiverBattery(this, y++));
243 add(new Apogee(this, y++));
244 add(new Main(this, y++));
245 add(new LoggingReady(this, y++));
246 add(new GPSLocked(this, y++));
247 add(new GPSReady(this, y++));
248 add(new PadLat(this, y++));
249 add(new PadLon(this, y++));
250 add(new PadAlt(this, y++));