diff options
Diffstat (limited to 'altosui')
50 files changed, 537 insertions, 154 deletions
diff --git a/altosui/Altos.java b/altosui/Altos.java index 07280b4a..4b171fa7 100644 --- a/altosui/Altos.java +++ b/altosui/Altos.java @@ -20,7 +20,7 @@ package altosui; import java.awt.*; import libaltosJNI.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class Altos extends AltosUILib { diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java index ba4fc614..3f74fdd1 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -19,7 +19,7 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosAscent extends JComponent implements AltosFlightDisplay { GridBagLayout layout; @@ -271,6 +271,17 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { Accel accel; + class Orient extends AscentValueHold { + void show (AltosState state, AltosListenerState listener_state) { + show(AltosConvert.orient, state.orient()); + } + public Orient (GridBagLayout layout, int y) { + super (layout, y, "Tilt Angle"); + } + } + + Orient orient; + String pos(double p, String pos, String neg) { String h = pos; if (p < 0) { @@ -342,6 +353,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { height.reset(); speed.reset(); accel.reset(); + orient.reset(); } public void set_font() { @@ -354,6 +366,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { height.set_font(); speed.set_font(); accel.set_font(); + orient.set_font(); } public void show(AltosState state, AltosListenerState listener_state) { @@ -375,6 +388,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { apogee.hide(); speed.show(state, listener_state); accel.show(state, listener_state); + orient.show(state, listener_state); } public void labels(GridBagLayout layout, int y) { @@ -410,13 +424,15 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { * lon * height */ - labels(layout, 0); - height = new Height(layout, 1); - speed = new Speed(layout, 2); - accel = new Accel(layout, 3); - lat = new Lat(layout, 4); - lon = new Lon(layout, 5); - apogee = new Apogee(layout, 6); - main = new Main(layout, 7); + int y = 0; + labels(layout, y++); + height = new Height(layout, y++); + speed = new Speed(layout, y++); + accel = new Accel(layout, y++); + orient = new Orient(layout, y++); + lat = new Lat(layout, y++); + lon = new Lon(layout, y++); + apogee = new Apogee(layout, y++); + main = new Main(layout, y++); } } diff --git a/altosui/AltosBTKnown.java b/altosui/AltosBTKnown.java index a1652ec4..968d72d5 100644 --- a/altosui/AltosBTKnown.java +++ b/altosui/AltosBTKnown.java @@ -17,7 +17,7 @@ package altosui; import java.util.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosBTKnown implements Iterable<AltosBTDevice> { diff --git a/altosui/AltosCSV.java b/altosui/AltosCSV.java index 7598eca0..13f29f07 100644 --- a/altosui/AltosCSV.java +++ b/altosui/AltosCSV.java @@ -19,7 +19,7 @@ package altosui; import java.io.*; import java.util.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosCSV implements AltosWriter { File name; diff --git a/altosui/AltosCSVUI.java b/altosui/AltosCSVUI.java index c41ea74b..05cabcdf 100644 --- a/altosui/AltosCSVUI.java +++ b/altosui/AltosCSVUI.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosCSVUI diff --git a/altosui/AltosCompanionInfo.java b/altosui/AltosCompanionInfo.java index 1f446700..4cc6c462 100644 --- a/altosui/AltosCompanionInfo.java +++ b/altosui/AltosCompanionInfo.java @@ -19,7 +19,7 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosCompanionInfo extends JTable { private AltosFlightInfoTableModel model; diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index 206cbee3..e1805fc1 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -22,7 +22,7 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.text.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosConfig implements ActionListener { diff --git a/altosui/AltosConfigFreqUI.java b/altosui/AltosConfigFreqUI.java index 555af3b6..e9923a32 100644 --- a/altosui/AltosConfigFreqUI.java +++ b/altosui/AltosConfigFreqUI.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; class AltosEditFreqUI extends AltosUIDialog implements ActionListener { diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java index 81d12111..47b2b662 100644 --- a/altosui/AltosConfigPyroUI.java +++ b/altosui/AltosConfigPyroUI.java @@ -21,12 +21,12 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosConfigPyroUI extends AltosUIDialog - implements ItemListener, DocumentListener, AltosUnitsListener + implements ItemListener, DocumentListener, AltosUnitsListener, ActionListener { AltosConfigUI owner; Container pane; @@ -48,7 +48,7 @@ public class AltosConfigPyroUI class PyroItem implements ItemListener, DocumentListener, AltosUnitsListener { public int flag; - public JRadioButton enable; + public JCheckBox enable; public JTextField value; public JComboBox combo; AltosConfigPyroUI ui; @@ -146,7 +146,7 @@ public class AltosConfigPyroUI c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; c.insets = il; - enable = new JRadioButton(); + enable = new JCheckBox(); enable.addItemListener(this); pane.add(enable, c); @@ -309,6 +309,14 @@ public class AltosConfigPyroUI } } + /* Listen for events from our buttons */ + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + + if (cmd.equals("Close")) + setVisible(false); + } + public AltosConfigPyroUI(AltosConfigUI in_owner, AltosPyro[] pyros) { super(in_owner, "Configure Pyro Channels", false); @@ -353,6 +361,17 @@ public class AltosConfigPyroUI columns[i] = new PyroColumn(this, i*2 + 1, 0, i); columns[i].set(pyros[i]); } + + c = new GridBagConstraints(); + c.gridx = pyros.length*2-1; + c.fill = GridBagConstraints.HORIZONTAL; + c.gridwidth = 2; + c.gridy = 1000; + JButton close = new JButton("Close"); + pane.add(close, c); + close.addActionListener(this); + close.setActionCommand("Close"); + addWindowListener(new ConfigListener(this, owner)); AltosPreferences.register_units_listener(this); } diff --git a/altosui/AltosConfigTD.java b/altosui/AltosConfigTD.java index f879ff88..ad9ebbfa 100644 --- a/altosui/AltosConfigTD.java +++ b/altosui/AltosConfigTD.java @@ -21,7 +21,7 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosConfigTD implements ActionListener { diff --git a/altosui/AltosConfigTDUI.java b/altosui/AltosConfigTDUI.java index b5a6cd7c..3ce0d98c 100644 --- a/altosui/AltosConfigTDUI.java +++ b/altosui/AltosConfigTDUI.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosConfigTDUI diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index a7d95903..21ea50e6 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosConfigUI diff --git a/altosui/AltosDataChooser.java b/altosui/AltosDataChooser.java index c0d66682..a9344a01 100644 --- a/altosui/AltosDataChooser.java +++ b/altosui/AltosDataChooser.java @@ -20,7 +20,7 @@ package altosui; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosDataChooser extends JFileChooser { diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java index e73d990c..d1379083 100644 --- a/altosui/AltosDescent.java +++ b/altosui/AltosDescent.java @@ -19,7 +19,7 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosDescent extends JComponent implements AltosFlightDisplay { GridBagLayout layout; diff --git a/altosui/AltosDisplayThread.java b/altosui/AltosDisplayThread.java index 4b4cc3b9..2a33f996 100644 --- a/altosui/AltosDisplayThread.java +++ b/altosui/AltosDisplayThread.java @@ -21,7 +21,7 @@ import java.awt.*; import javax.swing.*; import java.io.*; import java.text.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosDisplayThread extends Thread { diff --git a/altosui/AltosEepromDelete.java b/altosui/AltosEepromDelete.java index 9984d1a2..b2d2e291 100644 --- a/altosui/AltosEepromDelete.java +++ b/altosui/AltosEepromDelete.java @@ -21,7 +21,7 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosEepromDelete implements Runnable { AltosEepromList flights; diff --git a/altosui/AltosEepromManage.java b/altosui/AltosEepromManage.java index da0a9777..e3635571 100644 --- a/altosui/AltosEepromManage.java +++ b/altosui/AltosEepromManage.java @@ -21,7 +21,7 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosEepromManage implements ActionListener { diff --git a/altosui/AltosEepromMonitorUI.java b/altosui/AltosEepromMonitorUI.java index 6ad4ca5c..c2e925a2 100644 --- a/altosui/AltosEepromMonitorUI.java +++ b/altosui/AltosEepromMonitorUI.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import org.altusmetrum.altosuilib_1.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor { JFrame owner; diff --git a/altosui/AltosEepromSelect.java b/altosui/AltosEepromSelect.java index 8f86eebf..b7cdbb72 100644 --- a/altosui/AltosEepromSelect.java +++ b/altosui/AltosEepromSelect.java @@ -21,7 +21,7 @@ import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; class AltosEepromItem implements ActionListener { diff --git a/altosui/AltosFlashUI.java b/altosui/AltosFlashUI.java index 296ad8ef..5913e506 100644 --- a/altosui/AltosFlashUI.java +++ b/altosui/AltosFlashUI.java @@ -23,7 +23,7 @@ import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosFlashUI diff --git a/altosui/AltosFlightDisplay.java b/altosui/AltosFlightDisplay.java index 289ddd01..c1264259 100644 --- a/altosui/AltosFlightDisplay.java +++ b/altosui/AltosFlightDisplay.java @@ -17,7 +17,7 @@ package altosui; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public interface AltosFlightDisplay { void reset(); diff --git a/altosui/AltosFlightStats.java b/altosui/AltosFlightStats.java index 552210c3..bf5644c3 100644 --- a/altosui/AltosFlightStats.java +++ b/altosui/AltosFlightStats.java @@ -18,7 +18,7 @@ package altosui; import java.io.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosFlightStats { double max_height; @@ -38,6 +38,9 @@ public class AltosFlightStats { boolean has_gps; boolean has_other_adc; boolean has_rssi; + boolean has_imu; + boolean has_mag; + boolean has_orient; double landed_time(AltosStateIterable states) { AltosState state = null; @@ -108,6 +111,9 @@ public class AltosFlightStats { has_gps = false; has_other_adc = false; has_rssi = false; + has_imu = false; + has_mag = false; + has_orient = false; for (AltosState state : states) { if (serial == AltosLib.MISSING && state.serial != AltosLib.MISSING) serial = state.serial; @@ -157,6 +163,12 @@ public class AltosFlightStats { lon = state.gps.lon; has_gps = true; } + if (state.imu != null) + has_imu = true; + if (state.mag != null) + has_mag = true; + if (state.orient() != AltosLib.MISSING) + has_orient = true; } for (int s = Altos.ao_flight_startup; s <= Altos.ao_flight_landed; s++) { if (state_count[s] > 0) { diff --git a/altosui/AltosFlightStatsTable.java b/altosui/AltosFlightStatsTable.java index db875b3b..3e7e9fe1 100644 --- a/altosui/AltosFlightStatsTable.java +++ b/altosui/AltosFlightStatsTable.java @@ -19,7 +19,7 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosFlightStatsTable extends JComponent { GridBagLayout layout; diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java index 9d575e4c..c6d75420 100644 --- a/altosui/AltosFlightStatus.java +++ b/altosui/AltosFlightStatus.java @@ -19,7 +19,7 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosFlightStatus extends JComponent implements AltosFlightDisplay { GridBagLayout layout; diff --git a/altosui/AltosFlightStatusTableModel.java b/altosui/AltosFlightStatusTableModel.java index 08154fda..e372d401 100644 --- a/altosui/AltosFlightStatusTableModel.java +++ b/altosui/AltosFlightStatusTableModel.java @@ -27,7 +27,7 @@ import java.util.*; import java.text.*; import java.util.prefs.*; import java.util.concurrent.LinkedBlockingQueue; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosFlightStatusTableModel extends AbstractTableModel { private String[] columnNames = { diff --git a/altosui/AltosFlightStatusUpdate.java b/altosui/AltosFlightStatusUpdate.java index 7821a777..93399a13 100644 --- a/altosui/AltosFlightStatusUpdate.java +++ b/altosui/AltosFlightStatusUpdate.java @@ -18,7 +18,7 @@ package altosui; import java.awt.event.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosFlightStatusUpdate implements ActionListener { diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index c151177e..e8cf7f08 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener { diff --git a/altosui/AltosFreqList.java b/altosui/AltosFreqList.java index 17a995d4..039b5f22 100644 --- a/altosui/AltosFreqList.java +++ b/altosui/AltosFreqList.java @@ -18,7 +18,7 @@ package altosui; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosFreqList extends JComboBox { diff --git a/altosui/AltosGraph.java b/altosui/AltosGraph.java index c505d2d8..42334e31 100644 --- a/altosui/AltosGraph.java +++ b/altosui/AltosGraph.java @@ -22,7 +22,7 @@ import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; import org.jfree.ui.*; @@ -127,6 +127,52 @@ class AltosDbm extends AltosUnits { } } +class AltosGyroUnits 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 "°/sec"; + } + + public String say_units(boolean imperial_units) { + return "degrees per second"; + } + + public int show_fraction(int width, boolean imperial_units) { + return 1; + } +} + +class AltosMagUnits 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 "Ga"; + } + + public String say_units(boolean imperial_units) { + return "gauss"; + } + + public int show_fraction(int width, boolean imperial_units) { + return 2; + } +} + public class AltosGraph extends AltosUIGraph { static final private Color height_color = new Color(194,31,31); @@ -146,14 +192,28 @@ public class AltosGraph extends AltosUIGraph { 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); + static final private Color accel_x_color = new Color(255, 0, 0); + static final private Color accel_y_color = new Color(0, 255, 0); + static final private Color accel_z_color = new Color(0, 0, 255); + static final private Color gyro_x_color = new Color(192, 0, 0); + static final private Color gyro_y_color = new Color(0, 192, 0); + static final private Color gyro_z_color = new Color(0, 0, 192); + static final private Color mag_x_color = new Color(128, 0, 0); + static final private Color mag_y_color = new Color(0, 128, 0); + static final private Color mag_z_color = new Color(0, 0, 128); + static final private Color orient_color = new Color(31, 31, 31); static AltosVoltage voltage_units = new AltosVoltage(); static AltosPressure pressure_units = new AltosPressure(); static AltosNsat nsat_units = new AltosNsat(); static AltosDbm dbm_units = new AltosDbm(); + static AltosGyroUnits gyro_units = new AltosGyroUnits(); + static AltosOrient orient_units = new AltosOrient(); + static AltosMagUnits mag_units = new AltosMagUnits(); 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; public AltosGraph(AltosUIEnable enable, AltosFlightStats stats, AltosGraphDataSet dataSet) { super(enable); @@ -169,6 +229,10 @@ public class AltosGraph extends AltosUIGraph { dbm_axis = newAxis("Signal Strength", dbm_units, dbm_color, 0); distance_axis = newAxis("Distance", AltosConvert.distance, range_color); + 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); + addMarker("State", AltosGraphDataPoint.data_state, state_color); addSeries("Height", AltosGraphDataPoint.data_height, @@ -260,6 +324,72 @@ public class AltosGraph extends AltosUIGraph { voltage_axis); } + if (stats.has_imu) { + addSeries("Acceleration X", + AltosGraphDataPoint.data_accel_x, + AltosConvert.accel, + accel_x_color, + false, + accel_axis); + addSeries("Acceleration Y", + AltosGraphDataPoint.data_accel_y, + AltosConvert.accel, + accel_y_color, + false, + accel_axis); + addSeries("Acceleration Z", + AltosGraphDataPoint.data_accel_z, + AltosConvert.accel, + accel_z_color, + false, + accel_axis); + addSeries("Rotation Rate X", + AltosGraphDataPoint.data_gyro_x, + gyro_units, + gyro_x_color, + false, + gyro_axis); + addSeries("Rotation Rate Y", + AltosGraphDataPoint.data_gyro_y, + gyro_units, + gyro_y_color, + false, + gyro_axis); + addSeries("Rotation Rate Z", + AltosGraphDataPoint.data_gyro_z, + gyro_units, + gyro_z_color, + false, + gyro_axis); + } + if (stats.has_mag) { + addSeries("Magnetometer X", + AltosGraphDataPoint.data_mag_x, + mag_units, + mag_x_color, + false, + mag_axis); + addSeries("Magnetometer Y", + AltosGraphDataPoint.data_mag_y, + mag_units, + mag_y_color, + false, + mag_axis); + addSeries("Magnetometer Z", + AltosGraphDataPoint.data_mag_z, + mag_units, + mag_z_color, + false, + mag_axis); + } + if (stats.has_orient) + addSeries("Tilt Angle", + AltosGraphDataPoint.data_orient, + orient_units, + orient_color, + false, + orient_axis); + setDataSet(dataSet); } }
\ No newline at end of file diff --git a/altosui/AltosGraphDataPoint.java b/altosui/AltosGraphDataPoint.java index d8191f5d..61a1a227 100644 --- a/altosui/AltosGraphDataPoint.java +++ b/altosui/AltosGraphDataPoint.java @@ -18,7 +18,7 @@ package altosui; import org.altusmetrum.altosuilib_1.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosGraphDataPoint implements AltosUIDataPoint { @@ -40,6 +40,16 @@ public class AltosGraphDataPoint implements AltosUIDataPoint { public static final int data_range = 13; public static final int data_distance = 14; public static final int data_pressure = 15; + public static final int data_accel_x = 16; + public static final int data_accel_y = 17; + public static final int data_accel_z = 18; + public static final int data_gyro_x = 19; + public static final int data_gyro_y = 20; + public static final int data_gyro_z = 21; + public static final int data_mag_x = 22; + public static final int data_mag_y = 23; + public static final int data_mag_z = 24; + public static final int data_orient = 25; public double x() throws AltosUIDataMissing { double time = state.time_since_boost(); @@ -99,6 +109,58 @@ public class AltosGraphDataPoint implements AltosUIDataPoint { case data_pressure: y = state.pressure(); break; + + case data_accel_x: + case data_accel_y: + case data_accel_z: + case data_gyro_x: + case data_gyro_y: + case data_gyro_z: + AltosIMU imu = state.imu; + if (imu == null) + break; + switch (index) { + case data_accel_x: + y = imu.accel_x; + break; + case data_accel_y: + y = imu.accel_y; + break; + case data_accel_z: + y = imu.accel_z; + break; + case data_gyro_x: + y = imu.gyro_x; + break; + case data_gyro_y: + y = imu.gyro_y; + break; + case data_gyro_z: + y = imu.gyro_z; + break; + } + break; + case data_mag_x: + case data_mag_y: + case data_mag_z: + AltosMag mag = state.mag; + if (mag == null) + break; + switch (index) { + case data_mag_x: + y = mag.x; + break; + case data_mag_y: + y = mag.y; + break; + case data_mag_z: + y = mag.z; + break; + } + break; + case data_orient: + y = state.orient(); + break; } if (y == AltosLib.MISSING) throw new AltosUIDataMissing(index); diff --git a/altosui/AltosGraphDataSet.java b/altosui/AltosGraphDataSet.java index 4e6c46d1..d2773a3f 100644 --- a/altosui/AltosGraphDataSet.java +++ b/altosui/AltosGraphDataSet.java @@ -20,7 +20,7 @@ package altosui; import java.lang.*; import java.io.*; import java.util.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; class AltosGraphIterator implements Iterator<AltosUIDataPoint> { diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java index c42f7b5f..40d2f7f4 100644 --- a/altosui/AltosGraphUI.java +++ b/altosui/AltosGraphUI.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; import org.jfree.chart.ChartPanel; diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 6a79604e..7ca935b6 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -24,7 +24,7 @@ import javax.swing.event.*; import java.io.*; import java.util.concurrent.*; import java.util.Arrays; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener, DocumentListener { @@ -132,8 +132,35 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl return constraints(x, width, GridBagConstraints.NONE); } + void idle_exception(JFrame owner, Exception e) { + if (e instanceof FileNotFoundException) { + JOptionPane.showMessageDialog(owner, + ((FileNotFoundException) e).getMessage(), + "Cannot open target device", + JOptionPane.ERROR_MESSAGE); + } else if (e instanceof AltosSerialInUseException) { + JOptionPane.showMessageDialog(owner, + String.format("Device \"%s\" already in use", + device.toShortString()), + "Device in use", + JOptionPane.ERROR_MESSAGE); + } else if (e instanceof IOException) { + IOException ee = (IOException) e; + JOptionPane.showMessageDialog(owner, + device.toShortString(), + ee.getLocalizedMessage(), + JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(owner, + String.format("Connection to \"%s\" failed", + device.toShortString()), + "Connection Failed", + JOptionPane.ERROR_MESSAGE); + } + } + public AltosIdleMonitorUI(JFrame in_owner) - throws FileNotFoundException, AltosSerialInUseException, TimeoutException, InterruptedException { + throws FileNotFoundException, TimeoutException, InterruptedException { device = AltosDeviceUIDialog.show(in_owner, Altos.product_any); remote = false; @@ -141,6 +168,15 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl remote = true; serial = device.getSerial(); + + AltosLink link; + try { + link = new AltosSerial(device); + } catch (Exception ex) { + idle_exception(in_owner, ex); + return; + } + bag = getContentPane(); bag.setLayout(new GridBagLayout()); @@ -209,7 +245,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl pack(); setVisible(true); - thread = new AltosIdleMonitor((AltosIdleMonitorListener) this, (AltosLink) new AltosSerial (device), (boolean) remote); + thread = new AltosIdleMonitor((AltosIdleMonitorListener) this, link, (boolean) remote); status_update = new AltosFlightStatusUpdate(flightStatus); diff --git a/altosui/AltosIgniteUI.java b/altosui/AltosIgniteUI.java index c8024aae..2e69249f 100644 --- a/altosui/AltosIgniteUI.java +++ b/altosui/AltosIgniteUI.java @@ -22,8 +22,9 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.text.*; +import java.util.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosIgniteUI @@ -33,17 +34,14 @@ public class AltosIgniteUI AltosDevice device; JFrame owner; JLabel label; - JRadioButton apogee; - JLabel apogee_status_label; - JRadioButton main; - JLabel main_status_label; JToggleButton arm; JButton fire; javax.swing.Timer timer; JButton close; + ButtonGroup group; + Boolean opened; - int apogee_status; - int main_status; + int npyro; final static int timeout = 1 * 1000; @@ -52,9 +50,68 @@ public class AltosIgniteUI LinkedBlockingQueue<String> command_queue; + LinkedBlockingQueue<String> reply_queue; + + class Igniter { + JRadioButton button; + JLabel status_label; + String name; + int status; + + void set_status (int status) { + this.status = status; + status_label.setText(String.format("\"%s\"", AltosIgnite.status_string(status))); + } + + Igniter(AltosIgniteUI ui, String label, String name, int y) { + Container pane = getContentPane(); + GridBagConstraints c = new GridBagConstraints(); + Insets i = new Insets(4,4,4,4); + + this.name = name; + this.status = AltosIgnite.Unknown; + + c.gridx = 0; + c.gridy = y; + c.gridwidth = 1; + c.anchor = GridBagConstraints.WEST; + button = new JRadioButton (label); + pane.add(button, c); + button.addActionListener(ui); + button.setActionCommand(name); + group.add(button); + + c.gridx = 1; + c.gridy = y; + c.gridwidth = 1; + c.anchor = GridBagConstraints.WEST; + status_label = new JLabel("plenty of text"); + pane.add(status_label, c); + + status = AltosIgnite.Unknown; + } + } + + Igniter igniters[]; + + void set_status(String _name, int _status) { + + final String name = _name; + final int status = _status; + Runnable r = new Runnable() { + public void run() { + for (int p = 0; p < igniters.length; p++) + if (name.equals(igniters[p].name)) + igniters[p].set_status(status); + } + }; + SwingUtilities.invokeLater(r); + } + class IgniteHandler implements Runnable { AltosIgnite ignite; JFrame owner; + AltosLink link; void send_exception(Exception e) { final Exception f_e = e; @@ -68,9 +125,7 @@ public class AltosIgniteUI public void run () { try { - AltosSerial serial = new AltosSerial(device); - serial.set_frame(owner); - ignite = new AltosIgnite(serial, + ignite = new AltosIgnite(link, !device.matchProduct(Altos.product_altimeter)); } catch (Exception e) { @@ -86,20 +141,23 @@ public class AltosIgniteUI String reply = null; if (command.equals("get_status")) { - apogee_status = ignite.status(AltosIgnite.Apogee); - main_status = ignite.status(AltosIgnite.Main); + HashMap<String,Integer> status_map = ignite.status(); + + for (int p = 0; p < igniters.length; p++) { + Integer i = status_map.get(igniters[p].name); + if (i != null) + set_status(igniters[p].name, i); + } reply = "status"; - } else if (command.equals("main")) { - ignite.fire(AltosIgnite.Main); - reply = "fired"; - } else if (command.equals("apogee")) { - ignite.fire(AltosIgnite.Apogee); - reply = "fired"; + } else if (command.equals("get_npyro")) { + put_reply(String.format("%d", ignite.npyro())); + continue; } else if (command.equals("quit")) { ignite.close(); break; } else { - throw new ParseException(String.format("invalid command %s", command), 0); + ignite.fire(command); + reply = "fired"; } final String f_reply = reply; r = new Runnable() { @@ -114,8 +172,9 @@ public class AltosIgniteUI } } - public IgniteHandler(JFrame in_owner) { + public IgniteHandler(JFrame in_owner, AltosLink in_link) { owner = in_owner; + link = in_link; } } @@ -170,16 +229,15 @@ public class AltosIgniteUI void stop_timer() { time_remaining = 0; - arm.setSelected(false); - arm.setEnabled(false); fire.setEnabled(false); timer_running = false; + arm.setSelected(false); + arm.setEnabled(false); set_arm_text(); } void cancel () { - apogee.setSelected(false); - main.setSelected(false); + group.clearSelection(); fire.setEnabled(false); stop_timer(); } @@ -192,13 +250,30 @@ public class AltosIgniteUI } } + void put_reply(String reply) { + try { + reply_queue.put(reply); + } catch (Exception ex) { + ignite_exception(ex); + } + } + + String get_reply() { + String reply = ""; + try { + reply = reply_queue.take(); + } catch (Exception ex) { + ignite_exception(ex); + } + return reply; + } + boolean getting_status = false; boolean visible = false; + void set_ignite_status() { getting_status = false; - apogee_status_label.setText(String.format("\"%s\"", AltosIgnite.status_string(apogee_status))); - main_status_label.setText(String.format("\"%s\"", AltosIgnite.status_string(main_status))); if (!visible) { visible = true; setVisible(true); @@ -212,6 +287,12 @@ public class AltosIgniteUI } } + int get_npyro() { + send_command("get_npyro"); + String reply = get_reply(); + return Integer.parseInt(reply); + } + boolean firing = false; void start_fire(String which) { @@ -227,8 +308,10 @@ public class AltosIgniteUI } void close() { - send_command("quit"); - timer.stop(); + if (opened) { + send_command("quit"); + timer.stop(); + } setVisible(false); dispose(); } @@ -247,10 +330,12 @@ public class AltosIgniteUI void fire() { if (arm.isEnabled() && arm.isSelected() && time_remaining > 0) { String igniter = "none"; - if (apogee.isSelected() && !main.isSelected()) - igniter = "apogee"; - else if (main.isSelected() && !apogee.isSelected()) - igniter = "main"; + + for (int p = 0; p < igniters.length; p++) + if (igniters[p].button.isSelected()) { + igniter = igniters[p].name; + break; + } send_command(igniter); cancel(); } @@ -258,18 +343,13 @@ public class AltosIgniteUI public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); - if (cmd.equals("apogee") || cmd.equals("main")) { - stop_timer(); - } - if (cmd.equals("apogee") && apogee.isSelected()) { - main.setSelected(false); - arm.setEnabled(true); - } - if (cmd.equals("main") && main.isSelected()) { - apogee.setSelected(false); - arm.setEnabled(true); - } + for (int p = 0; p < igniters.length; p++) + if (cmd.equals(igniters[p].name)) { + stop_timer(); + arm.setEnabled(true); + break; + } if (cmd.equals("arm")) { if (arm.isSelected()) { @@ -282,9 +362,8 @@ public class AltosIgniteUI fire(); if (cmd.equals("tick")) tick_timer(); - if (cmd.equals("close")) { + if (cmd.equals("close")) close(); - } } /* A window listener to catch closing events and tell the config code */ @@ -304,13 +383,22 @@ public class AltosIgniteUI private boolean open() { command_queue = new LinkedBlockingQueue<String>(); + reply_queue = new LinkedBlockingQueue<String>(); + opened = false; device = AltosDeviceUIDialog.show(owner, Altos.product_any); if (device != null) { - IgniteHandler handler = new IgniteHandler(owner); + try { + AltosSerial serial = new AltosSerial(device); + serial.set_frame(owner); + IgniteHandler handler = new IgniteHandler(owner, serial); Thread t = new Thread(handler); t.start(); + opened = true; return true; + } catch (Exception ex) { + ignite_exception(ex); + } } return false; } @@ -318,13 +406,14 @@ public class AltosIgniteUI public AltosIgniteUI(JFrame in_owner) { owner = in_owner; - apogee_status = AltosIgnite.Unknown; - main_status = AltosIgnite.Unknown; if (!open()) return; + group = new ButtonGroup(); + Container pane = getContentPane(); + GridBagConstraints c = new GridBagConstraints(); Insets i = new Insets(4,4,4,4); @@ -343,47 +432,32 @@ public class AltosIgniteUI c.weightx = 0; c.weighty = 0; + int y = 0; + c.gridx = 0; - c.gridy = 0; + c.gridy = y; c.gridwidth = 2; c.anchor = GridBagConstraints.CENTER; label = new JLabel ("Fire Igniter"); pane.add(label, c); - c.gridx = 0; - c.gridy = 1; - c.gridwidth = 1; - c.anchor = GridBagConstraints.WEST; - apogee = new JRadioButton ("Apogee"); - pane.add(apogee, c); - apogee.addActionListener(this); - apogee.setActionCommand("apogee"); + y++; - c.gridx = 1; - c.gridy = 1; - c.gridwidth = 1; - c.anchor = GridBagConstraints.WEST; - apogee_status_label = new JLabel(); - pane.add(apogee_status_label, c); + int npyro = get_npyro(); - c.gridx = 0; - c.gridy = 2; - c.gridwidth = 1; - c.anchor = GridBagConstraints.WEST; - main = new JRadioButton ("Main"); - pane.add(main, c); - main.addActionListener(this); - main.setActionCommand("main"); + igniters = new Igniter[2 + npyro]; - c.gridx = 1; - c.gridy = 2; - c.gridwidth = 1; - c.anchor = GridBagConstraints.WEST; - main_status_label = new JLabel(); - pane.add(main_status_label, c); + igniters[0] = new Igniter(this, "Apogee", AltosIgnite.Apogee, y++); + igniters[1] = new Igniter(this, "Main", AltosIgnite.Main, y++); + + for (int p = 0; p < npyro; p++) { + String name = String.format("%d", p); + String label = String.format("%c", 'A' + p); + igniters[2+p] = new Igniter(this, label, name, y++); + } c.gridx = 0; - c.gridy = 3; + c.gridy = y; c.gridwidth = 1; c.anchor = GridBagConstraints.CENTER; arm = new JToggleButton ("Arm"); @@ -393,7 +467,7 @@ public class AltosIgniteUI arm.setEnabled(false); c.gridx = 1; - c.gridy = 3; + c.gridy = y; c.gridwidth = 1; c.anchor = GridBagConstraints.CENTER; fire = new JButton ("Fire"); @@ -402,8 +476,10 @@ public class AltosIgniteUI fire.addActionListener(this); fire.setActionCommand("fire"); + y++; + c.gridx = 0; - c.gridy = 4; + c.gridy = y; c.gridwidth = 2; c.anchor = GridBagConstraints.CENTER; close = new JButton ("Close"); diff --git a/altosui/AltosInfoTable.java b/altosui/AltosInfoTable.java index feafed21..158b61f0 100644 --- a/altosui/AltosInfoTable.java +++ b/altosui/AltosInfoTable.java @@ -20,7 +20,7 @@ package altosui; import java.awt.*; import javax.swing.*; import javax.swing.table.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosInfoTable extends JTable { private AltosFlightInfoTableModel model; @@ -46,9 +46,9 @@ public class AltosInfoTable extends JTable { TableColumn column = getColumnModel().getColumn(i); if ((i & 1) == 0) - column.setPreferredWidth(text_width(" Satellites Visible ")); + column.setPreferredWidth(text_width(" Satellites Visible")); else - column.setPreferredWidth(text_width(" 179°59.99999' ")); + column.setPreferredWidth(text_width("W 179°59.99999' ")); } } @@ -125,6 +125,10 @@ public class AltosInfoTable extends JTable { info_add_row(0, "Speed", "%8.1f m/s", state.speed()); if (state.max_speed() != AltosLib.MISSING) info_add_row(0, "Max Speed", "%8.1f m/s", state.max_speed()); + if (state.orient() != AltosLib.MISSING) + info_add_row(0, "Tilt", "%4.0f °", state.orient()); + if (state.max_orient() != AltosLib.MISSING) + info_add_row(0, "Max Tilt", "%4.0f °", state.max_orient()); if (state.temperature != AltosLib.MISSING) info_add_row(0, "Temperature", "%9.2f °C", state.temperature); if (state.battery_voltage != AltosLib.MISSING) diff --git a/altosui/AltosKML.java b/altosui/AltosKML.java index fbb0ece4..ae1f8259 100644 --- a/altosui/AltosKML.java +++ b/altosui/AltosKML.java @@ -18,7 +18,7 @@ package altosui; import java.io.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosKML implements AltosWriter { diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index cc2053e0..74177753 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosLanded extends JComponent implements AltosFlightDisplay, ActionListener { GridBagLayout layout; diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index 06a0f1ef..7baf0eb2 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -19,7 +19,7 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosPad extends JComponent implements AltosFlightDisplay { GridBagLayout layout; diff --git a/altosui/AltosRomconfigUI.java b/altosui/AltosRomconfigUI.java index fa780125..89994679 100644 --- a/altosui/AltosRomconfigUI.java +++ b/altosui/AltosRomconfigUI.java @@ -20,7 +20,7 @@ package altosui; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosRomconfigUI @@ -69,7 +69,7 @@ public class AltosRomconfigUI c.weightx = 1; c.anchor = GridBagConstraints.LINE_START; c.insets = ir; - serial_value = new JTextField("0"); + serial_value = new JTextField("00000000"); pane.add(serial_value, c); /* Radio calibration value */ @@ -91,7 +91,7 @@ public class AltosRomconfigUI c.anchor = GridBagConstraints.LINE_START; c.insets = ir; c.ipady = 5; - radio_calibration_value = new JTextField("0"); + radio_calibration_value = new JTextField("00000000"); pane.add(radio_calibration_value, c); /* Buttons */ diff --git a/altosui/AltosScanUI.java b/altosui/AltosScanUI.java index a5ccb15a..e4a93362 100644 --- a/altosui/AltosScanUI.java +++ b/altosui/AltosScanUI.java @@ -25,7 +25,7 @@ import java.io.*; import java.util.*; import java.text.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; class AltosScanResult { diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java index 5e9322e5..2c5d2dfd 100644 --- a/altosui/AltosSerial.java +++ b/altosui/AltosSerial.java @@ -25,7 +25,7 @@ import java.io.*; import java.util.*; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; import libaltosJNI.*; diff --git a/altosui/AltosSiteMap.java b/altosui/AltosSiteMap.java index 9491ce2b..105afade 100644 --- a/altosui/AltosSiteMap.java +++ b/altosui/AltosSiteMap.java @@ -23,7 +23,7 @@ import java.io.*; import java.lang.Math; import java.awt.geom.Point2D; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { @@ -182,7 +182,9 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { } } - public static void prefetchMaps(double lat, double lng, int w, int h) { + public static void prefetchMaps(double lat, double lng) { + int w = AltosSiteMapPreload.width; + int h = AltosSiteMapPreload.height; AltosSiteMap asm = new AltosSiteMap(true); asm.centre = asm.getBaseLocation(lat, lng); diff --git a/altosui/AltosSiteMapCache.java b/altosui/AltosSiteMapCache.java index 40c8ff6b..03dc3cf5 100644 --- a/altosui/AltosSiteMapCache.java +++ b/altosui/AltosSiteMapCache.java @@ -25,8 +25,13 @@ import java.net.URL; import java.net.URLConnection; public class AltosSiteMapCache extends JLabel { + static final long google_maps_ratelimit_ms = 1200; + // Google limits static map queries to 50 per minute per IP, so + // each query should take at least 1.2 seconds. + public static boolean fetchMap(File file, String url) { URL u; + long startTime = System.nanoTime(); try { u = new URL(url); @@ -70,6 +75,16 @@ public class AltosSiteMapCache extends JLabel { } return false; } + + long duration_ms = (System.nanoTime() - startTime) / 1000000; + if (duration_ms < google_maps_ratelimit_ms) { + try { + Thread.sleep(google_maps_ratelimit_ms - duration_ms); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + return true; } diff --git a/altosui/AltosSiteMapPreload.java b/altosui/AltosSiteMapPreload.java index fd648abc..66399557 100644 --- a/altosui/AltosSiteMapPreload.java +++ b/altosui/AltosSiteMapPreload.java @@ -213,7 +213,7 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener AltosMapPos lat; AltosMapPos lon; - final static int radius = 4; + final static int radius = 5; final static int width = (radius * 2 + 1); final static int height = (radius * 2 + 1); @@ -326,7 +326,7 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener pane.setLayout(new GridBagLayout()); - map = new AltosSiteMap(4); + map = new AltosSiteMap(radius); c.fill = GridBagConstraints.BOTH; c.anchor = GridBagConstraints.CENTER; @@ -464,4 +464,4 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener setLocationRelativeTo(owner); setVisible(true); } -}
\ No newline at end of file +} diff --git a/altosui/AltosSiteMapTile.java b/altosui/AltosSiteMapTile.java index 172e6397..7d5b65e1 100644 --- a/altosui/AltosSiteMapTile.java +++ b/altosui/AltosSiteMapTile.java @@ -22,7 +22,7 @@ import java.awt.image.*; import javax.swing.*; import java.awt.geom.Point2D; import java.awt.geom.Line2D; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public class AltosSiteMapTile extends JLayeredPane { JLabel mapLabel; diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 9dad8718..5d459947 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -22,7 +22,7 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosUI extends AltosUIFrame { @@ -560,8 +560,9 @@ public class AltosUI extends AltosUIFrame { AltosUI altosui = new AltosUI(); java.util.List<AltosDevice> devices = AltosUSBDevice.list(Altos.product_basestation); - for (AltosDevice device : devices) - altosui.telemetry_window(device); + if (devices != null) + for (AltosDevice device : devices) + altosui.telemetry_window(device); } else { int process = process_none; for (int i = 0; i < args.length; i++) { @@ -573,7 +574,7 @@ public class AltosUI extends AltosUIFrame { } else { double lat = Double.parseDouble(args[i+1]); double lon = Double.parseDouble(args[i+2]); - AltosSiteMap.prefetchMaps(lat, lon, 5, 5); + AltosSiteMap.prefetchMaps(lat, lon); i += 2; } } else if (args[i].equals("--replay")) diff --git a/altosui/AltosUIPreferencesBackend.java b/altosui/AltosUIPreferencesBackend.java index fb5f8520..697d9902 100644 --- a/altosui/AltosUIPreferencesBackend.java +++ b/altosui/AltosUIPreferencesBackend.java @@ -19,7 +19,7 @@ package altosui; import java.io.File; import java.util.prefs.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import javax.swing.filechooser.FileSystemView; public class AltosUIPreferencesBackend implements AltosPreferencesBackend { diff --git a/altosui/AltosWriter.java b/altosui/AltosWriter.java index d664d6e8..5ff44584 100644 --- a/altosui/AltosWriter.java +++ b/altosui/AltosWriter.java @@ -17,7 +17,7 @@ package altosui; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; public interface AltosWriter { diff --git a/altosui/Makefile.am b/altosui/Makefile.am index 71e96004..32a3df97 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -98,7 +98,8 @@ ALTOSUILIB_CLASS=\ altosuilib_$(ALTOSUILIB_VERSION).jar LIBALTOS= \ - libaltos.so \ + libaltos32.so \ + libaltos64.so \ libaltos.dylib \ altos.dll @@ -164,7 +165,7 @@ TEMPLATE_DOC=\ $(top_srcdir)/doc/telemetrum-outline.pdf \ $(top_srcdir)/doc/easymini-outline.pdf \ $(top_srcdir)/doc/telemega-outline.pdf \ - $(top_srcdir)/doc/easymini-outline.pdf + $(top_srcdir)/doc/telemini.pdf DOC=$(ALTUSMETRUM_DOC) $(ALTOS_DOC) $(TELEMETRY_DOC) $(TEMPLATE_DOC) @@ -175,7 +176,9 @@ WINDOWS_DIST=Altos-Windows-$(VERSION_DASH).exe FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS) -LINUX_FILES=$(FAT_FILES) libaltos.so $(FIRMWARE) $(DOC) +LINUX_LIBS=libaltos32.so libaltos64.so + +LINUX_FILES=$(FAT_FILES) $(LINUX_LIBS) $(FIRMWARE) $(DOC) LINUX_EXTRA=altosui-fat MACOSX_INFO_PLIST=Info.plist @@ -265,7 +268,11 @@ altosui-jdb: Makefile echo 'exec jdb -classpath "classes:./*:../libaltos:$(FREETTS)/freetts.jar:$(JCOMMON)/jcommon.jar:$(JFREECHART)/jfreechart.jar" -Djava.library.path="../libaltos/.libs" altosui/AltosUI "$$@"' >> $@ chmod +x $@ -libaltos.so: build-libaltos +libaltos32.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos64.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . @@ -281,7 +288,9 @@ altos64.dll: ../libaltos/altos64.dll -rm -f "$@" $(LN_S) ../libaltos/"$@" . -../libaltos/.libs/libaltos.so: build-libaltos +../libaltos/.libs/libaltos64.so: ../libaltos/.libs/libaltos32.so + +../libaltos/.libs/libaltos32.so: build-libaltos ../libaltos/altos.dll: build-altos-dll diff --git a/altosui/altos-windows.nsi.in b/altosui/altos-windows.nsi.in index 779b0c12..3832e901 100644 --- a/altosui/altos-windows.nsi.in +++ b/altosui/altos-windows.nsi.in @@ -136,6 +136,7 @@ Section "Documentation" File "../doc/telemetrum-outline.pdf" File "../doc/telemega-outline.pdf" File "../doc/easymini-outline.pdf" + File "../doc/telemini.pdf" SectionEnd Section "Uninstaller" |
