summaryrefslogtreecommitdiff
path: root/altosuilib
diff options
context:
space:
mode:
Diffstat (limited to 'altosuilib')
-rw-r--r--altosuilib/AltosBTDevice.java4
-rw-r--r--altosuilib/AltosBTDeviceIterator.java4
-rw-r--r--altosuilib/AltosBTKnown.java4
-rw-r--r--altosuilib/AltosBTManage.java4
-rw-r--r--altosuilib/AltosCSVUI.java14
-rw-r--r--altosuilib/AltosConfigFreqUI.java4
-rw-r--r--altosuilib/AltosDataChooser.java23
-rw-r--r--altosuilib/AltosDevice.java2
-rw-r--r--altosuilib/AltosDeviceDialog.java2
-rw-r--r--altosuilib/AltosDeviceUIDialog.java2
-rw-r--r--altosuilib/AltosDisplayThread.java36
-rw-r--r--altosuilib/AltosEepromDelete.java4
-rw-r--r--altosuilib/AltosEepromManage.java4
-rw-r--r--altosuilib/AltosEepromMonitor.java252
-rw-r--r--altosuilib/AltosEepromMonitorUI.java57
-rw-r--r--altosuilib/AltosEepromSelect.java10
-rw-r--r--altosuilib/AltosFlashUI.java4
-rw-r--r--altosuilib/AltosFlightInfoTableModel.java2
-rw-r--r--altosuilib/AltosFlightStatsTable.java141
-rw-r--r--altosuilib/AltosGraph.java675
-rw-r--r--altosuilib/AltosGraphDataPoint.java250
-rw-r--r--altosuilib/AltosGraphDataSet.java95
-rw-r--r--altosuilib/AltosInfoTable.java18
-rw-r--r--altosuilib/AltosLed.java2
-rw-r--r--altosuilib/AltosLights.java2
-rw-r--r--altosuilib/AltosPositionListener.java2
-rw-r--r--altosuilib/AltosRomconfigUI.java4
-rw-r--r--altosuilib/AltosScanUI.java13
-rw-r--r--altosuilib/AltosSerial.java4
-rw-r--r--altosuilib/AltosSerialInUseException.java2
-rw-r--r--altosuilib/AltosUIAxis.java17
-rw-r--r--altosuilib/AltosUIConfigure.java4
-rw-r--r--altosuilib/AltosUIDataMissing.java2
-rw-r--r--altosuilib/AltosUIDataPoint.java2
-rw-r--r--altosuilib/AltosUIDataSet.java2
-rw-r--r--altosuilib/AltosUIDialog.java2
-rw-r--r--altosuilib/AltosUIEnable.java4
-rw-r--r--altosuilib/AltosUIFlightSeries.java124
-rw-r--r--altosuilib/AltosUIFlightTab.java4
-rw-r--r--altosuilib/AltosUIFrame.java2
-rw-r--r--altosuilib/AltosUIFreqList.java4
-rw-r--r--altosuilib/AltosUIGraph.java89
-rw-r--r--altosuilib/AltosUIGrapher.java6
-rw-r--r--altosuilib/AltosUIImage.java2
-rw-r--r--altosuilib/AltosUIIndicator.java4
-rw-r--r--altosuilib/AltosUILib.java4
-rw-r--r--altosuilib/AltosUIListener.java2
-rw-r--r--altosuilib/AltosUIMap.java12
-rw-r--r--altosuilib/AltosUIMapPreload.java4
-rw-r--r--altosuilib/AltosUIMarker.java8
-rw-r--r--altosuilib/AltosUIPreferences.java4
-rw-r--r--altosuilib/AltosUIPreferencesBackend.java4
-rw-r--r--altosuilib/AltosUIRateList.java11
-rw-r--r--altosuilib/AltosUISeries.java112
-rw-r--r--altosuilib/AltosUITelemetryList.java4
-rw-r--r--altosuilib/AltosUITimeSeries.java200
-rw-r--r--altosuilib/AltosUIUnitsIndicator.java4
-rw-r--r--altosuilib/AltosUIVoltageIndicator.java4
-rw-r--r--altosuilib/AltosUSBDevice.java2
-rw-r--r--altosuilib/AltosVoice.java2
-rw-r--r--altosuilib/GrabNDrag.java2
-rw-r--r--altosuilib/Makefile.am9
-rwxr-xr-xaltosuilib/OSXAdapter.java2
63 files changed, 891 insertions, 1407 deletions
diff --git a/altosuilib/AltosBTDevice.java b/altosuilib/AltosBTDevice.java
index 313cf0a0..5b9ab06a 100644
--- a/altosuilib/AltosBTDevice.java
+++ b/altosuilib/AltosBTDevice.java
@@ -16,10 +16,10 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import libaltosJNI.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosBTDevice extends altos_bt_device implements AltosDevice {
diff --git a/altosuilib/AltosBTDeviceIterator.java b/altosuilib/AltosBTDeviceIterator.java
index 1ea31950..ac9068d0 100644
--- a/altosuilib/AltosBTDeviceIterator.java
+++ b/altosuilib/AltosBTDeviceIterator.java
@@ -16,11 +16,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.util.*;
import libaltosJNI.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosBTDeviceIterator implements Iterator<AltosBTDevice> {
AltosBTDevice current;
diff --git a/altosuilib/AltosBTKnown.java b/altosuilib/AltosBTKnown.java
index 32cc05d7..56f1991f 100644
--- a/altosuilib/AltosBTKnown.java
+++ b/altosuilib/AltosBTKnown.java
@@ -16,10 +16,10 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.util.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosBTKnown implements Iterable<AltosBTDevice> {
LinkedList<AltosBTDevice> devices = new LinkedList<AltosBTDevice>();
diff --git a/altosuilib/AltosBTManage.java b/altosuilib/AltosBTManage.java
index 14e0a056..aec4c34d 100644
--- a/altosuilib/AltosBTManage.java
+++ b/altosuilib/AltosBTManage.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
@@ -24,7 +24,7 @@ import javax.swing.*;
import javax.swing.plaf.basic.*;
import java.util.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosBTManage extends AltosUIDialog implements ActionListener, Iterable<AltosBTDevice> {
LinkedBlockingQueue<AltosBTDevice> found_devices;
diff --git a/altosuilib/AltosCSVUI.java b/altosuilib/AltosCSVUI.java
index 1b769740..442e3de3 100644
--- a/altosuilib/AltosCSVUI.java
+++ b/altosuilib/AltosCSVUI.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosCSVUI
extends AltosUIDialog
@@ -31,7 +31,8 @@ public class AltosCSVUI
JFileChooser csv_chooser;
JPanel accessory;
JComboBox<String> combo_box;
- Iterable<AltosState> states;
+ AltosFlightSeries series;
+ AltosCalData cal_data;
AltosWriter writer;
static String[] combo_box_items = { "Comma Separated Values (.CSV)", "Googleearth Data (.KML)" };
@@ -55,8 +56,9 @@ public class AltosCSVUI
set_default_file();
}
- public AltosCSVUI(JFrame frame, AltosStateIterable states, File source_file) {
- this.states = states;
+ public AltosCSVUI(JFrame frame, AltosFlightSeries series, File source_file) {
+ this.series = series;
+ this.cal_data = series.cal_data();
csv_chooser = new JFileChooser(source_file);
accessory = new JPanel();
@@ -91,7 +93,7 @@ public class AltosCSVUI
writer = new AltosCSV(file);
else
writer = new AltosKML(file);
- writer.write(states);
+ writer.write(series);
writer.close();
} catch (FileNotFoundException ee) {
JOptionPane.showMessageDialog(frame,
diff --git a/altosuilib/AltosConfigFreqUI.java b/altosuilib/AltosConfigFreqUI.java
index c4d2abba..055d34f9 100644
--- a/altosuilib/AltosConfigFreqUI.java
+++ b/altosuilib/AltosConfigFreqUI.java
@@ -16,14 +16,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.text.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
class AltosEditFreqUI extends AltosUIDialog implements ActionListener {
Frame frame;
diff --git a/altosuilib/AltosDataChooser.java b/altosuilib/AltosDataChooser.java
index 8758fc34..b417c732 100644
--- a/altosuilib/AltosDataChooser.java
+++ b/altosuilib/AltosDataChooser.java
@@ -16,12 +16,12 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosDataChooser extends JFileChooser {
JFrame frame;
@@ -36,7 +36,7 @@ public class AltosDataChooser extends JFileChooser {
return file;
}
- public AltosStateIterable runDialog() {
+ public AltosRecordSet runDialog() {
int ret;
ret = showOpenDialog(frame);
@@ -44,21 +44,12 @@ public class AltosDataChooser extends JFileChooser {
file = getSelectedFile();
if (file == null)
return null;
- filename = file.getName();
try {
- if (filename.endsWith("eeprom")) {
- FileInputStream in = new FileInputStream(file);
- return new AltosEepromFile(in);
- } else if (filename.endsWith("telem")) {
- FileInputStream in = new FileInputStream(file);
- return new AltosTelemetryFile(in);
- } else {
- throw new FileNotFoundException();
- }
- } catch (FileNotFoundException fe) {
+ return AltosLib.record_set(file);
+ } catch (IOException ie) {
JOptionPane.showMessageDialog(frame,
- fe.getMessage(),
- "Cannot open file",
+ ie.getMessage(),
+ "Error reading file",
JOptionPane.ERROR_MESSAGE);
}
}
diff --git a/altosuilib/AltosDevice.java b/altosuilib/AltosDevice.java
index f9878fe9..44f71f7a 100644
--- a/altosuilib/AltosDevice.java
+++ b/altosuilib/AltosDevice.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import libaltosJNI.*;
diff --git a/altosuilib/AltosDeviceDialog.java b/altosuilib/AltosDeviceDialog.java
index 5d8ff570..77249bfc 100644
--- a/altosuilib/AltosDeviceDialog.java
+++ b/altosuilib/AltosDeviceDialog.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
import java.awt.*;
diff --git a/altosuilib/AltosDeviceUIDialog.java b/altosuilib/AltosDeviceUIDialog.java
index c2d6f4f3..f3409cce 100644
--- a/altosuilib/AltosDeviceUIDialog.java
+++ b/altosuilib/AltosDeviceUIDialog.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
import java.awt.*;
diff --git a/altosuilib/AltosDisplayThread.java b/altosuilib/AltosDisplayThread.java
index 52414c62..3fcc02da 100644
--- a/altosuilib/AltosDisplayThread.java
+++ b/altosuilib/AltosDisplayThread.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.text.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosDisplayThread extends Thread {
@@ -30,7 +30,9 @@ public class AltosDisplayThread extends Thread {
IdleThread idle_thread;
AltosVoice voice;
AltosFlightReader reader;
- AltosState old_state, state;
+ AltosState state;
+ int old_state = AltosLib.ao_flight_invalid;
+ boolean old_gps_ready = false;
AltosListenerState listener_state;
AltosFlightDisplay display;
@@ -93,13 +95,13 @@ public class AltosDisplayThread extends Thread {
state.from_pad != null &&
state.range >= 0)
{
- voice.speak("Height %s, bearing %s %d, elevation %d, range %s.\n",
+ voice.speak("Height %s, bearing %s %d, elevation %d, distance %s.\n",
AltosConvert.height.say(state.height()),
state.from_pad.bearing_words(
AltosGreatCircle.BEARING_VOICE),
(int) (state.from_pad.bearing + 0.5),
(int) (state.elevation + 0.5),
- AltosConvert.distance.say(state.range));
+ AltosConvert.distance.say(state.distance));
} else if (state.state() > AltosLib.ao_flight_pad && state.height() != AltosLib.MISSING) {
voice.speak(AltosConvert.height.say_units(state.height()));
} else {
@@ -121,7 +123,7 @@ public class AltosDisplayThread extends Thread {
else
voice.speak("rocket may have crashed");
if (state.from_pad != null)
- voice.speak("Bearing %d degrees, range %s.",
+ voice.speak("Bearing %d degrees, distance %s.",
(int) (state.from_pad.bearing + 0.5),
AltosConvert.distance.say_units(state.from_pad.distance));
++reported_landing;
@@ -164,7 +166,7 @@ public class AltosDisplayThread extends Thread {
}
public synchronized void notice(boolean spoken) {
- if (old_state != null && old_state.state() != state.state()) {
+ if (old_state != state.state()) {
report_time = now();
this.notify();
} else if (spoken)
@@ -179,16 +181,16 @@ public class AltosDisplayThread extends Thread {
synchronized boolean tell() {
boolean ret = false;
- if (old_state == null || old_state.state() != state.state()) {
+ if (old_state != state.state()) {
if (state.state() != AltosLib.ao_flight_stateless)
voice.speak(state.state_name());
- if ((old_state == null || old_state.state() <= AltosLib.ao_flight_boost) &&
+ if ((old_state == AltosLib.ao_flight_invalid || old_state <= AltosLib.ao_flight_boost) &&
state.state() > AltosLib.ao_flight_boost) {
if (state.max_speed() != AltosLib.MISSING)
voice.speak("max speed: %s.",
AltosConvert.speed.say_units(state.max_speed() + 0.5));
ret = true;
- } else if ((old_state == null || old_state.state() < AltosLib.ao_flight_drogue) &&
+ } else if ((old_state == AltosLib.ao_flight_invalid || old_state < AltosLib.ao_flight_drogue) &&
state.state() >= AltosLib.ao_flight_drogue) {
if (state.max_height() != AltosLib.MISSING)
voice.speak("max height: %s.",
@@ -196,17 +198,18 @@ public class AltosDisplayThread extends Thread {
ret = true;
}
}
- if (old_state == null || old_state.gps_ready != state.gps_ready) {
+ if (old_gps_ready != state.gps_ready) {
if (state.gps_ready) {
voice.speak("GPS ready");
ret = true;
}
- else if (old_state != null) {
+ else if (old_gps_ready) {
voice.speak("GPS lost");
ret = true;
}
}
- old_state = state;
+ old_state = state.state();
+ old_gps_ready = state.gps_ready;
return ret;
}
@@ -220,14 +223,11 @@ public class AltosDisplayThread extends Thread {
try {
for (;;) {
try {
- AltosState new_state = reader.read();
- if (new_state == null) {
- state = null;
+ state = reader.read();
+ if (state == null) {
listener_state.running = false;
break;
}
- reader.update(new_state);
- state = new_state;
show_safely();
told = tell();
idle_thread.notice(told);
diff --git a/altosuilib/AltosEepromDelete.java b/altosuilib/AltosEepromDelete.java
index 24337be4..87e80a51 100644
--- a/altosuilib/AltosEepromDelete.java
+++ b/altosuilib/AltosEepromDelete.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosEepromDelete implements Runnable {
AltosEepromList flights;
diff --git a/altosuilib/AltosEepromManage.java b/altosuilib/AltosEepromManage.java
index a6636c4f..93827139 100644
--- a/altosuilib/AltosEepromManage.java
+++ b/altosuilib/AltosEepromManage.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosEepromManage implements ActionListener {
diff --git a/altosuilib/AltosEepromMonitor.java b/altosuilib/AltosEepromMonitor.java
deleted file mode 100644
index d61169f4..00000000
--- a/altosuilib/AltosEepromMonitor.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altosuilib_11;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-public class AltosEepromMonitor extends AltosUIDialog {
-
- Container pane;
- Box box;
- JLabel serial_label;
- JLabel flight_label;
- JLabel file_label;
- JLabel serial_value;
- JLabel flight_value;
- JLabel file_value;
- JButton cancel;
- JProgressBar pbar;
- int min_state, max_state;
-
- public AltosEepromMonitor(JFrame owner, int in_min_state, int in_max_state) {
- super (owner, "Download Flight Data", false);
-
- GridBagConstraints c;
- Insets il = new Insets(4,4,4,4);
- Insets ir = new Insets(4,4,4,4);
-
- pane = getContentPane();
- pane.setLayout(new GridBagLayout());
-
- c = new GridBagConstraints();
- c.gridx = 0; c.gridy = 0;
- c.fill = GridBagConstraints.NONE;
- c.anchor = GridBagConstraints.LINE_START;
- c.insets = il;
- serial_label = new JLabel("Serial:");
- pane.add(serial_label, c);
-
- c = new GridBagConstraints();
- c.gridx = 1; c.gridy = 0;
- c.fill = GridBagConstraints.HORIZONTAL;
- c.weightx = 1;
- c.anchor = GridBagConstraints.LINE_START;
- c.insets = ir;
- serial_value = new JLabel("");
- pane.add(serial_value, c);
-
- c = new GridBagConstraints();
- c.fill = GridBagConstraints.NONE;
- c.gridx = 0; c.gridy = 1;
- c.anchor = GridBagConstraints.LINE_START;
- c.insets = il;
- flight_label = new JLabel("Flight:");
- pane.add(flight_label, c);
-
- c = new GridBagConstraints();
- c.fill = GridBagConstraints.HORIZONTAL;
- c.weightx = 1;
- c.gridx = 1; c.gridy = 1;
- c.anchor = GridBagConstraints.LINE_START;
- c.insets = ir;
- flight_value = new JLabel("");
- pane.add(flight_value, c);
-
- c = new GridBagConstraints();
- c.fill = GridBagConstraints.NONE;
- c.gridx = 0; c.gridy = 2;
- c.anchor = GridBagConstraints.LINE_START;
- c.insets = il;
- file_label = new JLabel("File:");
- pane.add(file_label, c);
-
- c = new GridBagConstraints();
- c.fill = GridBagConstraints.HORIZONTAL;
- c.weightx = 1;
- c.gridx = 1; c.gridy = 2;
- c.anchor = GridBagConstraints.LINE_START;
- c.insets = ir;
- file_value = new JLabel("");
- pane.add(file_value, c);
-
- min_state = in_min_state;
- max_state = in_max_state;
- pbar = new JProgressBar();
- pbar.setMinimum(0);
- pbar.setMaximum(1000);
- pbar.setValue(0);
- pbar.setString("startup");
- pbar.setStringPainted(true);
- pbar.setPreferredSize(new Dimension(600, 20));
- c = new GridBagConstraints();
- c.fill = GridBagConstraints.HORIZONTAL;
- c.anchor = GridBagConstraints.CENTER;
- c.gridx = 0; c.gridy = 3;
- c.gridwidth = GridBagConstraints.REMAINDER;
- Insets ib = new Insets(4,4,4,4);
- c.insets = ib;
- pane.add(pbar, c);
-
-
- cancel = new JButton("Cancel");
- c = new GridBagConstraints();
- c.fill = GridBagConstraints.NONE;
- c.anchor = GridBagConstraints.CENTER;
- c.gridx = 0; c.gridy = 4;
- c.gridwidth = GridBagConstraints.REMAINDER;
- Insets ic = new Insets(4,4,4,4);
- c.insets = ic;
- pane.add(cancel, c);
-
- pack();
- setLocationRelativeTo(owner);
- setVisible(true);
- }
-
- public void addActionListener (ActionListener l) {
- cancel.addActionListener(l);
- }
-
- private void set_value_internal(String state_name, int state, int state_block, int block) {
- if (state_block > 100)
- state_block = 100;
- if (state < min_state) state = min_state;
- if (state >= max_state) state = max_state - 1;
- state -= min_state;
-
- int pos = state * 100 + state_block;
-
- pbar.setString(String.format("block %d state %s", block, state_name));
- pbar.setValue(pos);
- }
-
- public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
- final String state_name = in_state_name;
- final int state = in_state;
- final int state_block = in_state_block;
- final int block = in_block;
- Runnable r = new Runnable() {
- public void run() {
- try {
- set_value_internal(state_name, state, state_block, block);
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-
- private void set_serial_internal(int serial) {
- serial_value.setText(String.format("%d", serial));
- }
-
- public void set_serial(int in_serial) {
- final int serial = in_serial;
- Runnable r = new Runnable() {
- public void run() {
- try {
- set_serial_internal(serial);
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-
- private void set_flight_internal(int flight) {
- flight_value.setText(String.format("%d", flight));
- }
-
- public void set_flight(int in_flight) {
- final int flight = in_flight;
- Runnable r = new Runnable() {
- public void run() {
- try {
- set_flight_internal(flight);
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-
- private void set_file_internal(String file) {
- file_value.setText(String.format("%s", file));
- }
-
- public void set_file(String in_file) {
- final String file = in_file;
- Runnable r = new Runnable() {
- public void run() {
- try {
- set_file_internal(file);
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-
- private void done_internal() {
- setVisible(false);
- dispose();
- }
-
- public void done() {
- Runnable r = new Runnable() {
- public void run() {
- try {
- done_internal();
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-
- private void reset_internal() {
- set_value_internal("startup",min_state,0, 0);
- set_flight_internal(0);
- set_file_internal("");
- }
-
- public void reset() {
- Runnable r = new Runnable() {
- public void run() {
- try {
- reset_internal();
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-}
diff --git a/altosuilib/AltosEepromMonitorUI.java b/altosuilib/AltosEepromMonitorUI.java
index d708ae96..3427fe0f 100644
--- a/altosuilib/AltosEepromMonitorUI.java
+++ b/altosuilib/AltosEepromMonitorUI.java
@@ -16,12 +16,12 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor {
JFrame owner;
@@ -35,7 +35,6 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
JLabel file_value;
JButton cancel;
JProgressBar pbar;
- int min_state, max_state;
ActionListener listener;
static final int progress_max = 10000;
@@ -138,11 +137,6 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
listener = l;
}
- public void set_states(int min_state, int max_state) {
- this.min_state = min_state;
- this.max_state = max_state;
- }
-
public void set_thread(Thread in_eeprom_thread) {
final Thread eeprom_thread = in_eeprom_thread;
cancel.addActionListener(new ActionListener() {
@@ -157,52 +151,30 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
setVisible(true);
}
- private void set_value_internal(String state_name, int state, int state_block, int block) {
+ int max_block = 1;
+
+ public void set_block_internal(int block) {
double pos;
String s;
- if (min_state == AltosLib.ao_flight_invalid) {
- int lblock = block;
- if (lblock > 1000)
- lblock = 1000;
- pos = lblock / 1000.0;
- s = String.format("block %d", block);
- } else {
- if (state == AltosLib.ao_flight_invalid)
- state = 0;
- if (state_block > 100)
- state_block = 100;
- if (state < min_state) state = min_state;
- if (state > max_state) state = max_state;
-
- if (state == max_state)
- state_block = 0;
-
- state -= min_state;
-
- int nstate = max_state - min_state;
+ pos = (double) block / (double) max_block;
- double spos = (double) state / (double) nstate;
- double bpos = state_block / 100.0;
-
- pos = spos + bpos / nstate;
-
- s = String.format("block %d state %s", block, state_name);
- }
+ s = String.format("block %d of %d", block, max_block);
pbar.setString(s);
pbar.setValue((int) (pos * progress_max));
}
- public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
- final String state_name = in_state_name;
- final int state = in_state;
- final int state_block = in_state_block;
+ public void set_max(int max_block) {
+ this.max_block = max_block;
+ }
+
+ public void set_block(int in_block) {
final int block = in_block;
Runnable r = new Runnable() {
public void run() {
try {
- set_value_internal(state_name, state, state_block, block);
+ set_block_internal(block);
} catch (Exception ex) {
}
}
@@ -283,7 +255,8 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
}
private void reset_internal() {
- set_value_internal("startup",min_state,0, 0);
+ set_max(1);
+ set_block_internal(0);
set_flight_internal(0);
set_filename_internal("");
}
diff --git a/altosuilib/AltosEepromSelect.java b/altosuilib/AltosEepromSelect.java
index 0b4b7a85..0c890c8b 100644
--- a/altosuilib/AltosEepromSelect.java
+++ b/altosuilib/AltosEepromSelect.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
class AltosEepromItem implements ActionListener {
AltosEepromLog log;
@@ -38,11 +38,7 @@ class AltosEepromItem implements ActionListener {
log = in_log;
String text;
- if (log.year != 0)
- text = String.format("Flight #%02d - %04d-%02d-%02d",
- log.flight, log.year, log.month, log.day);
- else
- text = String.format("Flight #%02d", log.flight);
+ text = String.format("Flight #%02d", log.flight);
label = new JLabel(text);
diff --git a/altosuilib/AltosFlashUI.java b/altosuilib/AltosFlashUI.java
index da36397a..ca089ca8 100644
--- a/altosuilib/AltosFlashUI.java
+++ b/altosuilib/AltosFlashUI.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
@@ -24,7 +24,7 @@ import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosFlashUI
extends AltosUIDialog
diff --git a/altosuilib/AltosFlightInfoTableModel.java b/altosuilib/AltosFlightInfoTableModel.java
index 2d371101..943c9207 100644
--- a/altosuilib/AltosFlightInfoTableModel.java
+++ b/altosuilib/AltosFlightInfoTableModel.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.table.*;
diff --git a/altosuilib/AltosFlightStatsTable.java b/altosuilib/AltosFlightStatsTable.java
index 2f46f231..415c0244 100644
--- a/altosuilib/AltosFlightStatsTable.java
+++ b/altosuilib/AltosFlightStatsTable.java
@@ -16,12 +16,12 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import javax.swing.*;
import java.util.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosFlightStatsTable extends JComponent implements AltosFontListener {
GridBagLayout layout;
@@ -87,13 +87,19 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
return String.format("%s %4d° %9.6f'", h, deg, min);
}
- public AltosFlightStatsTable(AltosFlightStats stats) {
- layout = new GridBagLayout();
-
- setLayout(layout);
+ public void set_stats(AltosFlightStats stats) {
int y = 0;
- new FlightStat(layout, y++, "Serial", String.format("%d", stats.serial));
- new FlightStat(layout, y++, "Flight", String.format("%d", stats.flight));
+ if (stats.serial != AltosLib.MISSING) {
+ if (stats.product != null && stats.firmware_version != null)
+ new FlightStat(layout, y++, "Device",
+ stats.product,
+ String.format("version %s", stats.firmware_version),
+ String.format("serial %d", stats.serial));
+ else
+ new FlightStat(layout, y++, "Serial", String.format("%d", stats.serial));
+ }
+ if (stats.flight != AltosLib.MISSING)
+ new FlightStat(layout, y++, "Flight", String.format("%d", stats.flight));
if (stats.year != AltosLib.MISSING && stats.hour != AltosLib.MISSING)
new FlightStat(layout, y++, "Date/Time",
String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day),
@@ -108,61 +114,112 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
}
if (stats.max_height != AltosLib.MISSING) {
new FlightStat(layout, y++, "Maximum height",
- String.format("%5.0f m", stats.max_height),
+ String.format("%6.1f m", stats.max_height),
String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_height)));
}
if (stats.max_gps_height != AltosLib.MISSING) {
new FlightStat(layout, y++, "Maximum GPS height",
- String.format("%5.0f m", stats.max_gps_height),
+ String.format("%6.1f m", stats.max_gps_height),
String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_gps_height)));
}
- new FlightStat(layout, y++, "Maximum speed",
- String.format("%5.0f m/s", stats.max_speed),
- String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)),
- String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
+ if (stats.max_speed != AltosLib.MISSING) {
+ new FlightStat(layout, y++, "Maximum speed",
+ String.format("%6.1f m/s", stats.max_speed),
+ String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)),
+ String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
+ }
if (stats.max_acceleration != AltosLib.MISSING)
new FlightStat(layout, y++, "Maximum boost acceleration",
- String.format("%5.0f m/s²", stats.max_acceleration),
+ String.format("%6.1f m/s²", stats.max_acceleration),
String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)),
- String.format("%5.0f G", AltosConvert.meters_to_g(stats.max_acceleration)));
+ String.format("%6.2f G", AltosConvert.meters_to_g(stats.max_acceleration)));
if (stats.state_accel[AltosLib.ao_flight_boost] != AltosLib.MISSING)
new FlightStat(layout, y++, "Average boost acceleration",
- String.format("%5.0f m/s²", stats.state_accel[AltosLib.ao_flight_boost]),
+ String.format("%6.1f m/s²", stats.state_accel[AltosLib.ao_flight_boost]),
String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.state_accel[AltosLib.ao_flight_boost])),
- String.format("%5.0f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost])));
- if (stats.state_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING)
- new FlightStat(layout, y++, "Drogue descent rate",
- String.format("%5.0f m/s", stats.state_speed[AltosLib.ao_flight_drogue]),
- String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue])));
+ String.format("%6.2f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost])));
+ if (stats.state_time[AltosLib.ao_flight_boost] != 0 || stats.state_time[AltosLib.ao_flight_fast] != 0 || stats.state_time[AltosLib.ao_flight_coast] != 0) {
+
+ double boost_time = stats.state_time[AltosLib.ao_flight_boost];
+ double fast_time = stats.state_time[AltosLib.ao_flight_fast];
+ double coast_time = stats.state_time[AltosLib.ao_flight_coast];
+
+ if (fast_time > 0) {
+ new FlightStat(layout, y++, "Ascent time",
+ String.format("%6.1f s %s", boost_time,
+ AltosLib.state_name(AltosLib.ao_flight_boost)),
+ String.format("%6.1f s %s", fast_time,
+ AltosLib.state_name(AltosLib.ao_flight_fast)),
+ String.format("%6.1f s %s", coast_time,
+ AltosLib.state_name(AltosLib.ao_flight_coast)));
+ } else {
+ new FlightStat(layout, y++, "Ascent time",
+ String.format("%6.1f s %s", boost_time,
+ AltosLib.state_name(AltosLib.ao_flight_boost)),
+ String.format("%6.1f s %s", coast_time,
+ AltosLib.state_name(AltosLib.ao_flight_coast)));
+ }
+ }
+ if (stats.state_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING) {
+ String label;
+
+ if (stats.state_speed[AltosLib.ao_flight_main] == AltosLib.MISSING)
+ label = "Descent rate";
+ else
+ label = "Drogue descent rate";
+ new FlightStat(layout, y++, label,
+ String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_drogue]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue])));
+ }
if (stats.state_speed[AltosLib.ao_flight_main] != AltosLib.MISSING)
new FlightStat(layout, y++, "Main descent rate",
- String.format("%5.0f m/s", stats.state_speed[AltosLib.ao_flight_main]),
- String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main])));
- if (stats.state_start[AltosLib.ao_flight_boost] < stats.state_end[AltosLib.ao_flight_coast])
- new FlightStat(layout, y++, "Ascent time",
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_boost] - stats.state_start[AltosLib.ao_flight_boost],
- AltosLib.state_name(AltosLib.ao_flight_boost)),
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_fast] - stats.state_start[AltosLib.ao_flight_fast],
- AltosLib.state_name(AltosLib.ao_flight_fast)),
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_coast] - stats.state_start[AltosLib.ao_flight_coast],
- AltosLib.state_name(AltosLib.ao_flight_coast)));
- if (stats.state_start[AltosLib.ao_flight_drogue] < stats.state_end[AltosLib.ao_flight_main])
- new FlightStat(layout, y++, "Descent time",
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_drogue] - stats.state_start[AltosLib.ao_flight_drogue],
- AltosLib.state_name(AltosLib.ao_flight_drogue)),
- String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_main] - stats.state_start[AltosLib.ao_flight_main],
- AltosLib.state_name(AltosLib.ao_flight_main)));
- if (stats.state_start[AltosLib.ao_flight_boost] < stats.state_end[AltosLib.ao_flight_main])
+ String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_main]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main])));
+ if (stats.state_time[AltosLib.ao_flight_drogue] != 0 || stats.state_time[AltosLib.ao_flight_main] != 0) {
+ double drogue_duration = stats.state_time[AltosLib.ao_flight_drogue];
+ double main_duration = stats.state_time[AltosLib.ao_flight_main];
+ double duration = drogue_duration + main_duration;
+
+ if (drogue_duration > 0 && main_duration > 0) {
+ new FlightStat(layout, y++, "Descent time",
+ String.format("%6.1f s %s", drogue_duration,
+ AltosLib.state_name(AltosLib.ao_flight_drogue)),
+ String.format("%6.1f s %s", main_duration,
+ AltosLib.state_name(AltosLib.ao_flight_main)));
+ } else if (duration > 0) {
+ new FlightStat(layout, y++, "Descent time",
+ String.format("%6.1f s", duration));
+ }
+ }
+ if (stats.landed_time > stats.boost_time)
new FlightStat(layout, y++, "Flight time",
- String.format("%6.1f s", stats.state_end[AltosLib.ao_flight_main] -
- stats.state_start[AltosLib.ao_flight_boost]));
- if (stats.has_gps) {
+ String.format("%6.1f s", stats.landed_time - stats.boost_time));
+ if (stats.has_gps && stats.pad_lat != AltosLib.MISSING) {
new FlightStat(layout, y++, "Pad location",
pos(stats.pad_lat,"N","S"),
pos(stats.pad_lon,"E","W"));
+ }
+ if (stats.has_gps && stats.lat != AltosLib.MISSING) {
new FlightStat(layout, y++, "Last reported location",
pos(stats.lat,"N","S"),
pos(stats.lon,"E","W"));
}
}
+
+ public void tell_closing() {
+ AltosUIPreferences.unregister_font_listener(this);
+ }
+
+ public AltosFlightStatsTable() {
+ layout = new GridBagLayout();
+
+ setLayout(layout);
+
+ AltosUIPreferences.register_font_listener(this);
+ }
+
+ public AltosFlightStatsTable(AltosFlightStats stats) {
+ this();
+ set_stats(stats);
+ }
}
diff --git a/altosuilib/AltosGraph.java b/altosuilib/AltosGraph.java
index 23fa1ffe..31042abb 100644
--- a/altosuilib/AltosGraph.java
+++ b/altosuilib/AltosGraph.java
@@ -16,14 +16,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
@@ -35,185 +35,32 @@ import org.jfree.chart.labels.*;
import org.jfree.data.xy.*;
import org.jfree.data.*;
-class AltosVoltage extends AltosUnits {
-
- public double value(double v, boolean imperial_units) {
- return v;
- }
-
- public double inverse(double v, boolean imperial_units) {
- return v;
- }
-
- public String show_units(boolean imperial_units) {
- return "V";
- }
-
- public String say_units(boolean imperial_units) {
- return "volts";
- }
-
- public int show_fraction(int width, boolean imperial_units) {
- return width / 2;
- }
-}
-
-class AltosNsat extends AltosUnits {
-
- public double value(double v, boolean imperial_units) {
- return v;
- }
-
- public double inverse(double v, boolean imperial_units) {
- return v;
- }
-
- public String show_units(boolean imperial_units) {
- return "Sats";
- }
-
- public String say_units(boolean imperial_units) {
- return "Satellites";
- }
-
- public int show_fraction(int width, boolean imperial_units) {
- return 0;
- }
-}
-
-class AltosPressure 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 "Pa";
- }
-
- public String say_units(boolean imperial_units) {
- return "pascals";
- }
-
- public int show_fraction(int width, boolean imperial_units) {
- return 0;
- }
-}
-
-class AltosDbm extends AltosUnits {
-
- public double value(double d, boolean imperial_units) {
- return d;
- }
-
- public double inverse(double d, boolean imperial_units) {
- return d;
- }
-
- public String show_units(boolean imperial_units) {
- return "dBm";
- }
-
- public String say_units(boolean imperial_units) {
- return "D B M";
- }
-
- public int show_fraction(int width, boolean imperial_units) {
- return 0;
- }
-}
-
-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;
- }
-}
-
-class AltosDopUnits 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 null;
- }
-
- public String say_units(boolean imperial_units) {
- return null;
- }
-
- public int show_fraction(int width, boolean imperial_units) {
- return 1;
- }
-}
-
public class AltosGraph extends AltosUIGraph {
static final private Color height_color = new Color(194,31,31);
+ static final private Color kalman_height_color = new Color(255,0,0);
static final private Color gps_height_color = new Color(150,31,31);
static final private Color pressure_color = new Color (225,31,31);
static final private Color range_color = new Color(100, 31, 31);
static final private Color distance_color = new Color(100, 31, 194);
static final private Color speed_color = new Color(31,194,31);
+ static final private Color kalman_speed_color = new Color(0,255,0);
+ static final private Color thrust_color = new Color(31,194,31);
static final private Color accel_color = new Color(31,31,194);
+ static final private Color vert_accel_color = new Color(64,164,164);
+ static final private Color kalman_accel_color = new Color(0,0,255);
static final private Color voltage_color = new Color(194, 194, 31);
static final private Color battery_voltage_color = new Color(194, 194, 31);
static final private Color drogue_voltage_color = new Color(150, 150, 31);
static final private Color main_voltage_color = new Color(100, 100, 31);
+ static final private Color igniter_voltage_color = new Color(80, 80, 31);
+ static final private Color igniter_marker_color = new Color(255, 0, 0);
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_speed_color = new Color (31, 112, 100);
static final private Color gps_climb_rate_color = new Color (31, 31, 112);
static final private Color gps_pdop_color = new Color(50, 194, 0);
static final private Color gps_hdop_color = new Color(50, 0, 194);
@@ -221,278 +68,268 @@ 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 accel_along_color = new Color(255, 0, 0);
+ static final private Color accel_across_color = new Color(0, 255, 0);
+ static final private Color accel_through_color = new Color(0, 0, 255);
+ static final private Color gyro_roll_color = new Color(192, 0, 0);
+ static final private Color gyro_pitch_color = new Color(0, 192, 0);
+ static final private Color gyro_yaw_color = new Color(0, 0, 192);
+ static final private Color mag_along_color = new Color(128, 0, 0);
+ static final private Color mag_across_color = new Color(0, 128, 0);
+ static final private Color mag_through_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();
- static AltosDopUnits dop_units = new AltosDopUnits();
+ static AltosUnits dop_units = null;
+
+ AltosUIFlightSeries flight_series;
- 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, dop_axis;
+ AltosUITimeSeries[] setup(AltosFlightStats stats, AltosUIFlightSeries flight_series) {
+ AltosCalData cal_data = flight_series.cal_data();
- public AltosGraph(AltosUIEnable enable, AltosFlightStats stats, AltosGraphDataSet dataSet) {
- super(enable);
+ AltosUIAxis height_axis, speed_axis, accel_axis, voltage_axis, temperature_axis, nsat_axis, dbm_axis;
+ AltosUIAxis distance_axis, pressure_axis, thrust_axis;
+ AltosUIAxis gyro_axis, orient_axis, mag_axis;
+ AltosUIAxis course_axis, dop_axis;
+
+ if (stats.serial != AltosLib.MISSING && stats.product != null && stats.flight != AltosLib.MISSING)
+ setName(String.format("%s %d flight %d\n", stats.product, stats.serial, stats.flight));
height_axis = newAxis("Height", AltosConvert.height, height_color);
- pressure_axis = newAxis("Pressure", pressure_units, pressure_color, 0);
+ pressure_axis = newAxis("Pressure", AltosConvert.pressure, pressure_color, 0);
speed_axis = newAxis("Speed", AltosConvert.speed, speed_color);
+ thrust_axis = newAxis("Thrust", AltosConvert.force, thrust_color);
accel_axis = newAxis("Acceleration", AltosConvert.accel, accel_color);
- voltage_axis = newAxis("Voltage", voltage_units, voltage_color);
+ voltage_axis = newAxis("Voltage", AltosConvert.voltage, voltage_color);
temperature_axis = newAxis("Temperature", AltosConvert.temperature, temperature_color, 0);
- nsat_axis = newAxis("Satellites", nsat_units, gps_nsat_color,
+ nsat_axis = newAxis("Satellites", null, gps_nsat_color,
AltosUIAxis.axis_include_zero | AltosUIAxis.axis_integer);
- dbm_axis = newAxis("Signal Strength", dbm_units, dbm_color, 0);
+ dbm_axis = newAxis("Signal Strength", null, 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);
- course_axis = newAxis("Course", orient_units, gps_course_color, 0);
+ gyro_axis = newAxis("Rotation Rate", AltosConvert.rotation_rate, gyro_roll_color, 0);
+ orient_axis = newAxis("Tilt Angle", AltosConvert.orient, orient_color, 0);
+ mag_axis = newAxis("Magnetic Field", AltosConvert.magnetic_field, mag_along_color, 0);
+ course_axis = newAxis("Course", AltosConvert.orient, gps_course_color, 0);
dop_axis = newAxis("Dilution of Precision", dop_units, gps_pdop_color, 0);
- addMarker("State", AltosGraphDataPoint.data_state, state_color);
-
- if (stats.has_flight_data) {
- addSeries("Height",
- AltosGraphDataPoint.data_height,
- AltosConvert.height,
- height_color,
- true,
- height_axis);
- addSeries("Pressure",
- AltosGraphDataPoint.data_pressure,
- pressure_units,
- pressure_color,
- false,
- pressure_axis);
- addSeries("Speed",
- AltosGraphDataPoint.data_speed,
- AltosConvert.speed,
- speed_color,
- true,
- speed_axis);
- addSeries("Acceleration",
- AltosGraphDataPoint.data_accel,
- AltosConvert.accel,
- accel_color,
- true,
- accel_axis);
- }
- if (stats.has_gps) {
- boolean enable_gps = false;
-
- if (!stats.has_flight_data)
- enable_gps = true;
-
- addSeries("Range",
- AltosGraphDataPoint.data_range,
- AltosConvert.distance,
- range_color,
- false,
- distance_axis);
- addSeries("Distance",
- AltosGraphDataPoint.data_distance,
- AltosConvert.distance,
- distance_color,
- enable_gps,
- distance_axis);
- addSeries("GPS Height",
- AltosGraphDataPoint.data_gps_height,
- AltosConvert.height,
- gps_height_color,
- enable_gps,
- height_axis);
- addSeries("GPS Altitude",
- AltosGraphDataPoint.data_gps_altitude,
- AltosConvert.height,
- gps_height_color,
- false,
- height_axis);
- addSeries("GPS Satellites in Solution",
- AltosGraphDataPoint.data_gps_nsat_solution,
- nsat_units,
- gps_nsat_solution_color,
- false,
- nsat_axis);
- if (stats.has_gps_sats) {
- addSeries("GPS Satellites in View",
- AltosGraphDataPoint.data_gps_nsat_view,
- nsat_units,
- gps_nsat_view_color,
- false,
- nsat_axis);
- }
- if (stats.has_gps_detail) {
- 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,
- enable_gps,
- speed_axis);
- addSeries("GPS Climb Rate",
- AltosGraphDataPoint.data_gps_climb_rate,
- AltosConvert.speed,
- gps_climb_rate_color,
- enable_gps,
- speed_axis);
- }
- addSeries("GPS Position DOP",
- AltosGraphDataPoint.data_gps_pdop,
- dop_units,
- gps_pdop_color,
- false,
- dop_axis);
- if (stats.has_gps_detail) {
- addSeries("GPS Horizontal DOP",
- AltosGraphDataPoint.data_gps_hdop,
- dop_units,
- gps_hdop_color,
- false,
- dop_axis);
- addSeries("GPS Vertical DOP",
- AltosGraphDataPoint.data_gps_vdop,
- dop_units,
- gps_vdop_color,
- false,
- dop_axis);
- }
- }
- if (stats.has_rssi)
- addSeries("Received Signal Strength",
- AltosGraphDataPoint.data_rssi,
- dbm_units,
- dbm_color,
- false,
- dbm_axis);
-
- if (stats.has_battery)
- addSeries("Battery Voltage",
- AltosGraphDataPoint.data_battery_voltage,
- voltage_units,
- battery_voltage_color,
- false,
- voltage_axis);
-
- if (stats.has_flight_adc) {
- addSeries("Temperature",
- AltosGraphDataPoint.data_temperature,
- AltosConvert.temperature,
- temperature_color,
- false,
- temperature_axis);
- addSeries("Drogue Voltage",
- AltosGraphDataPoint.data_drogue_voltage,
- voltage_units,
- drogue_voltage_color,
- false,
- voltage_axis);
- addSeries("Main Voltage",
- AltosGraphDataPoint.data_main_voltage,
- voltage_units,
- main_voltage_color,
- false,
- voltage_axis);
+ flight_series.register_axis("default",
+ speed_color,
+ false,
+ speed_axis);
+
+ flight_series.register_marker(AltosUIFlightSeries.state_name,
+ state_color,
+ true,
+ plot,
+ true);
+
+ flight_series.register_marker(AltosUIFlightSeries.pyro_fired_name,
+ igniter_marker_color,
+ true,
+ plot,
+ false);
+
+ flight_series.register_axis(AltosUIFlightSeries.accel_name,
+ accel_color,
+ true,
+ accel_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.vert_accel_name,
+ vert_accel_color,
+ true,
+ accel_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.kalman_accel_name,
+ kalman_accel_color,
+ false,
+ accel_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.rssi_name,
+ dbm_color,
+ false,
+ dbm_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.speed_name,
+ speed_color,
+ true,
+ speed_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.kalman_speed_name,
+ kalman_speed_color,
+ true,
+ speed_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.pressure_name,
+ pressure_color,
+ false,
+ pressure_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.height_name,
+ height_color,
+ true,
+ height_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.altitude_name,
+ height_color,
+ false,
+ height_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.kalman_height_name,
+ kalman_height_color,
+ false,
+ height_axis);
+
+
+ flight_series.register_axis(AltosUIFlightSeries.temperature_name,
+ temperature_color,
+ false,
+ temperature_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.battery_voltage_name,
+ battery_voltage_color,
+ false,
+ voltage_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.apogee_voltage_name,
+ drogue_voltage_color,
+ false,
+ voltage_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.main_voltage_name,
+ main_voltage_color,
+ false,
+ voltage_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.sats_in_view_name,
+ gps_nsat_view_color,
+ false,
+ nsat_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.sats_in_soln_name,
+ gps_nsat_solution_color,
+ false,
+ nsat_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_pdop_name,
+ gps_pdop_color,
+ false,
+ dop_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_hdop_name,
+ gps_hdop_color,
+ false,
+ dop_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_vdop_name,
+ gps_vdop_color,
+ false,
+ dop_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_altitude_name,
+ gps_height_color,
+ false,
+ height_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_height_name,
+ gps_height_color,
+ false,
+ height_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_ground_speed_name,
+ gps_ground_speed_color,
+ false,
+ speed_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_ascent_rate_name,
+ gps_climb_rate_color,
+ false,
+ speed_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_course_name,
+ gps_course_color,
+ false,
+ course_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gps_speed_name,
+ gps_speed_color,
+ false,
+ speed_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.accel_along_name,
+ accel_along_color,
+ false,
+ accel_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.accel_across_name,
+ accel_across_color,
+ false,
+ accel_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.accel_through_name,
+ accel_through_color,
+ false,
+ accel_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gyro_roll_name,
+ gyro_roll_color,
+ false,
+ gyro_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gyro_pitch_name,
+ gyro_pitch_color,
+ false,
+ gyro_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.gyro_yaw_name,
+ gyro_yaw_color,
+ false,
+ gyro_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.mag_along_name,
+ mag_along_color,
+ false,
+ mag_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.mag_across_name,
+ mag_across_color,
+ false,
+ mag_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.mag_through_name,
+ mag_through_color,
+ false,
+ mag_axis);
+
+ flight_series.register_axis(AltosUIFlightSeries.orient_name,
+ orient_color,
+ false,
+ orient_axis);
+
+ for (int channel = 0; channel < 26; channel++) {
+ flight_series.register_axis(flight_series.igniter_voltage_name(channel),
+ igniter_voltage_color,
+ false,
+ voltage_axis);
}
- if (stats.has_imu) {
- addSeries("Acceleration Along",
- AltosGraphDataPoint.data_accel_along,
- AltosConvert.accel,
- accel_x_color,
- false,
- accel_axis);
- addSeries("Acceleration Across",
- AltosGraphDataPoint.data_accel_across,
- AltosConvert.accel,
- accel_y_color,
- false,
- accel_axis);
- addSeries("Acceleration Through",
- AltosGraphDataPoint.data_accel_through,
- AltosConvert.accel,
- accel_z_color,
- false,
- accel_axis);
- addSeries("Roll Rate",
- AltosGraphDataPoint.data_gyro_roll,
- gyro_units,
- gyro_x_color,
- false,
- gyro_axis);
- addSeries("Pitch Rate",
- AltosGraphDataPoint.data_gyro_pitch,
- gyro_units,
- gyro_y_color,
- false,
- gyro_axis);
- addSeries("Yaw Rate",
- AltosGraphDataPoint.data_gyro_yaw,
- gyro_units,
- gyro_z_color,
- false,
- gyro_axis);
- }
- if (stats.has_mag) {
- addSeries("Magnetometer Along",
- AltosGraphDataPoint.data_mag_along,
- mag_units,
- mag_x_color,
- false,
- mag_axis);
- addSeries("Magnetometer Across",
- AltosGraphDataPoint.data_mag_across,
- mag_units,
- mag_y_color,
- false,
- mag_axis);
- addSeries("Magnetometer Through",
- AltosGraphDataPoint.data_mag_through,
- 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);
- if (stats.num_ignitor > 0) {
- for (int i = 0; i < stats.num_ignitor; i++)
- addSeries(AltosLib.ignitor_name(i),
- AltosGraphDataPoint.data_ignitor_0 + i,
- voltage_units,
- main_voltage_color,
- false,
- voltage_axis);
- for (int i = 0; i < stats.num_ignitor; i++)
- addMarker(AltosLib.ignitor_name(i), AltosGraphDataPoint.data_ignitor_fired_0 + i, state_color);
- }
+ flight_series.register_axis(AltosUIFlightSeries.thrust_name,
+ thrust_color,
+ true,
+ thrust_axis);
+
+ return flight_series.series(cal_data);
+ }
+
+ public void set_data(AltosFlightStats stats, AltosUIFlightSeries flight_series) {
+ set_series(setup(stats, flight_series));
+ }
+
+ public AltosGraph(AltosUIEnable enable) {
+ super(enable, "Flight");
+ }
- setDataSet(dataSet);
+ public AltosGraph(AltosUIEnable enable, AltosFlightStats stats, AltosUIFlightSeries flight_series) {
+ this(enable);
+ set_series(setup(stats, flight_series));
}
}
diff --git a/altosuilib/AltosGraphDataPoint.java b/altosuilib/AltosGraphDataPoint.java
deleted file mode 100644
index 0012d96a..00000000
--- a/altosuilib/AltosGraphDataPoint.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright © 2013 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altosuilib_11;
-
-import org.altusmetrum.altoslib_11.*;
-
-public class AltosGraphDataPoint implements AltosUIDataPoint {
-
- AltosState state;
-
- public static final int data_height = 0;
- public static final int data_speed = 1;
- public static final int data_accel = 2;
- public static final int data_temp = 3;
- public static final int data_battery_voltage = 4;
- public static final int data_drogue_voltage = 5;
- public static final int data_main_voltage = 6;
- public static final int data_rssi = 7;
- public static final int data_state = 8;
- public static final int data_gps_height = 9;
- public static final int data_gps_nsat_solution = 10;
- public static final int data_gps_nsat_view = 11;
- public static final int data_gps_altitude = 12;
- public static final int data_temperature = 13;
- public static final int data_range = 14;
- public static final int data_distance = 15;
- public static final int data_pressure = 16;
- public static final int data_accel_along = 17;
- public static final int data_accel_across = 18;
- public static final int data_accel_through = 19;
- public static final int data_gyro_roll = 20;
- public static final int data_gyro_pitch = 21;
- public static final int data_gyro_yaw = 22;
- public static final int data_mag_along = 23;
- public static final int data_mag_across = 24;
- public static final int data_mag_through = 25;
- public static final int data_orient = 26;
- public static final int data_gps_course = 27;
- public static final int data_gps_ground_speed = 28;
- public static final int data_gps_climb_rate = 29;
- public static final int data_gps_pdop = 30;
- public static final int data_gps_hdop = 31;
- public static final int data_gps_vdop = 32;
- public static final int data_ignitor_0 = 33;
- 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;
- public static final int data_ignitor_fired_max = data_ignitor_fired_0 + data_ignitor_num - 1;
-
- public double x() throws AltosUIDataMissing {
- double time = state.time_since_boost();
- if (time < -2)
- throw new AltosUIDataMissing(-1);
- return time;
- }
-
- public double y(int index) throws AltosUIDataMissing {
- double y = AltosLib.MISSING;
- switch (index) {
- case data_height:
- y = state.height();
- break;
- case data_speed:
- y = state.speed();
- break;
- case data_accel:
- y = state.acceleration();
- break;
- case data_temp:
- y = state.temperature;
- break;
- case data_battery_voltage:
- y = state.battery_voltage;
- break;
- case data_drogue_voltage:
- y = state.apogee_voltage;
- break;
- case data_main_voltage:
- y = state.main_voltage;
- break;
- case data_rssi:
- y = state.rssi;
- break;
- case data_gps_height:
- y = state.gps_height;
- break;
- case data_gps_nsat_solution:
- if (state.gps != null)
- y = state.gps.nsat;
- break;
- case data_gps_nsat_view:
- if (state.gps != null) {
- if (state.gps.cc_gps_sat != null)
- y = state.gps.cc_gps_sat.length;
- else
- y = 0;
- }
- break;
- case data_gps_altitude:
- y = state.gps_altitude();
- break;
- case data_temperature:
- y = state.temperature;
- break;
- case data_range:
- y = state.range;
- break;
- case data_distance:
- if (state.from_pad != null)
- y = state.from_pad.distance;
- break;
- case data_pressure:
- y = state.pressure();
- break;
-
- case data_accel_along:
- y = state.accel_along();
- break;
- case data_accel_across:
- y = state.accel_across();
- break;
- case data_accel_through:
- y = state.accel_through();
- break;
- case data_gyro_roll:
- y = state.gyro_roll();
- break;
- case data_gyro_pitch:
- y = state.gyro_pitch();
- break;
- case data_gyro_yaw:
- y = state.gyro_yaw();
- break;
- case data_mag_along:
- y = state.mag_along();
- break;
- case data_mag_across:
- y = state.mag_across();
- break;
- case data_mag_through:
- y = state.mag_through();
- break;
- 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;
- case data_gps_pdop:
- if (state.gps != null)
- y = state.gps.pdop;
- else
- y = AltosLib.MISSING;
- break;
- case data_gps_hdop:
- if (state.gps != null)
- y = state.gps.hdop;
- else
- y = AltosLib.MISSING;
- break;
- case data_gps_vdop:
- if (state.gps != null)
- y = state.gps.vdop;
- else
- y = AltosLib.MISSING;
- break;
- default:
- if (data_ignitor_0 <= index && index <= data_ignitor_max) {
- int ignitor = index - data_ignitor_0;
- if (state.ignitor_voltage != null && ignitor < state.ignitor_voltage.length)
- y = state.ignitor_voltage[ignitor];
- } 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) {
- if ((state.pyro_fired & (1 << ignitor)) != 0)
- y = 1;
- else
- y = 0;
- }
- }
- break;
- }
- if (y == AltosLib.MISSING)
- throw new AltosUIDataMissing(index);
- return y;
- }
-
- public int id(int index) {
- if (index == data_state) {
- int s = state.state();
- if (AltosLib.ao_flight_boost <= s && s <= AltosLib.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) {
- if (state.ignitor_voltage != null && ignitor < state.ignitor_voltage.length) {
- if ((state.pyro_fired & (1 << ignitor)) != 0)
- return 1;
- }
- }
- }
- return -1;
- }
-
- public String id_name(int index) {
- if (index == data_state) {
- return state.state_name();
- } 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)
- return AltosLib.ignitor_name(ignitor);
- }
- return "";
- }
-
- public AltosGraphDataPoint (AltosState state) {
- this.state = state;
- }
-}
diff --git a/altosuilib/AltosGraphDataSet.java b/altosuilib/AltosGraphDataSet.java
deleted file mode 100644
index 065a7815..00000000
--- a/altosuilib/AltosGraphDataSet.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright © 2013 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altosuilib_11;
-
-import java.lang.*;
-import java.io.*;
-import java.util.*;
-import org.altusmetrum.altoslib_11.*;
-
-class AltosGraphIterator implements Iterator<AltosUIDataPoint> {
- AltosGraphDataSet dataSet;
- Iterator<AltosState> iterator;
-
- public boolean hasNext() {
- return iterator.hasNext();
- }
-
- public AltosUIDataPoint next() {
- AltosState state = iterator.next();
-
- if (state.flight != AltosLib.MISSING) {
- if (dataSet.callsign == null && state.callsign != null)
- dataSet.callsign = state.callsign;
-
- if (dataSet.serial == 0 && state.serial != 0)
- dataSet.serial = state.serial;
-
- if (dataSet.flight == 0 && state.flight != 0)
- dataSet.flight = state.flight;
- }
-
- return new AltosGraphDataPoint(state);
- }
-
- public AltosGraphIterator (Iterator<AltosState> iterator, AltosGraphDataSet dataSet) {
- this.iterator = iterator;
- this.dataSet = dataSet;
- }
-
- public void remove() {
- }
-}
-
-class AltosGraphIterable implements Iterable<AltosUIDataPoint> {
- AltosGraphDataSet dataSet;
-
- public Iterator<AltosUIDataPoint> iterator() {
- return new AltosGraphIterator(dataSet.states.iterator(), dataSet);
- }
-
- public AltosGraphIterable(AltosGraphDataSet dataSet) {
- this.dataSet = dataSet;
- }
-}
-
-public class AltosGraphDataSet implements AltosUIDataSet {
- String callsign;
- int serial;
- int flight;
- AltosStateIterable states;
-
- public String name() {
- if (callsign != null)
- return String.format("%s - %d/%d", callsign, serial, flight);
- else
- return String.format("%d/%d", serial, flight);
- }
-
- public Iterable<AltosUIDataPoint> dataPoints() {
- return new AltosGraphIterable(this);
- }
-
- public AltosGraphDataSet (AltosStateIterable states) {
- this.states = states;
- this.callsign = null;
- this.serial = 0;
- this.flight = 0;
- }
-}
diff --git a/altosuilib/AltosInfoTable.java b/altosuilib/AltosInfoTable.java
index 7ede2824..9e528b1f 100644
--- a/altosuilib/AltosInfoTable.java
+++ b/altosuilib/AltosInfoTable.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosInfoTable extends JTable implements AltosFlightDisplay, HierarchyListener {
private AltosFlightInfoTableModel model;
@@ -128,6 +128,8 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay, Hierar
public void show(AltosState state, AltosListenerState listener_state) {
+ AltosCalData cal_data = state.cal_data();
+
if (!isShowing()) {
last_state = state;
last_listener_state = listener_state;
@@ -136,14 +138,14 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay, Hierar
reset();
if (state != null) {
- if (state.device_type != AltosLib.MISSING)
- info_add_row(0, "Device", "%s", AltosLib.product_name(state.device_type));
- else if (state.product != null)
- info_add_row(0, "Device", "%s", state.product);
+ if (cal_data.device_type != AltosLib.MISSING)
+ info_add_row(0, "Device", "%s", AltosLib.product_name(cal_data.device_type));
+ else if (cal_data.product != null)
+ info_add_row(0, "Device", "%s", cal_data.product);
if (state.altitude() != AltosLib.MISSING)
info_add_row(0, "Altitude", "%6.0f m", state.altitude());
- if (state.ground_altitude() != AltosLib.MISSING)
- info_add_row(0, "Pad altitude", "%6.0f m", state.ground_altitude());
+ if (cal_data.ground_altitude != AltosLib.MISSING)
+ info_add_row(0, "Pad altitude", "%6.0f m", cal_data.ground_altitude);
if (state.height() != AltosLib.MISSING)
info_add_row(0, "Height", "%6.0f m", state.height());
if (state.max_height() != AltosLib.MISSING)
diff --git a/altosuilib/AltosLed.java b/altosuilib/AltosLed.java
index c06e45e5..b53e7604 100644
--- a/altosuilib/AltosLed.java
+++ b/altosuilib/AltosLed.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
diff --git a/altosuilib/AltosLights.java b/altosuilib/AltosLights.java
index 394cfc67..7b02d770 100644
--- a/altosuilib/AltosLights.java
+++ b/altosuilib/AltosLights.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import javax.swing.*;
diff --git a/altosuilib/AltosPositionListener.java b/altosuilib/AltosPositionListener.java
index 8c4d2516..f44735e2 100644
--- a/altosuilib/AltosPositionListener.java
+++ b/altosuilib/AltosPositionListener.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
public interface AltosPositionListener {
public void position_changed(int position);
diff --git a/altosuilib/AltosRomconfigUI.java b/altosuilib/AltosRomconfigUI.java
index c1b8ac26..74323218 100644
--- a/altosuilib/AltosRomconfigUI.java
+++ b/altosuilib/AltosRomconfigUI.java
@@ -16,12 +16,12 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosRomconfigUI
extends AltosUIDialog
diff --git a/altosuilib/AltosScanUI.java b/altosuilib/AltosScanUI.java
index 8843429a..c63f027c 100644
--- a/altosuilib/AltosScanUI.java
+++ b/altosuilib/AltosScanUI.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
@@ -26,7 +26,7 @@ import java.io.*;
import java.util.*;
import java.text.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
class AltosScanResult {
String callsign;
@@ -213,10 +213,11 @@ public class AltosScanUI
if (state == null)
continue;
packet_count++;
- if (state.flight != AltosLib.MISSING) {
- final AltosScanResult result = new AltosScanResult(state.callsign,
- state.serial,
- state.flight,
+ AltosCalData cal_data = state.cal_data();
+ if (cal_data.flight != AltosLib.MISSING) {
+ final AltosScanResult result = new AltosScanResult(cal_data.callsign,
+ cal_data.serial,
+ cal_data.flight,
frequencies[frequency_index],
telemetry,
rate);
diff --git a/altosuilib/AltosSerial.java b/altosuilib/AltosSerial.java
index 5c32a7d8..d7c6129c 100644
--- a/altosuilib/AltosSerial.java
+++ b/altosuilib/AltosSerial.java
@@ -20,13 +20,13 @@
* Deal with TeleDongle on a serial port
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import libaltosJNI.*;
/*
diff --git a/altosuilib/AltosSerialInUseException.java b/altosuilib/AltosSerialInUseException.java
index e0de8ad7..c8ca4d56 100644
--- a/altosuilib/AltosSerialInUseException.java
+++ b/altosuilib/AltosSerialInUseException.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
public class AltosSerialInUseException extends Exception {
public AltosDevice device;
diff --git a/altosuilib/AltosUIAxis.java b/altosuilib/AltosUIAxis.java
index e41667ef..fe94f161 100644
--- a/altosuilib/AltosUIAxis.java
+++ b/altosuilib/AltosUIAxis.java
@@ -16,14 +16,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
@@ -49,11 +49,14 @@ public class AltosUIAxis extends NumberAxis {
public final static int axis_default = axis_include_zero;
public void set_units() {
- String u = units.parse_units();
- if (u != null)
- setLabel(String.format("%s (%s)", label, u));
- else
- setLabel(label);
+ if (units != null) {
+ String u = units.parse_units();
+ if (u != null) {
+ setLabel(String.format("%s (%s)", label, u));
+ return;
+ }
+ }
+ setLabel(label);
}
public void set_enable(boolean enable) {
diff --git a/altosuilib/AltosUIConfigure.java b/altosuilib/AltosUIConfigure.java
index 19512f49..e3d86724 100644
--- a/altosuilib/AltosUIConfigure.java
+++ b/altosuilib/AltosUIConfigure.java
@@ -16,14 +16,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
class DelegatingRenderer implements ListCellRenderer<Object> {
diff --git a/altosuilib/AltosUIDataMissing.java b/altosuilib/AltosUIDataMissing.java
index a59cc0a0..05227e1d 100644
--- a/altosuilib/AltosUIDataMissing.java
+++ b/altosuilib/AltosUIDataMissing.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
public class AltosUIDataMissing extends Exception {
public int id;
diff --git a/altosuilib/AltosUIDataPoint.java b/altosuilib/AltosUIDataPoint.java
index 4107feae..36fadeaf 100644
--- a/altosuilib/AltosUIDataPoint.java
+++ b/altosuilib/AltosUIDataPoint.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
public interface AltosUIDataPoint {
public abstract double x() throws AltosUIDataMissing;
diff --git a/altosuilib/AltosUIDataSet.java b/altosuilib/AltosUIDataSet.java
index ffab46c1..ddda3d3d 100644
--- a/altosuilib/AltosUIDataSet.java
+++ b/altosuilib/AltosUIDataSet.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
public interface AltosUIDataSet {
public abstract String name();
diff --git a/altosuilib/AltosUIDialog.java b/altosuilib/AltosUIDialog.java
index 85b40229..5eafa457 100644
--- a/altosuilib/AltosUIDialog.java
+++ b/altosuilib/AltosUIDialog.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
diff --git a/altosuilib/AltosUIEnable.java b/altosuilib/AltosUIEnable.java
index 4c733b96..0c23fa8d 100644
--- a/altosuilib/AltosUIEnable.java
+++ b/altosuilib/AltosUIEnable.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
@@ -24,7 +24,7 @@ import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
diff --git a/altosuilib/AltosUIFlightSeries.java b/altosuilib/AltosUIFlightSeries.java
new file mode 100644
index 00000000..19bed609
--- /dev/null
+++ b/altosuilib/AltosUIFlightSeries.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright © 2017 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ */
+
+package org.altusmetrum.altosuilib_12;
+
+import java.util.*;
+import java.awt.*;
+import javax.swing.*;
+import org.altusmetrum.altoslib_12.*;
+
+import org.jfree.ui.*;
+import org.jfree.chart.*;
+import org.jfree.chart.plot.*;
+import org.jfree.chart.axis.*;
+import org.jfree.chart.renderer.*;
+import org.jfree.chart.renderer.xy.*;
+import org.jfree.chart.labels.*;
+import org.jfree.data.xy.*;
+import org.jfree.data.*;
+
+class AltosUITimeSeriesAxis {
+ Color color;
+ boolean enabled;
+ boolean marker;
+ boolean marker_top;
+ AltosUIAxis axis;
+ XYPlot plot;
+
+ public AltosUITimeSeriesAxis(Color color, boolean enabled, AltosUIAxis axis, XYPlot plot, boolean marker, boolean marker_top) {
+ this.color = color;
+ this.enabled = enabled;
+ this.axis = axis;
+ this.plot = plot;
+ this.marker = marker;
+ this.marker_top = marker_top;
+ }
+}
+
+public class AltosUIFlightSeries extends AltosFlightSeries {
+
+ Hashtable<String,AltosUITimeSeriesAxis> axes;
+
+ AltosUIFlightSeries flight_series;
+
+ void fill_axes(String label, AltosUITimeSeriesAxis axis) {
+ for (AltosTimeSeries ts : series) {
+ AltosUITimeSeries uts = (AltosUITimeSeries) ts;
+
+ if (label.equals(ts.label) || (label.equals("default") && uts.color == null)) {
+ if (axis.marker)
+ uts.set_marker(axis.color, axis.enabled, axis.plot, axis.marker_top);
+ else
+ uts.set_axis(axis.color, axis.enabled, axis.axis);
+ }
+ }
+ }
+
+ public void register_axis(String label,
+ Color color,
+ boolean enabled,
+ AltosUIAxis axis) {
+ AltosUITimeSeriesAxis tsa = new AltosUITimeSeriesAxis(color,
+ enabled,
+ axis,
+ null,
+ false,
+ false);
+ axes.put(label, tsa);
+ fill_axes(label, tsa);
+ }
+
+ public void register_marker(String label,
+ Color color,
+ boolean enabled,
+ XYPlot plot,
+ boolean marker_top) {
+ AltosUITimeSeriesAxis tsa = new AltosUITimeSeriesAxis(color,
+ enabled,
+ null,
+ plot,
+ true,
+ marker_top);
+ axes.put(label, tsa);
+ fill_axes(label, tsa);
+ }
+
+ public AltosTimeSeries make_series(String label, AltosUnits units) {
+
+
+ AltosUITimeSeries time_series = new AltosUITimeSeries(label, units);
+
+ AltosUITimeSeriesAxis tsa = axes.get(label);
+ if (tsa == null)
+ tsa = axes.get("default");
+ if (tsa != null) {
+ if (tsa.marker)
+ time_series.set_marker(tsa.color, tsa.enabled, tsa.plot, tsa.marker_top);
+ else
+ time_series.set_axis(tsa.color, tsa.enabled, tsa.axis);
+ }
+ return time_series;
+ }
+
+ public AltosUITimeSeries[] series(AltosCalData cal_data) {
+ finish();
+ return series.toArray(new AltosUITimeSeries[0]);
+ }
+
+ public AltosUIFlightSeries (AltosCalData cal_data) {
+ super(cal_data);
+ axes = new Hashtable<String,AltosUITimeSeriesAxis>();
+ }
+}
diff --git a/altosuilib/AltosUIFlightTab.java b/altosuilib/AltosUIFlightTab.java
index 3adbdb33..cf6a0c74 100644
--- a/altosuilib/AltosUIFlightTab.java
+++ b/altosuilib/AltosUIFlightTab.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public abstract class AltosUIFlightTab extends JComponent implements AltosFlightDisplay, HierarchyListener {
public GridBagLayout layout;
diff --git a/altosuilib/AltosUIFrame.java b/altosuilib/AltosUIFrame.java
index e5007fff..b7eee664 100644
--- a/altosuilib/AltosUIFrame.java
+++ b/altosuilib/AltosUIFrame.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
diff --git a/altosuilib/AltosUIFreqList.java b/altosuilib/AltosUIFreqList.java
index 4dd9fece..7a5c3543 100644
--- a/altosuilib/AltosUIFreqList.java
+++ b/altosuilib/AltosUIFreqList.java
@@ -16,10 +16,10 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosUIFreqList extends JComboBox<AltosFrequency> {
diff --git a/altosuilib/AltosUIGraph.java b/altosuilib/AltosUIGraph.java
index d3760384..0caabcfa 100644
--- a/altosuilib/AltosUIGraph.java
+++ b/altosuilib/AltosUIGraph.java
@@ -16,14 +16,15 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
+import java.util.*;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
@@ -42,10 +43,10 @@ public class AltosUIGraph implements AltosUnitsListener {
public ChartPanel panel;
NumberAxis xAxis;
AltosUIEnable enable;
- ArrayList<AltosUIGrapher> graphers;
- AltosUIDataSet dataSet;
+ AltosUITimeSeries[] series;
int axis_index;
int series_index;
+ Hashtable<Integer,Boolean> axes_added;
static final private Color gridline_color = new Color(0, 0, 0);
static final private Color border_color = new Color(255, 255, 255);
@@ -65,70 +66,65 @@ public class AltosUIGraph implements AltosUnitsListener {
return newAxis(label, units, color, AltosUIAxis.axis_default);
}
- public void addSeries(String label, int fetch, AltosUnits units, Color color,
- boolean enabled, AltosUIAxis axis) {
- AltosUISeries series = new AltosUISeries(label, fetch, units, color, enabled, axis);
- XYSeriesCollection dataset = new XYSeriesCollection(series);
+ void addAxis(AltosUIAxis axis) {
+ if (!axes_added.containsKey(axis.index)) {
+ axes_added.put(axis.index, true);
+ plot.setRangeAxis(axis.index, axis);
+ }
+ }
+
+ public void addSeries(AltosUITimeSeries series) {
+ XYSeriesCollection dataset = new XYSeriesCollection(series.xy_series());
+
+ addAxis(series.axis);
series.renderer.setPlot(plot);
plot.setDataset(series_index, dataset);
plot.setRenderer(series_index, series.renderer);
- plot.mapDatasetToRangeAxis(series_index, axis.index);
+ plot.mapDatasetToRangeAxis(series_index, series.axis.index);
if (enable != null)
- enable.add(label, series, enabled);
- this.graphers.add(series);
+ enable.add(series.label, series, series.enable);
series_index++;
}
- public void addSeries(String label, int fetch, AltosUnits units, Color color) {
- addSeries(label, fetch, units, color, true, newAxis(label, units, color));
- }
-
- public void addMarker(String label, int fetch, Color color) {
- AltosUIMarker marker = new AltosUIMarker(fetch, color, plot);
- this.graphers.add(marker);
- }
-
- public void resetData() {
- for (AltosUIGrapher g : graphers) {
- g.clear();
- g.setNotify(false);
- }
- if (dataSet != null) {
- for (AltosUIDataPoint dataPoint : dataSet.dataPoints())
- for (AltosUIGrapher g : graphers)
- g.add(dataPoint);
- }
- for (AltosUIGrapher g : graphers) {
- g.setNotify(true);
- g.fireSeriesChanged();
- }
+ public void addMarker(AltosUITimeSeries series) {
}
public void units_changed(boolean imperial_units) {
- for (AltosUIGrapher g : graphers)
- g.set_units();
- resetData();
+ for (AltosUITimeSeries s : series)
+ s.set_units();
}
public void setName (String name) {
chart.setTitle(name);
}
- public void setDataSet (AltosUIDataSet dataSet) {
- this.dataSet = dataSet;
- resetData();
- if (dataSet != null)
- setName(dataSet.name());
+ public void set_series(AltosUITimeSeries[] series) {
+ this.series = series;
+ boolean any_enabled = false;
+
+ for (AltosUITimeSeries s : series)
+ if (s.enable)
+ any_enabled = true;
+
+ if (!any_enabled)
+ for (AltosUITimeSeries s : series)
+ s.set_enable(true);
+
+ for (AltosUITimeSeries s : series)
+ addSeries(s);
+
+ units_changed(false);
}
- public AltosUIGraph(AltosUIEnable enable) {
+ public AltosUIGraph(AltosUIEnable enable, String title) {
this.enable = enable;
- this.graphers = new ArrayList<AltosUIGrapher>();
- this.series_index = 0;
+ this.series = null;
this.axis_index = 0;
+ axes_added = new Hashtable<Integer,Boolean>();
+
xAxis = new NumberAxis("Time (s)");
xAxis.setAutoRangeIncludesZero(true);
@@ -139,7 +135,7 @@ public class AltosUIGraph implements AltosUnitsListener {
plot.setDomainPannable(true);
plot.setRangePannable(true);
- chart = new JFreeChart("Flight", JFreeChart.DEFAULT_TITLE_FONT,
+ chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
plot, true);
ChartUtilities.applyCurrentTheme(chart);
@@ -156,5 +152,6 @@ public class AltosUIGraph implements AltosUnitsListener {
panel.setPreferredSize(new java.awt.Dimension(800, 500));
AltosPreferences.register_units_listener(this);
+
}
}
diff --git a/altosuilib/AltosUIGrapher.java b/altosuilib/AltosUIGrapher.java
index 07358144..916d0b3f 100644
--- a/altosuilib/AltosUIGrapher.java
+++ b/altosuilib/AltosUIGrapher.java
@@ -16,14 +16,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
@@ -39,6 +39,8 @@ interface AltosUIGrapher {
public abstract void set_units();
+ public abstract boolean need_reset();
+
public abstract void clear();
public abstract void add(AltosUIDataPoint dataPoint);
diff --git a/altosuilib/AltosUIImage.java b/altosuilib/AltosUIImage.java
index b157a2ce..f23b50bc 100644
--- a/altosuilib/AltosUIImage.java
+++ b/altosuilib/AltosUIImage.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_11;
+package org.altusmetrum.altoslib_12;
import javax.swing.*;
import javax.imageio.ImageIO;
diff --git a/altosuilib/AltosUIIndicator.java b/altosuilib/AltosUIIndicator.java
index f47a2f29..ac2e6f06 100644
--- a/altosuilib/AltosUIIndicator.java
+++ b/altosuilib/AltosUIIndicator.java
@@ -16,11 +16,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public abstract class AltosUIIndicator implements AltosFontListener, AltosUnitsListener {
JLabel label;
diff --git a/altosuilib/AltosUILib.java b/altosuilib/AltosUILib.java
index 0c5fa1c7..ef706e36 100644
--- a/altosuilib/AltosUILib.java
+++ b/altosuilib/AltosUILib.java
@@ -16,12 +16,12 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import libaltosJNI.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosUILib extends AltosLib {
diff --git a/altosuilib/AltosUIListener.java b/altosuilib/AltosUIListener.java
index 55ce584a..54a00661 100644
--- a/altosuilib/AltosUIListener.java
+++ b/altosuilib/AltosUIListener.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
public interface AltosUIListener {
public void ui_changed(String look_and_feel);
diff --git a/altosuilib/AltosUIMap.java b/altosuilib/AltosUIMap.java
index 3e4cbe9b..2e1e8f16 100644
--- a/altosuilib/AltosUIMap.java
+++ b/altosuilib/AltosUIMap.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
@@ -28,7 +28,7 @@ import java.awt.geom.*;
import java.util.*;
import java.util.concurrent.*;
import javax.imageio.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosMapInterface {
@@ -413,6 +413,10 @@ public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosM
map.show(state, listener_state);
}
+ public void show(AltosGPS gps, int state) {
+ map.show(gps, state);
+ }
+
public String getName() {
return "Map";
}
@@ -422,6 +426,10 @@ public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosM
map.centre(state);
}
+ public void centre(AltosGPS gps) {
+ map.centre(gps);
+ }
+
/* internal layout bits */
private GridBagLayout layout = new GridBagLayout();
diff --git a/altosuilib/AltosUIMapPreload.java b/altosuilib/AltosUIMapPreload.java
index 06c4c59b..81cda0d2 100644
--- a/altosuilib/AltosUIMapPreload.java
+++ b/altosuilib/AltosUIMapPreload.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
@@ -27,7 +27,7 @@ import java.text.*;
import java.lang.Math;
import java.net.URL;
import java.net.URLConnection;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
class AltosUIMapPos extends Box implements ActionListener {
AltosUIMapPreload preload;
diff --git a/altosuilib/AltosUIMarker.java b/altosuilib/AltosUIMarker.java
index 9d8dde60..90cdb291 100644
--- a/altosuilib/AltosUIMarker.java
+++ b/altosuilib/AltosUIMarker.java
@@ -16,14 +16,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
@@ -56,6 +56,8 @@ public class AltosUIMarker implements AltosUIGrapher {
public void set_units() {
}
+ public boolean need_reset() { return true; }
+
public void set_enable(boolean enable) {
if (enabled == enable)
return;
@@ -110,4 +112,4 @@ public class AltosUIMarker implements AltosUIGrapher {
public AltosUIMarker (int fetch, Color color, XYPlot plot) {
this(fetch, color, plot, true);
}
-} \ No newline at end of file
+}
diff --git a/altosuilib/AltosUIPreferences.java b/altosuilib/AltosUIPreferences.java
index c8ae9a7d..a2014065 100644
--- a/altosuilib/AltosUIPreferences.java
+++ b/altosuilib/AltosUIPreferences.java
@@ -16,13 +16,13 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.*;
import java.util.*;
import java.awt.Component;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosUIPreferences extends AltosPreferences {
diff --git a/altosuilib/AltosUIPreferencesBackend.java b/altosuilib/AltosUIPreferencesBackend.java
index 6dd2baaf..163ba173 100644
--- a/altosuilib/AltosUIPreferencesBackend.java
+++ b/altosuilib/AltosUIPreferencesBackend.java
@@ -16,11 +16,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.io.File;
import java.util.prefs.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
import javax.swing.filechooser.FileSystemView;
public class AltosUIPreferencesBackend extends AltosPreferencesBackend {
diff --git a/altosuilib/AltosUIRateList.java b/altosuilib/AltosUIRateList.java
index 187977d3..d1c15ce0 100644
--- a/altosuilib/AltosUIRateList.java
+++ b/altosuilib/AltosUIRateList.java
@@ -16,10 +16,10 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosUIRateList extends JComboBox<String> {
@@ -27,10 +27,9 @@ public class AltosUIRateList extends JComboBox<String> {
int serial;
public void set_rate(int new_rate) {
- int i;
-
- setVisible(new_rate >= 0);
- setSelectedIndex(new_rate);
+ if (new_rate != AltosLib.MISSING)
+ setSelectedIndex(new_rate);
+ setVisible(new_rate != AltosLib.MISSING);
}
public void set_product(String new_product) {
diff --git a/altosuilib/AltosUISeries.java b/altosuilib/AltosUISeries.java
deleted file mode 100644
index 66cc7d69..00000000
--- a/altosuilib/AltosUISeries.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright © 2013 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altosuilib_11;
-
-import java.io.*;
-import java.util.ArrayList;
-
-import java.awt.*;
-import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-
-import org.jfree.ui.*;
-import org.jfree.chart.*;
-import org.jfree.chart.plot.*;
-import org.jfree.chart.axis.*;
-import org.jfree.chart.renderer.*;
-import org.jfree.chart.renderer.xy.*;
-import org.jfree.chart.labels.*;
-import org.jfree.data.xy.*;
-import org.jfree.data.*;
-
-class AltosUITime extends AltosUnits {
- public double value(double v, boolean imperial_units) { return v; }
-
- public double inverse(double v, boolean imperial_unis) { return v; }
-
- public String show_units(boolean imperial_units) { return "s"; }
-
- public String say_units(boolean imperial_units) { return "seconds"; }
-
- public int show_fraction(int width, boolean imperial_units) {
- if (width < 5)
- return 0;
- return width - 5;
- }
-
- public int say_fraction(boolean imperial_units) { return 0; }
-}
-
-public class AltosUISeries extends XYSeries implements AltosUIGrapher {
- AltosUIAxis axis;
- String label;
- AltosUnits units;
- Color color;
- XYItemRenderer renderer;
- int fetch;
- boolean enable;
-
- public void set_units() {
- axis.set_units();
- StandardXYToolTipGenerator ttg;
-
- String time_example = (new AltosUITime()).graph_format(7);
- String example = units.graph_format(7);
-
- ttg = new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})",
- units.graph_units()),
- new java.text.DecimalFormat(time_example),
- new java.text.DecimalFormat(example));
- renderer.setBaseToolTipGenerator(ttg);
- }
-
- public void set_enable(boolean enable) {
- if (this.enable != enable) {
- this.enable = enable;
- renderer.setSeriesVisible(0, enable);
- axis.set_enable(enable);
- }
- }
-
- public void add(AltosUIDataPoint dataPoint) {
- try {
- super.add(dataPoint.x(), units.graph_value(dataPoint.y(fetch)));
- } catch (AltosUIDataMissing dm) {
- }
- }
-
- public AltosUISeries (String label, int fetch, AltosUnits units, Color color,
- boolean enable, AltosUIAxis axis) {
- super(label);
- this.label = label;
- this.fetch = fetch;
- this.units = units;
- this.color = color;
- this.enable = enable;
- this.axis = axis;
-
- axis.ref(this.enable);
-
- renderer = new XYLineAndShapeRenderer(true, false);
- renderer.setSeriesPaint(0, color);
- renderer.setSeriesStroke(0, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
- renderer.setSeriesVisible(0, enable);
- set_units();
- }
-}
diff --git a/altosuilib/AltosUITelemetryList.java b/altosuilib/AltosUITelemetryList.java
index f02d2f7f..f884cd41 100644
--- a/altosuilib/AltosUITelemetryList.java
+++ b/altosuilib/AltosUITelemetryList.java
@@ -16,11 +16,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.util.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosUITelemetryList extends JComboBox<String> {
diff --git a/altosuilib/AltosUITimeSeries.java b/altosuilib/AltosUITimeSeries.java
new file mode 100644
index 00000000..08f95ca7
--- /dev/null
+++ b/altosuilib/AltosUITimeSeries.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright © 2017 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_12;
+
+import java.io.*;
+import java.util.ArrayList;
+
+import java.awt.*;
+import javax.swing.*;
+import org.altusmetrum.altoslib_12.*;
+
+import org.jfree.ui.*;
+import org.jfree.chart.*;
+import org.jfree.chart.plot.*;
+import org.jfree.chart.axis.*;
+import org.jfree.chart.renderer.*;
+import org.jfree.chart.renderer.xy.*;
+import org.jfree.chart.labels.*;
+import org.jfree.data.xy.*;
+import org.jfree.data.*;
+
+class AltosUITime extends AltosUnits {
+ public double value(double v, boolean imperial_units) { return v; }
+
+ public double inverse(double v, boolean imperial_unis) { return v; }
+
+ public String show_units(boolean imperial_units) { return "s"; }
+
+ public String say_units(boolean imperial_units) { return "seconds"; }
+
+ public int show_fraction(int width, boolean imperial_units) {
+ if (width < 5)
+ return 0;
+ return width - 5;
+ }
+
+ public int say_fraction(boolean imperial_units) { return 0; }
+}
+
+class AltosXYSeries extends XYSeries {
+
+ public AltosXYSeries(String label) {
+ super(label);
+ }
+}
+
+public class AltosUITimeSeries extends AltosTimeSeries implements AltosUIGrapher {
+ Color color;
+ boolean enable;
+ AltosUIAxis axis;
+ boolean marker;
+ boolean marker_top;
+ XYItemRenderer renderer;
+ XYPlot plot;
+ AltosXYSeries xy_series;
+ ArrayList<ValueMarker> markers;
+
+
+ /* AltosUIGrapher interface */
+ public boolean need_reset() {
+ return false;
+ }
+
+ public void clear() {
+ }
+
+ public void add(AltosUIDataPoint dataPoint) {
+ }
+
+ public void setNotify(boolean notify) {
+ }
+
+ public void fireSeriesChanged() {
+ }
+
+ void set_data() {
+ if (marker) {
+ if (markers != null) {
+ for (ValueMarker marker : markers)
+ plot.removeDomainMarker(marker);
+ }
+ markers = new ArrayList<ValueMarker>();
+ for (AltosTimeValue v : this) {
+ String s = units.string_value(v.value);
+ ValueMarker marker = new ValueMarker(v.time);
+ marker.setLabel(s);
+ if (marker_top) {
+ marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
+ marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);
+ } else {
+ marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
+ marker.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT);
+ }
+ marker.setPaint(color);
+ if (enable)
+ plot.addDomainMarker(marker);
+ markers.add(marker);
+ }
+ } else {
+ xy_series.clear();
+
+ xy_series.setNotify(false);
+ for (AltosTimeValue v : this) {
+ double value = v.value;
+ if (units != null)
+ value = units.graph_value(value);
+ xy_series.add(v.time, value);
+ }
+ xy_series.setNotify(true);
+ }
+ }
+
+ public void set_units() {
+ axis.set_units();
+ StandardXYToolTipGenerator ttg;
+
+ if (units != null) {
+ String time_example = (new AltosUITime()).graph_format(7);
+ String example = units.graph_format(7);
+
+ ttg = new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})",
+ units.graph_units()),
+ new java.text.DecimalFormat(time_example),
+ new java.text.DecimalFormat(example));
+ renderer.setBaseToolTipGenerator(ttg);
+ }
+ set_data();
+ }
+
+ public AltosXYSeries xy_series() {
+ return xy_series;
+ }
+
+ public void set_enable(boolean enable) {
+ if (this.enable != enable) {
+ this.enable = enable;
+ if (marker) {
+ for (ValueMarker marker : markers) {
+ if (enable)
+ plot.addDomainMarker(marker);
+ else
+ plot.removeDomainMarker(marker);
+ }
+ } else {
+ renderer.setSeriesVisible(0, enable);
+ axis.set_enable(enable);
+ }
+ }
+ }
+
+ public void set_axis(Color color, boolean enable, AltosUIAxis axis) {
+ this.color = color;
+ this.enable = enable;
+ this.axis = axis;
+ this.marker = false;
+
+ axis.ref(this.enable);
+
+ renderer = new XYLineAndShapeRenderer(true, false);
+ renderer.setSeriesPaint(0, color);
+ renderer.setSeriesStroke(0, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+ renderer.setSeriesVisible(0, enable);
+ xy_series = new AltosXYSeries(label);
+ }
+
+ public void set_marker(Color color, boolean enable, XYPlot plot, boolean marker_top) {
+ this.color = color;
+ this.enable = enable;
+ this.marker = true;
+ this.plot = plot;
+ this.marker_top = marker_top;
+ }
+
+ public AltosUITimeSeries(String label, AltosUnits units) {
+ super(label, units);
+ }
+
+ public AltosUITimeSeries(String label, AltosUnits units,
+ Color color, boolean enable,
+ AltosUIAxis axis) {
+ this(label, units);
+ set_axis(color, enable, axis);
+ }
+}
diff --git a/altosuilib/AltosUIUnitsIndicator.java b/altosuilib/AltosUIUnitsIndicator.java
index d4dd18db..bbfebef6 100644
--- a/altosuilib/AltosUIUnitsIndicator.java
+++ b/altosuilib/AltosUIUnitsIndicator.java
@@ -16,11 +16,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public abstract class AltosUIUnitsIndicator extends AltosUIIndicator {
diff --git a/altosuilib/AltosUIVoltageIndicator.java b/altosuilib/AltosUIVoltageIndicator.java
index 299c6114..297a6531 100644
--- a/altosuilib/AltosUIVoltageIndicator.java
+++ b/altosuilib/AltosUIVoltageIndicator.java
@@ -16,11 +16,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public abstract class AltosUIVoltageIndicator extends AltosUIUnitsIndicator {
diff --git a/altosuilib/AltosUSBDevice.java b/altosuilib/AltosUSBDevice.java
index 221ac829..49f966f3 100644
--- a/altosuilib/AltosUSBDevice.java
+++ b/altosuilib/AltosUSBDevice.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.util.*;
import libaltosJNI.*;
diff --git a/altosuilib/AltosVoice.java b/altosuilib/AltosVoice.java
index c651aa35..1d579a16 100644
--- a/altosuilib/AltosVoice.java
+++ b/altosuilib/AltosVoice.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
diff --git a/altosuilib/GrabNDrag.java b/altosuilib/GrabNDrag.java
index 0e57fe4d..665ef89e 100644
--- a/altosuilib/GrabNDrag.java
+++ b/altosuilib/GrabNDrag.java
@@ -16,7 +16,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
import java.awt.event.*;
diff --git a/altosuilib/Makefile.am b/altosuilib/Makefile.am
index d18006b5..4b5eb524 100644
--- a/altosuilib/Makefile.am
+++ b/altosuilib/Makefile.am
@@ -18,7 +18,6 @@ altosuilib_JAVA = \
AltosUIDataMissing.java \
AltosUIDataPoint.java \
AltosUIDataSet.java \
- AltosUIGraph.java \
AltosUIGrapher.java \
AltosUIDialog.java \
AltosUIEnable.java \
@@ -28,7 +27,9 @@ altosuilib_JAVA = \
AltosUIMarker.java \
AltosUIPreferencesBackend.java \
AltosUIPreferences.java \
- AltosUISeries.java \
+ AltosUIFlightSeries.java \
+ AltosUIGraph.java \
+ AltosGraph.java \
AltosUSBDevice.java \
AltosVoice.java \
AltosDisplayThread.java \
@@ -50,9 +51,6 @@ altosuilib_JAVA = \
AltosInfoTable.java \
AltosFlightInfoTableModel.java \
AltosFlightStatsTable.java \
- AltosGraph.java \
- AltosGraphDataPoint.java \
- AltosGraphDataSet.java \
AltosBTDevice.java \
AltosBTDeviceIterator.java \
AltosBTManage.java \
@@ -67,6 +65,7 @@ altosuilib_JAVA = \
AltosUITelemetryList.java \
AltosUIRateList.java \
AltosUIImage.java \
+ AltosUITimeSeries.java \
OSXAdapter.java
JAR=altosuilib_$(ALTOSUILIB_VERSION).jar
diff --git a/altosuilib/OSXAdapter.java b/altosuilib/OSXAdapter.java
index de5d5836..c338396f 100755
--- a/altosuilib/OSXAdapter.java
+++ b/altosuilib/OSXAdapter.java
@@ -55,7 +55,7 @@ Copyright © 2003-2007 Apple, Inc., All Rights Reserved
*/
-package org.altusmetrum.altosuilib_11;
+package org.altusmetrum.altosuilib_12;
import java.lang.reflect.*;
import java.util.HashMap;