X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosPad.java;h=06a0f1efa2bc9c3855c2760bbfb3b71ff9a2b0e3;hp=669543472a71ff3074ad823f0e24c562dcc4220e;hb=2ad31bad20b20615e9d8b29088e2488fddc81ac9;hpb=f01096c4b42f9a4720ed0414826c2a283a992545 diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index 66954347..06a0f1ef 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -18,15 +18,8 @@ package altosui; import java.awt.*; -import java.awt.event.*; import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; -import java.io.*; -import java.util.*; -import java.text.*; -import java.util.prefs.*; -import java.util.concurrent.LinkedBlockingQueue; +import org.altusmetrum.altoslib_2.*; public class AltosPad extends JComponent implements AltosFlightDisplay { GridBagLayout layout; @@ -36,12 +29,47 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { JTextField value; AltosLights lights; - void show(AltosState state, int crc_errors) {} + void show(AltosState state, AltosListenerState listener_state) {} + void reset() { value.setText(""); lights.set(false); } + public void show() { + label.setVisible(true); + value.setVisible(true); + lights.setVisible(true); + } + + void show(String s) { + show(); + value.setText(s); + } + + void show(String format, double value) { + show(String.format(format, value)); + } + + void show(String format, int value) { + show(String.format(format, value)); + } + + public void hide() { + label.setVisible(false); + value.setVisible(false); + lights.setVisible(false); + } + + public void set_font() { + label.setFont(Altos.label_font); + value.setFont(Altos.value_font); + } + + public void set_label(String text) { + label.setText(text); + } + public LaunchStatus (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.weighty = 1; @@ -81,11 +109,44 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { public class LaunchValue { JLabel label; JTextField value; - void show(AltosState state, int crc_errors) {} + void show(AltosState state, AltosListenerState listener_state) {} + void show() { + label.setVisible(true); + value.setVisible(true); + } + + void hide() { + label.setVisible(false); + value.setVisible(false); + } + + public void set_font() { + label.setFont(Altos.label_font); + value.setFont(Altos.value_font); + } + + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + + public void set_label(String text) { + label.setText(text); + } + void reset() { value.setText(""); } + public LaunchValue (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad); @@ -114,9 +175,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { } class Battery extends LaunchStatus { - void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.2f V", state.battery)); - lights.set(state.battery > 3.7); + void show (AltosState state, AltosListenerState listener_state) { + if (state == null || state.battery_voltage == AltosLib.MISSING) + hide(); + else { + show("%4.2f V", state.battery_voltage); + lights.set(state.battery_voltage >= AltosLib.ao_battery_good); + } } public Battery (GridBagLayout layout, int y) { super(layout, y, "Battery Voltage"); @@ -126,9 +191,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { Battery battery; class Apogee extends LaunchStatus { - void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.2f V", state.drogue_sense)); - lights.set(state.drogue_sense > 3.2); + void show (AltosState state, AltosListenerState listener_state) { + if (state == null || state.apogee_voltage == AltosLib.MISSING) + hide(); + else { + show("%4.2f V", state.apogee_voltage); + lights.set(state.apogee_voltage >= AltosLib.ao_igniter_good); + } } public Apogee (GridBagLayout layout, int y) { super(layout, y, "Apogee Igniter Voltage"); @@ -138,9 +207,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { Apogee apogee; class Main extends LaunchStatus { - void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.2f V", state.main_sense)); - lights.set(state.main_sense > 3.2); + void show (AltosState state, AltosListenerState listener_state) { + if (state == null || state.main_voltage == AltosLib.MISSING) + hide(); + else { + show("%4.2f V", state.main_voltage); + lights.set(state.main_voltage >= AltosLib.ao_igniter_good); + } } public Main (GridBagLayout layout, int y) { super(layout, y, "Main Igniter Voltage"); @@ -149,10 +222,38 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { Main main; + class LoggingReady extends LaunchStatus { + void show (AltosState state, AltosListenerState listener_state) { + if (state == null || state.flight == AltosLib.MISSING) { + hide(); + } else { + if (state.flight != 0) { + if (state.state <= Altos.ao_flight_pad) + show("Ready to record"); + else if (state.state < Altos.ao_flight_landed) + show("Recording data"); + else + show("Recorded data"); + } else + show("Storage full"); + lights.set(state.flight != 0); + } + } + public LoggingReady (GridBagLayout layout, int y) { + super(layout, y, "On-board Data Logging"); + } + } + + LoggingReady logging_ready; + class GPSLocked extends LaunchStatus { - void show (AltosState state, int crc_errors) { - value.setText(String.format("%4d sats", state.gps.nsat)); - lights.set(state.gps.locked); + void show (AltosState state, AltosListenerState listener_state) { + if (state == null || state.gps == null) + hide(); + else { + show("%4d sats", state.gps.nsat); + lights.set(state.gps.locked && state.gps.nsat >= 4); + } } public GPSLocked (GridBagLayout layout, int y) { super (layout, y, "GPS Locked"); @@ -162,12 +263,16 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { GPSLocked gps_locked; class GPSReady extends LaunchStatus { - void show (AltosState state, int crc_errors) { - if (state.gps_ready) - value.setText("Ready"); - else - value.setText(String.format("Waiting %d", state.gps_waiting)); - lights.set(state.gps_ready); + void show (AltosState state, AltosListenerState listener_state) { + if (state == null || state.gps == null) + hide(); + else { + if (state.gps_ready) + show("Ready"); + else + show("Waiting %d", state.gps_waiting); + lights.set(state.gps_ready); + } } public GPSReady (GridBagLayout layout, int y) { super (layout, y, "GPS Ready"); @@ -176,6 +281,22 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { GPSReady gps_ready; + class ReceiverBattery extends LaunchStatus { + void show (AltosState state, AltosListenerState listener_state) { + if (listener_state == null || listener_state.battery == AltosLib.MISSING) + hide(); + else { + show("%4.2f V", listener_state.battery); + lights.set(listener_state.battery > AltosLib.ao_battery_good); + } + } + public ReceiverBattery (GridBagLayout layout, int y) { + super(layout, y, "Receiver Battery"); + } + } + + ReceiverBattery receiver_battery; + String pos(double p, String pos, String neg) { String h = pos; if (p < 0) { @@ -188,8 +309,24 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { } class PadLat extends LaunchValue { - void show (AltosState state, int crc_errors) { - value.setText(pos(state.pad_lat,"N", "S")); + void show (AltosState state, AltosListenerState listener_state) { + double lat = AltosLib.MISSING; + String label = null; + + if (state != null) { + if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lat != AltosLib.MISSING) { + lat = state.gps.lat; + label = "Latitude"; + } else { + lat = state.pad_lat; + label = "Pad Latitude"; + } + } + if (lat != AltosLib.MISSING) { + show(pos(lat,"N", "S")); + set_label(label); + } else + hide(); } public PadLat (GridBagLayout layout, int y) { super (layout, y, "Pad Latitude"); @@ -199,8 +336,24 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { PadLat pad_lat; class PadLon extends LaunchValue { - void show (AltosState state, int crc_errors) { - value.setText(pos(state.pad_lon,"E", "W")); + void show (AltosState state, AltosListenerState listener_state) { + double lon = AltosLib.MISSING; + String label = null; + + if (state != null) { + if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lon != AltosLib.MISSING) { + lon = state.gps.lon; + label = "Longitude"; + } else { + lon = state.pad_lon; + label = "Pad Longitude"; + } + } + if (lon != AltosLib.MISSING) { + show(pos(lon,"E", "W")); + set_label(label); + } else + hide(); } public PadLon (GridBagLayout layout, int y) { super (layout, y, "Pad Longitude"); @@ -210,8 +363,24 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { PadLon pad_lon; class PadAlt extends LaunchValue { - void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.0f m", state.pad_alt)); + void show (AltosState state, AltosListenerState listener_state) { + double alt = AltosLib.MISSING; + String label = null; + + if (state != null) { + if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.alt != AltosLib.MISSING) { + alt = state.gps.alt; + label = "Altitude"; + } else { + alt = state.pad_alt; + label = "Pad Altitude"; + } + } + if (alt != AltosLib.MISSING) { + show("%4.0f m", state.gps.alt); + set_label(label); + } else + hide(); } public PadAlt (GridBagLayout layout, int y) { super (layout, y, "Pad Altitude"); @@ -224,22 +393,39 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { battery.reset(); apogee.reset(); main.reset(); + logging_ready.reset(); gps_locked.reset(); gps_ready.reset(); + receiver_battery.reset(); pad_lat.reset(); pad_lon.reset(); pad_alt.reset(); } - public void show(AltosState state, int crc_errors) { - battery.show(state, crc_errors); - apogee.show(state, crc_errors); - main.show(state, crc_errors); - gps_locked.show(state, crc_errors); - gps_ready.show(state, crc_errors); - pad_lat.show(state, crc_errors); - pad_lon.show(state, crc_errors); - pad_alt.show(state, crc_errors); + public void set_font() { + battery.set_font(); + apogee.set_font(); + main.set_font(); + logging_ready.set_font(); + gps_locked.set_font(); + gps_ready.set_font(); + receiver_battery.set_font(); + pad_lat.set_font(); + pad_lon.set_font(); + pad_alt.set_font(); + } + + public void show(AltosState state, AltosListenerState listener_state) { + battery.show(state, listener_state); + apogee.show(state, listener_state); + main.show(state, listener_state); + logging_ready.show(state, listener_state); + pad_alt.show(state, listener_state); + receiver_battery.show(state, listener_state); + gps_locked.show(state, listener_state); + gps_ready.show(state, listener_state); + pad_lat.show(state, listener_state); + pad_lon.show(state, listener_state); } public AltosPad() { @@ -260,10 +446,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { battery = new Battery(layout, 0); apogee = new Apogee(layout, 1); main = new Main(layout, 2); - gps_locked = new GPSLocked(layout, 3); - gps_ready = new GPSReady(layout, 4); - pad_lat = new PadLat(layout, 5); - pad_lon = new PadLon(layout, 6); - pad_alt = new PadAlt(layout, 7); + logging_ready = new LoggingReady(layout, 3); + gps_locked = new GPSLocked(layout, 4); + gps_ready = new GPSReady(layout, 5); + receiver_battery = new ReceiverBattery(layout, 6); + pad_lat = new PadLat(layout, 7); + pad_lon = new PadLon(layout, 8); + pad_alt = new PadAlt(layout, 9); + show(null, null); } }