summaryrefslogtreecommitdiff
path: root/altosui
diff options
context:
space:
mode:
Diffstat (limited to 'altosui')
-rw-r--r--altosui/Altos.java4
-rw-r--r--altosui/AltosAscent.java4
-rw-r--r--altosui/AltosCompanionInfo.java4
-rw-r--r--altosui/AltosConfigFC.java (renamed from altosui/AltosConfig.java)16
-rw-r--r--altosui/AltosConfigFCUI.java (renamed from altosui/AltosConfigUI.java)314
-rw-r--r--altosui/AltosConfigPyroUI.java12
-rw-r--r--altosui/AltosConfigTD.java4
-rw-r--r--altosui/AltosConfigTDUI.java4
-rw-r--r--altosui/AltosConfigureUI.java2
-rw-r--r--altosui/AltosDescent.java4
-rw-r--r--altosui/AltosFlightStatus.java30
-rw-r--r--altosui/AltosFlightStatusTableModel.java2
-rw-r--r--altosui/AltosFlightStatusUpdate.java2
-rw-r--r--altosui/AltosFlightUI.java33
-rw-r--r--altosui/AltosGraphUI.java59
-rw-r--r--altosui/AltosIdleMonitorUI.java28
-rw-r--r--altosui/AltosIgniteUI.java12
-rw-r--r--altosui/AltosIgnitor.java46
-rw-r--r--altosui/AltosLanded.java20
-rw-r--r--altosui/AltosLaunch.java2
-rw-r--r--altosui/AltosLaunchUI.java2
-rw-r--r--altosui/AltosPad.java25
-rw-r--r--altosui/AltosUI.java228
-rw-r--r--altosui/Makefile-standalone4
-rw-r--r--altosui/Makefile.am10
-rw-r--r--altosui/altos-windows.nsi.in3
26 files changed, 427 insertions, 447 deletions
diff --git a/altosui/Altos.java b/altosui/Altos.java
index c2cf4090..9f176c4b 100644
--- a/altosui/Altos.java
+++ b/altosui/Altos.java
@@ -21,8 +21,8 @@ package altosui;
import java.awt.*;
import libaltosJNI.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class Altos extends AltosUILib {
diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java
index a4f475cb..ab052e5f 100644
--- a/altosui/AltosAscent.java
+++ b/altosui/AltosAscent.java
@@ -22,8 +22,8 @@ import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosAscent extends AltosUIFlightTab {
JLabel cur, max;
diff --git a/altosui/AltosCompanionInfo.java b/altosui/AltosCompanionInfo.java
index 52815d6f..95e1d2d9 100644
--- a/altosui/AltosCompanionInfo.java
+++ b/altosui/AltosCompanionInfo.java
@@ -20,8 +20,8 @@ package altosui;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosCompanionInfo extends JTable implements AltosFlightDisplay {
private AltosFlightInfoTableModel model;
diff --git a/altosui/AltosConfig.java b/altosui/AltosConfigFC.java
index 07802247..beff71b7 100644
--- a/altosui/AltosConfig.java
+++ b/altosui/AltosConfigFC.java
@@ -23,10 +23,10 @@ import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
import java.text.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
-public class AltosConfig implements ActionListener {
+public class AltosConfigFC implements ActionListener {
class int_ref {
int value;
@@ -62,7 +62,7 @@ public class AltosConfig implements ActionListener {
boolean remote;
AltosConfigData data;
- AltosConfigUI config_ui;
+ AltosConfigFCUI config_ui;
boolean serial_started;
boolean made_visible;
@@ -96,7 +96,7 @@ public class AltosConfig implements ActionListener {
final static int serial_mode_reboot = 2;
class SerialData implements Runnable {
- AltosConfig config;
+ AltosConfigFC config;
int serial_mode;
void callback(String in_cmd) {
@@ -182,7 +182,7 @@ public class AltosConfig implements ActionListener {
}
}
- public SerialData(AltosConfig in_config, int in_serial_mode) {
+ public SerialData(AltosConfigFC in_config, int in_serial_mode) {
config = in_config;
serial_mode = in_serial_mode;
}
@@ -195,7 +195,7 @@ public class AltosConfig implements ActionListener {
}
void init_ui () throws InterruptedException, TimeoutException {
- config_ui = new AltosConfigUI(owner, remote);
+ config_ui = new AltosConfigFCUI(owner, remote);
config_ui.addActionListener(this);
serial_line.set_frame(owner);
set_ui();
@@ -275,7 +275,7 @@ public class AltosConfig implements ActionListener {
}
}
- public AltosConfig(JFrame given_owner) {
+ public AltosConfigFC(JFrame given_owner) {
owner = given_owner;
device = AltosDeviceUIDialog.show(owner, Altos.product_any);
diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigFCUI.java
index e5f1949a..c0c37254 100644
--- a/altosui/AltosConfigUI.java
+++ b/altosui/AltosConfigFCUI.java
@@ -23,10 +23,10 @@ import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.text.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
-public class AltosConfigUI
+public class AltosConfigFCUI
extends AltosUIDialog
implements ActionListener, ItemListener, DocumentListener, AltosConfigValues, AltosUnitsListener
{
@@ -159,9 +159,9 @@ public class AltosConfigUI
/* A window listener to catch closing events and tell the config code */
class ConfigListener extends WindowAdapter {
- AltosConfigUI ui;
+ AltosConfigFCUI ui;
- public ConfigListener(AltosConfigUI this_ui) {
+ public ConfigListener(AltosConfigFCUI this_ui) {
ui = this_ui;
}
@@ -193,46 +193,46 @@ public class AltosConfigUI
}
void set_radio_enable_tool_tip() {
- if (radio_enable_value.isEnabled())
+ if (radio_enable_value.isVisible())
radio_enable_value.setToolTipText("Enable/Disable telemetry and RDF transmissions");
else
radio_enable_value.setToolTipText("Firmware version does not support disabling radio");
}
void set_rate_tool_tip() {
- if (rate_value.isEnabled())
+ if (rate_value.isVisible())
rate_value.setToolTipText("Select telemetry baud rate");
else
rate_value.setToolTipText("Firmware version does not support variable telemetry rates");
}
void set_aprs_interval_tool_tip() {
- if (aprs_interval_value.isEnabled())
+ if (aprs_interval_value.isVisible())
aprs_interval_value.setToolTipText("Enable APRS and set the interval between APRS reports");
else
aprs_interval_value.setToolTipText("Hardware doesn't support APRS");
}
void set_aprs_ssid_tool_tip() {
- if (aprs_ssid_value.isEnabled())
+ if (aprs_ssid_value.isVisible())
aprs_ssid_value.setToolTipText("Set the APRS SSID (secondary station identifier)");
- else if (aprs_ssid_value.isEnabled())
+ else if (aprs_ssid_value.isVisible())
aprs_ssid_value.setToolTipText("Software version doesn't support setting the APRS SSID");
else
aprs_ssid_value.setToolTipText("Hardware doesn't support APRS");
}
void set_aprs_format_tool_tip() {
- if (aprs_format_value.isEnabled())
+ if (aprs_format_value.isVisible())
aprs_format_value.setToolTipText("Set the APRS format (compressed/uncompressed)");
- else if (aprs_format_value.isEnabled())
+ else if (aprs_format_value.isVisible())
aprs_format_value.setToolTipText("Software version doesn't support setting the APRS format");
else
aprs_format_value.setToolTipText("Hardware doesn't support APRS");
}
void set_flight_log_max_tool_tip() {
- if (flight_log_max_value.isEnabled())
+ if (flight_log_max_value.isVisible())
flight_log_max_value.setToolTipText("Size reserved for each flight log (in kB)");
else {
if (is_telemini_v1())
@@ -243,14 +243,14 @@ public class AltosConfigUI
}
void set_ignite_mode_tool_tip() {
- if (ignite_mode_value.isEnabled())
+ if (ignite_mode_value.isVisible())
ignite_mode_value.setToolTipText("Select when igniters will be fired");
else
ignite_mode_value.setToolTipText("Older firmware could not select ignite mode");
}
void set_pad_orientation_tool_tip() {
- if (pad_orientation_value.isEnabled())
+ if (pad_orientation_value.isVisible())
pad_orientation_value.setToolTipText("How will the computer be mounted in the airframe");
else {
if (is_telemetrum())
@@ -263,14 +263,14 @@ public class AltosConfigUI
}
void set_beep_tool_tip() {
- if (beep_value.isEnabled())
+ if (beep_value.isVisible())
beep_value.setToolTipText("What frequency the beeper will sound at");
else
beep_value.setToolTipText("Older firmware could not select beeper frequency");
}
/* Build the UI using a grid bag */
- public AltosConfigUI(JFrame in_owner, boolean remote) {
+ public AltosConfigFCUI(JFrame in_owner, boolean remote) {
super (in_owner, "Configure Flight Computer", false);
owner = in_owner;
@@ -959,12 +959,10 @@ public class AltosConfigUI
}
public void set_main_deploy(int new_main_deploy) {
- main_deploy_value.setSelectedItem(AltosConvert.height.say(new_main_deploy));
- main_deploy_value.setEnabled(new_main_deploy >= 0);
-
- main_deploy_value.setVisible(new_main_deploy >= 0);
- main_deploy_label.setVisible(new_main_deploy >= 0);
-
+ if (new_main_deploy != AltosLib.MISSING)
+ main_deploy_value.setSelectedItem(AltosConvert.height.say(new_main_deploy));
+ main_deploy_value.setVisible(new_main_deploy != AltosLib.MISSING);
+ main_deploy_label.setVisible(new_main_deploy != AltosLib.MISSING);
}
public int main_deploy() throws AltosConfigDataException {
@@ -1008,7 +1006,7 @@ public class AltosConfigUI
} catch (ParseException pe) {
}
- if (tracker_motion_value.isEnabled()) {
+ if (tracker_motion_value.isVisible()) {
String motion = tracker_motion_value.getSelectedItem().toString();
tracker_motion_label.setText(get_tracker_motion_label());
set_tracker_motion_values();
@@ -1024,11 +1022,10 @@ public class AltosConfigUI
}
public void set_apogee_delay(int new_apogee_delay) {
- apogee_delay_value.setVisible(new_apogee_delay >= 0);
- apogee_delay_label.setVisible(new_apogee_delay >= 0);
-
- apogee_delay_value.setSelectedItem(Integer.toString(new_apogee_delay));
- apogee_delay_value.setEnabled(new_apogee_delay >= 0);
+ if (new_apogee_delay != AltosLib.MISSING)
+ apogee_delay_value.setSelectedItem(Integer.toString(new_apogee_delay));
+ apogee_delay_value.setVisible(new_apogee_delay != AltosLib.MISSING);
+ apogee_delay_label.setVisible(new_apogee_delay != AltosLib.MISSING);
}
private int parse_int(String name, String s, boolean split) throws AltosConfigDataException {
@@ -1047,11 +1044,11 @@ public class AltosConfigUI
}
public void set_apogee_lockout(int new_apogee_lockout) {
- apogee_lockout_value.setSelectedItem(Integer.toString(new_apogee_lockout));
- apogee_lockout_value.setEnabled(new_apogee_lockout >= 0);
+ if (new_apogee_lockout != AltosLib.MISSING)
+ apogee_lockout_value.setSelectedItem(Integer.toString(new_apogee_lockout));
- apogee_lockout_value.setVisible(new_apogee_lockout >= 0);
- apogee_lockout_label.setVisible(new_apogee_lockout >= 0);
+ apogee_lockout_value.setVisible(new_apogee_lockout != AltosLib.MISSING);
+ apogee_lockout_label.setVisible(new_apogee_lockout != AltosLib.MISSING);
}
public int apogee_lockout() throws AltosConfigDataException {
@@ -1059,8 +1056,10 @@ public class AltosConfigUI
}
public void set_radio_frequency(double new_radio_frequency) {
- radio_frequency_label.setVisible(new_radio_frequency >= 0);
- radio_frequency_value.set_frequency(new_radio_frequency);
+ if (new_radio_frequency != AltosLib.MISSING)
+ radio_frequency_value.set_frequency(new_radio_frequency);
+ radio_frequency_label.setVisible(new_radio_frequency != AltosLib.MISSING);
+ radio_frequency_value.setVisible(new_radio_frequency != AltosLib.MISSING);
}
public double radio_frequency() {
@@ -1068,40 +1067,33 @@ public class AltosConfigUI
}
public void set_radio_calibration(int new_radio_calibration) {
- radio_calibration_value.setVisible(new_radio_calibration >= 0);
- radio_calibration_label.setVisible(new_radio_calibration >= 0);
-
- if (new_radio_calibration < 0)
- radio_calibration_value.setText("Disabled");
- else
+ if (new_radio_calibration != AltosLib.MISSING)
radio_calibration_value.setText(String.format("%d", new_radio_calibration));
+ radio_calibration_value.setVisible(new_radio_calibration != AltosLib.MISSING);
+ radio_calibration_label.setVisible(new_radio_calibration != AltosLib.MISSING);
}
public void set_radio_enable(int new_radio_enable) {
- radio_enable_label.setVisible(new_radio_enable >= 0);
- radio_enable_value.setVisible(new_radio_enable >= 0);
-
- if (new_radio_enable >= 0) {
- radio_enable_value.setSelected(new_radio_enable > 0);
- radio_enable_value.setEnabled(true);
- } else {
- radio_enable_value.setSelected(true);
- radio_enable_value.setEnabled(false);
- }
+ if (new_radio_enable != AltosLib.MISSING)
+ radio_enable_value.setSelected(new_radio_enable != 0);
+ radio_enable_label.setVisible(new_radio_enable != AltosLib.MISSING);
+ radio_enable_value.setVisible(new_radio_enable != AltosLib.MISSING);
set_radio_enable_tool_tip();
}
public int radio_enable() {
- if (radio_enable_value.isEnabled())
+ if (radio_enable_value.isVisible())
return radio_enable_value.isSelected() ? 1 : 0;
else
- return -1;
+ return AltosLib.MISSING;
}
public void set_telemetry_rate(int new_rate) {
- rate_label.setVisible(new_rate >= 0);
-
- rate_value.set_rate(new_rate);
+ if (new_rate != AltosLib.MISSING)
+ rate_value.set_rate(new_rate);
+ rate_label.setVisible(new_rate != AltosLib.MISSING);
+ rate_value.setVisible(new_rate != AltosLib.MISSING);
+ set_rate_tool_tip();
}
public int telemetry_rate() {
@@ -1109,14 +1101,16 @@ public class AltosConfigUI
}
public void set_callsign(String new_callsign) {
+ if (new_callsign != null)
+ callsign_value.setText(new_callsign);
callsign_value.setVisible(new_callsign != null);
callsign_label.setVisible(new_callsign != null);
-
- callsign_value.setText(new_callsign);
}
public String callsign() {
- return callsign_value.getText();
+ if (callsign_value.isVisible())
+ return callsign_value.getText();
+ return null;
}
int flight_log_max_limit;
@@ -1133,11 +1127,12 @@ public class AltosConfigUI
}
public void set_flight_log_max(int new_flight_log_max) {
- flight_log_max_value.setVisible(new_flight_log_max >= 0);
- flight_log_max_label.setVisible(new_flight_log_max >= 0);
-
- flight_log_max_value.setSelectedItem(flight_log_max_label(new_flight_log_max));
- flight_log_max = new_flight_log_max;
+ if (new_flight_log_max != AltosLib.MISSING) {
+ flight_log_max_value.setSelectedItem(flight_log_max_label(new_flight_log_max));
+ flight_log_max = new_flight_log_max;
+ }
+ flight_log_max_value.setVisible(new_flight_log_max != AltosLib.MISSING);
+ flight_log_max_label.setVisible(new_flight_log_max != AltosLib.MISSING);
set_flight_log_max_tool_tip();
}
@@ -1147,84 +1142,92 @@ public class AltosConfigUI
}
public int flight_log_max() throws AltosConfigDataException {
- return parse_int("flight log max", flight_log_max_value.getSelectedItem().toString(), true);
+ if (flight_log_max_value.isVisible())
+ return parse_int("flight log max", flight_log_max_value.getSelectedItem().toString(), true);
+ return AltosLib.MISSING;
}
public void set_flight_log_max_limit(int new_flight_log_max_limit) {
flight_log_max_limit = new_flight_log_max_limit;
- flight_log_max_value.removeAllItems();
- for (int i = 8; i >= 1; i--) {
- int size = flight_log_max_limit / i;
- flight_log_max_value.addItem(String.format("%d (%d flights)", size, i));
+ if (new_flight_log_max_limit != AltosLib.MISSING) {
+ flight_log_max_value.removeAllItems();
+ for (int i = 8; i >= 1; i--) {
+ int size = flight_log_max_limit / i;
+ flight_log_max_value.addItem(String.format("%d (%d flights)", size, i));
+ }
}
if (flight_log_max != 0)
set_flight_log_max(flight_log_max);
}
public void set_ignite_mode(int new_ignite_mode) {
- ignite_mode_value.setVisible(new_ignite_mode >= 0);
- ignite_mode_label.setVisible(new_ignite_mode >= 0);
-
- if (new_ignite_mode >= ignite_mode_values.length)
- new_ignite_mode = 0;
- if (new_ignite_mode < 0) {
- ignite_mode_value.setEnabled(false);
- new_ignite_mode = 0;
- } else {
- ignite_mode_value.setEnabled(true);
+ if (new_ignite_mode != AltosLib.MISSING) {
+ if (new_ignite_mode >= ignite_mode_values.length)
+ new_ignite_mode = 0;
+ if (new_ignite_mode < 0) {
+ ignite_mode_value.setEnabled(false);
+ new_ignite_mode = 0;
+ } else {
+ ignite_mode_value.setEnabled(true);
+ }
+ ignite_mode_value.setSelectedIndex(new_ignite_mode);
}
- ignite_mode_value.setSelectedIndex(new_ignite_mode);
+ ignite_mode_value.setVisible(new_ignite_mode != AltosLib.MISSING);
+ ignite_mode_label.setVisible(new_ignite_mode != AltosLib.MISSING);
+
set_ignite_mode_tool_tip();
}
public int ignite_mode() {
- if (ignite_mode_value.isEnabled())
+ if (ignite_mode_value.isVisible())
return ignite_mode_value.getSelectedIndex();
else
- return -1;
+ return AltosLib.MISSING;
}
public void set_pad_orientation(int new_pad_orientation) {
- pad_orientation_value.setVisible(new_pad_orientation >= 0);
- pad_orientation_label.setVisible(new_pad_orientation >= 0);
-
- if (new_pad_orientation >= pad_orientation_values.length)
- new_pad_orientation = 0;
- if (new_pad_orientation < 0)
- new_pad_orientation = 0;
- pad_orientation_value.setSelectedIndex(new_pad_orientation);
+ if (new_pad_orientation != AltosLib.MISSING) {
+ if (new_pad_orientation >= pad_orientation_values.length)
+ new_pad_orientation = 0;
+ if (new_pad_orientation < 0)
+ new_pad_orientation = 0;
+ pad_orientation_value.setSelectedIndex(new_pad_orientation);
+ }
+ pad_orientation_value.setVisible(new_pad_orientation != AltosLib.MISSING);
+ pad_orientation_label.setVisible(new_pad_orientation != AltosLib.MISSING);
+
set_pad_orientation_tool_tip();
}
public int pad_orientation() {
- if (pad_orientation_value.isEnabled())
+ if (pad_orientation_value.isVisible())
return pad_orientation_value.getSelectedIndex();
else
- return -1;
+ return AltosLib.MISSING;
}
public void set_beep(int new_beep) {
- beep_value.setVisible(new_beep >= 0);
- beep_label.setVisible(new_beep >= 0);
-
- int new_freq = (int) Math.floor (AltosConvert.beep_value_to_freq(new_beep) + 0.5);
- for (int i = 0; i < beep_values.length; i++)
- if (new_beep == AltosConvert.beep_freq_to_value(Integer.parseInt(beep_values[i]))) {
- beep_value.setSelectedIndex(i);
- set_beep_tool_tip();
- return;
- }
- beep_value.setSelectedItem(String.format("%d", new_freq));
- beep_value.setEnabled(new_beep >= 0);
+ if (new_beep != AltosLib.MISSING) {
+ int new_freq = (int) Math.floor (AltosConvert.beep_value_to_freq(new_beep) + 0.5);
+ for (int i = 0; i < beep_values.length; i++)
+ if (new_beep == AltosConvert.beep_freq_to_value(Integer.parseInt(beep_values[i]))) {
+ beep_value.setSelectedIndex(i);
+ set_beep_tool_tip();
+ return;
+ }
+ beep_value.setSelectedItem(String.format("%d", new_freq));
+ }
+ beep_value.setVisible(new_beep != AltosLib.MISSING);
+ beep_label.setVisible(new_beep != AltosLib.MISSING);
set_beep_tool_tip();
}
public int beep() {
- if (beep_value.isEnabled())
+ if (beep_value.isVisible())
return AltosConvert.beep_freq_to_value(Integer.parseInt(beep_value.getSelectedItem().toString()));
else
- return -1;
+ return AltosLib.MISSING;
}
String[] tracker_motion_values() {
@@ -1248,58 +1251,53 @@ public class AltosConfigUI
}
void set_tracker_tool_tip() {
- if (tracker_motion_value.isEnabled())
+ if (tracker_motion_value.isVisible())
tracker_motion_value.setToolTipText("How far the device must move before logging");
else
tracker_motion_value.setToolTipText("This device doesn't disable logging when stationary");
- if (tracker_interval_value.isEnabled())
+ if (tracker_interval_value.isVisible())
tracker_interval_value.setToolTipText("How often to report GPS position");
else
tracker_interval_value.setToolTipText("This device can't configure interval");
}
public void set_tracker_motion(int tracker_motion) {
- tracker_motion_label.setVisible(tracker_motion >= 0);
- tracker_motion_value.setVisible(tracker_motion >= 0);
-
- if (tracker_motion < 0) {
- tracker_motion_value.setEnabled(false);
- } else {
- tracker_motion_value.setEnabled(true);
+ if (tracker_motion != AltosLib.MISSING)
tracker_motion_value.setSelectedItem(AltosConvert.height.say(tracker_motion));
- }
+ tracker_motion_label.setVisible(tracker_motion != AltosLib.MISSING);
+ tracker_motion_value.setVisible(tracker_motion != AltosLib.MISSING);
}
public int tracker_motion() throws AltosConfigDataException {
- String str = tracker_motion_value.getSelectedItem().toString();
- try {
- return (int) (AltosConvert.height.parse_locale(str) + 0.5);
- } catch (ParseException pe) {
- throw new AltosConfigDataException("invalid tracker motion %s", str);
+ if (tracker_motion_value.isVisible()) {
+ String str = tracker_motion_value.getSelectedItem().toString();
+ try {
+ return (int) (AltosConvert.height.parse_locale(str) + 0.5);
+ } catch (ParseException pe) {
+ throw new AltosConfigDataException("invalid tracker motion %s", str);
+ }
}
+ return AltosLib.MISSING;
}
public void set_tracker_interval(int tracker_interval) {
- tracker_interval_label.setVisible(tracker_interval >= 0);
- tracker_interval_value.setVisible(tracker_interval >= 0);
-
- if (tracker_interval< 0) {
- tracker_interval_value.setEnabled(false);
- } else {
- tracker_interval_value.setEnabled(true);
+ if (tracker_interval != AltosLib.MISSING)
tracker_interval_value.setSelectedItem(String.format("%d", tracker_interval));
- }
+ tracker_interval_label.setVisible(tracker_interval != AltosLib.MISSING);
+ tracker_interval_value.setVisible(tracker_interval != AltosLib.MISSING);
}
public int tracker_interval() throws AltosConfigDataException {
- return parse_int ("tracker interval", tracker_interval_value.getSelectedItem().toString(), false);
+ if (tracker_interval_value.isVisible())
+ return parse_int ("tracker interval", tracker_interval_value.getSelectedItem().toString(), false);
+ return AltosLib.MISSING;
}
public void set_pyros(AltosPyro[] new_pyros) {
pyros = new_pyros;
- pyro.setVisible(pyros != null);
if (pyros != null && pyro_ui != null)
pyro_ui.set_pyros(pyros);
+ pyro.setVisible(pyros != null);
}
public AltosPyro[] pyros() throws AltosConfigDataException {
@@ -1310,9 +1308,9 @@ public class AltosConfigUI
public void set_pyro_firing_time(double new_pyro_firing_time) {
pyro_firing_time = new_pyro_firing_time;
- pyro.setVisible(pyro_firing_time >= 0);
- if (pyro_firing_time >= 0 && pyro_ui != null)
+ if (pyro_firing_time != AltosLib.MISSING && pyro_ui != null)
pyro_ui.set_pyro_firing_time(pyro_firing_time);
+ pyro.setVisible(pyro_firing_time != AltosLib.MISSING);
}
public double pyro_firing_time() throws AltosConfigDataException {
@@ -1322,49 +1320,49 @@ public class AltosConfigUI
}
public void set_aprs_interval(int new_aprs_interval) {
- aprs_interval_value.setVisible(new_aprs_interval >= 0);
- aprs_interval_label.setVisible(new_aprs_interval >= 0);
-
- String s;
-
- if (new_aprs_interval <= 0)
- s = "Disabled";
- else
- s = Integer.toString(new_aprs_interval);
- aprs_interval_value.setSelectedItem(s);
+ if (new_aprs_interval != AltosLib.MISSING)
+ aprs_interval_value.setSelectedItem(Integer.toString(new_aprs_interval));
+ aprs_interval_value.setVisible(new_aprs_interval != AltosLib.MISSING);
+ aprs_interval_label.setVisible(new_aprs_interval != AltosLib.MISSING);
set_aprs_interval_tool_tip();
}
public int aprs_interval() throws AltosConfigDataException {
- String s = aprs_interval_value.getSelectedItem().toString();
+ if (aprs_interval_value.isVisible()) {
+ String s = aprs_interval_value.getSelectedItem().toString();
- if (s.equals("Disabled"))
- return 0;
- return parse_int("aprs interval", s, false);
+ return parse_int("aprs interval", s, false);
+ }
+ return AltosLib.MISSING;
}
public void set_aprs_ssid(int new_aprs_ssid) {
- aprs_ssid_value.setVisible(new_aprs_ssid >= 0);
- aprs_ssid_label.setVisible(new_aprs_ssid >= 0);
-
- aprs_ssid_value.setSelectedItem(Math.max(0,new_aprs_ssid));
+ if (new_aprs_ssid != AltosLib.MISSING)
+ aprs_ssid_value.setSelectedItem(new_aprs_ssid);
+ aprs_ssid_value.setVisible(new_aprs_ssid != AltosLib.MISSING);
+ aprs_ssid_label.setVisible(new_aprs_ssid != AltosLib.MISSING);
set_aprs_ssid_tool_tip();
}
public int aprs_ssid() throws AltosConfigDataException {
- Integer i = (Integer) aprs_ssid_value.getSelectedItem();
- return i;
+ if (aprs_ssid_value.isVisible()) {
+ Integer i = (Integer) aprs_ssid_value.getSelectedItem();
+ return i;
+ }
+ return AltosLib.MISSING;
}
public void set_aprs_format(int new_aprs_format) {
- aprs_format_value.setVisible(new_aprs_format >= 0);
- aprs_format_label.setVisible(new_aprs_format >= 0);
-
- aprs_format_value.setSelectedIndex(Math.max(0,new_aprs_format));
+ if (new_aprs_format != AltosLib.MISSING)
+ aprs_format_value.setSelectedIndex(new_aprs_format);
+ aprs_format_value.setVisible(new_aprs_format != AltosLib.MISSING);
+ aprs_format_label.setVisible(new_aprs_format != AltosLib.MISSING);
set_aprs_format_tool_tip();
}
public int aprs_format() throws AltosConfigDataException {
- return aprs_format_value.getSelectedIndex();
+ if (aprs_format_value.isVisible())
+ return aprs_format_value.getSelectedIndex();
+ return AltosLib.MISSING;
}
}
diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java
index 2d4b216c..cd887c00 100644
--- a/altosui/AltosConfigPyroUI.java
+++ b/altosui/AltosConfigPyroUI.java
@@ -23,14 +23,14 @@ import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosConfigPyroUI
extends AltosUIDialog
implements ItemListener, DocumentListener, AltosUnitsListener, ActionListener
{
- AltosConfigUI owner;
+ AltosConfigFCUI owner;
Container pane;
static Insets il = new Insets(4,4,4,4);
@@ -347,9 +347,9 @@ public class AltosConfigPyroUI
/* A window listener to catch closing events and tell the config code */
class ConfigListener extends WindowAdapter {
AltosConfigPyroUI ui;
- AltosConfigUI owner;
+ AltosConfigFCUI owner;
- public ConfigListener(AltosConfigPyroUI this_ui, AltosConfigUI this_owner) {
+ public ConfigListener(AltosConfigPyroUI this_ui, AltosConfigFCUI this_owner) {
ui = this_ui;
owner = this_owner;
}
@@ -367,7 +367,7 @@ public class AltosConfigPyroUI
setVisible(false);
}
- public AltosConfigPyroUI(AltosConfigUI in_owner, AltosPyro[] pyros, double pyro_firing_time) {
+ public AltosConfigPyroUI(AltosConfigFCUI in_owner, AltosPyro[] pyros, double pyro_firing_time) {
super(in_owner, "Configure Pyro Channels", false);
diff --git a/altosui/AltosConfigTD.java b/altosui/AltosConfigTD.java
index 621db3c0..9fedc56d 100644
--- a/altosui/AltosConfigTD.java
+++ b/altosui/AltosConfigTD.java
@@ -22,8 +22,8 @@ import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosConfigTD implements ActionListener {
diff --git a/altosui/AltosConfigTDUI.java b/altosui/AltosConfigTDUI.java
index 529c2fa2..3ff56218 100644
--- a/altosui/AltosConfigTDUI.java
+++ b/altosui/AltosConfigTDUI.java
@@ -22,8 +22,8 @@ import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosConfigTDUI
extends AltosUIDialog
diff --git a/altosui/AltosConfigureUI.java b/altosui/AltosConfigureUI.java
index 6aefb3a6..acafc659 100644
--- a/altosui/AltosConfigureUI.java
+++ b/altosui/AltosConfigureUI.java
@@ -23,7 +23,7 @@ import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosConfigureUI
extends AltosUIConfigure
diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java
index 0c3a8e9e..2cc65b08 100644
--- a/altosui/AltosDescent.java
+++ b/altosui/AltosDescent.java
@@ -22,8 +22,8 @@ import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosDescent extends AltosUIFlightTab {
diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java
index 4288fc9f..a5e5a4ef 100644
--- a/altosui/AltosFlightStatus.java
+++ b/altosui/AltosFlightStatus.java
@@ -20,8 +20,8 @@ package altosui;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosFlightStatus extends JComponent implements AltosFlightDisplay {
GridBagLayout layout;
@@ -93,14 +93,14 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
}
void show(AltosState state, AltosListenerState listener_state) {
- if (!same_call(state.callsign)) {
+ if (!same_call(state.cal_data().callsign)) {
show();
- value.setText(state.callsign);
- if (state.callsign == null)
+ value.setText(state.cal_data().callsign);
+ if (state.cal_data().callsign == null)
setVisible(false);
else
setVisible(true);
- last_call = state.callsign;
+ last_call = state.cal_data().callsign;
}
}
@@ -120,13 +120,14 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
int last_serial = -1;
void show(AltosState state, AltosListenerState listener_state) {
- if (state.serial != last_serial) {
+ AltosCalData cal_data = state.cal_data();
+ if (cal_data.serial != last_serial) {
show();
- if (state.serial == AltosLib.MISSING)
+ if (cal_data.serial == AltosLib.MISSING)
value.setText("none");
else
- value.setText(String.format("%d", state.serial));
- last_serial = state.serial;
+ value.setText(String.format("%d", cal_data.serial));
+ last_serial = cal_data.serial;
}
}
@@ -147,13 +148,14 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
int last_flight = -1;
void show(AltosState state, AltosListenerState listener_state) {
- if (state.flight != last_flight) {
+ AltosCalData cal_data = state.cal_data();
+ if (cal_data.flight != last_flight) {
show();
- if (state.flight == AltosLib.MISSING)
+ if (cal_data.flight == AltosLib.MISSING)
value.setText("none");
else
- value.setText(String.format("%d", state.flight));
- last_flight = state.flight;
+ value.setText(String.format("%d", cal_data.flight));
+ last_flight = cal_data.flight;
}
}
diff --git a/altosui/AltosFlightStatusTableModel.java b/altosui/AltosFlightStatusTableModel.java
index 7b872df9..9c4e1bee 100644
--- a/altosui/AltosFlightStatusTableModel.java
+++ b/altosui/AltosFlightStatusTableModel.java
@@ -28,7 +28,7 @@ import java.util.*;
import java.text.*;
import java.util.prefs.*;
import java.util.concurrent.LinkedBlockingQueue;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosFlightStatusTableModel extends AbstractTableModel {
private String[] columnNames = {
diff --git a/altosui/AltosFlightStatusUpdate.java b/altosui/AltosFlightStatusUpdate.java
index 82ef43c2..b8b0d38a 100644
--- a/altosui/AltosFlightStatusUpdate.java
+++ b/altosui/AltosFlightStatusUpdate.java
@@ -19,7 +19,7 @@
package altosui;
import java.awt.event.*;
-import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosFlightStatusUpdate implements ActionListener {
diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java
index cf03d2dc..44e995be 100644
--- a/altosui/AltosFlightUI.java
+++ b/altosui/AltosFlightUI.java
@@ -23,8 +23,8 @@ import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
AltosVoice voice;
@@ -36,7 +36,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
JTabbedPane pane;
AltosPad pad;
- AltosIgnitor ignitor;
+ AltosIgnitor igniter;
AltosAscent ascent;
AltosDescent descent;
AltosLanded landed;
@@ -45,7 +45,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
boolean has_map;
boolean has_companion;
boolean has_state;
- boolean has_ignitor;
+ boolean has_igniter;
private AltosFlightStatus flightStatus;
private AltosInfoTable flightInfo;
@@ -101,7 +101,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
status_update.saved_listener_state = listener_state;
if (state == null)
- state = new AltosState();
+ state = new AltosState(new AltosCalData());
if (state.state() != Altos.ao_flight_startup) {
if (!has_state) {
@@ -115,21 +115,20 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
JComponent tab = which_tab(state);
if (tab != cur_tab) {
- if (cur_tab == pane.getSelectedComponent()) {
+ if (cur_tab == pane.getSelectedComponent())
pane.setSelectedComponent(tab);
- }
cur_tab = tab;
}
- if (ignitor.should_show(state)) {
- if (!has_ignitor) {
- pane.add("Ignitor", ignitor);
- has_ignitor = true;
+ if (igniter.should_show(state)) {
+ if (!has_igniter) {
+ pane.add("Ignitor", igniter);
+ has_igniter = true;
}
} else {
- if (has_ignitor) {
- pane.remove(ignitor);
- has_ignitor = false;
+ if (has_igniter) {
+ pane.remove(igniter);
+ has_igniter = false;
}
}
@@ -145,7 +144,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
}
}
- if (state.gps != null && state.gps.connected) {
+ if (state.gps != null) {
if (!has_map) {
pane.add("Site Map", sitemap);
has_map = true;
@@ -272,8 +271,8 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
displays.add(pad);
pane.add("Status", pad);
- ignitor = new AltosIgnitor();
- displays.add(ignitor);
+ igniter = new AltosIgnitor();
+ displays.add(igniter);
ascent = new AltosAscent();
displays.add(ascent);
descent = new AltosDescent();
diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java
index 4ca2b77c..f6c906c6 100644
--- a/altosui/AltosGraphUI.java
+++ b/altosui/AltosGraphUI.java
@@ -24,8 +24,8 @@ import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
@@ -37,22 +37,35 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
AltosGraph graph;
AltosUIEnable enable;
AltosUIMap map;
- AltosState state;
- AltosGraphDataSet graphDataSet;
AltosFlightStats stats;
AltosFlightStatsTable statsTable;
+ AltosGPS gps;
boolean has_gps;
- void fill_map(AltosStateIterable states) {
- boolean any_gps = false;
- for (AltosState state : states) {
- if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) {
- if (map == null)
- map = new AltosUIMap();
- map.show(state, null);
- has_gps = true;
+ void fill_map(AltosFlightSeries flight_series) {
+ boolean any_gps = false;
+ AltosGPSTimeValue gtv_last = null;
+
+ if (flight_series.gps_series != null) {
+ for (AltosGPSTimeValue gtv : flight_series.gps_series) {
+ gtv_last = gtv;
+ AltosGPS gps = gtv.gps;
+ if (gps != null &&
+ gps.locked &&
+ gps.nsat >= 4) {
+ if (map == null)
+ map = new AltosUIMap();
+ map.show(gps, (int) flight_series.value_before(AltosFlightSeries.state_name, gtv.time));
+ this.gps = gps;
+ has_gps = true;
+ }
}
}
+ if (gtv_last != null) {
+ int state = (int) flight_series.value_after(AltosFlightSeries.state_name, gtv_last.time);
+ if (state == AltosLib.ao_flight_landed)
+ map.show(gtv_last.gps, state);
+ }
}
public void font_size_changed(int font_size) {
@@ -69,18 +82,24 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
enable.units_changed(imperial_units);
}
- AltosGraphUI(AltosStateIterable states, File file) throws InterruptedException, IOException {
+ AltosGraphUI(AltosRecordSet set, File file) throws InterruptedException, IOException {
super(file.getName());
- state = null;
+ AltosCalData cal_data = set.cal_data();
+
pane = new JTabbedPane();
enable = new AltosUIEnable();
- stats = new AltosFlightStats(states);
- graphDataSet = new AltosGraphDataSet(states);
+ AltosUIFlightSeries flight_series = new AltosUIFlightSeries(cal_data);
+
+ set.capture_series(flight_series);
+
+ flight_series.finish();
+
+ stats = new AltosFlightStats(flight_series);
- graph = new AltosGraph(enable, stats, graphDataSet);
+ graph = new AltosGraph(enable, stats, flight_series);
statsTable = new AltosFlightStatsTable(stats);
@@ -89,7 +108,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
pane.add("Flight Statistics", statsTable);
has_gps = false;
- fill_map(states);
+ fill_map(flight_series);
if (has_gps)
pane.add("Map", map);
@@ -108,7 +127,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
pack();
setVisible(true);
- if (state != null && has_gps)
- map.centre(state);
+ if (gps != null)
+ map.centre(gps);
}
}
diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java
index 4d5c3b2d..a2696f15 100644
--- a/altosui/AltosIdleMonitorUI.java
+++ b/altosui/AltosIdleMonitorUI.java
@@ -25,8 +25,8 @@ import javax.swing.event.*;
import java.io.*;
import java.util.concurrent.*;
import java.util.Arrays;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosIdleMonitorListener, DocumentListener {
AltosDevice device;
@@ -34,12 +34,12 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
AltosPad pad;
AltosInfoTable flightInfo;
AltosFlightStatus flightStatus;
- AltosIgnitor ignitor;
+ AltosIgnitor igniter;
AltosIdleMonitor thread;
AltosUIMap sitemap;
int serial;
boolean remote;
- boolean has_ignitor;
+ boolean has_igniter;
boolean has_map;
void stop_display() {
@@ -75,15 +75,15 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
public void show(AltosState state, AltosListenerState listener_state) {
status_update.saved_state = state;
- if (ignitor.should_show(state)) {
- if (!has_ignitor) {
- pane.add("Ignitor", ignitor);
- has_ignitor = true;
+ if (igniter.should_show(state)) {
+ if (!has_igniter) {
+ pane.add("Ignitor", igniter);
+ has_igniter = true;
}
} else {
- if (has_ignitor) {
- pane.remove(ignitor);
- has_ignitor = false;
+ if (has_igniter) {
+ pane.remove(igniter);
+ has_igniter = false;
}
}
if (state.gps != null && state.gps.connected) {
@@ -102,8 +102,8 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
pad.show(state, listener_state);
flightStatus.show(state, listener_state);
flightInfo.show(state, listener_state);
- if (has_ignitor)
- ignitor.show(state, listener_state);
+ if (has_igniter)
+ igniter.show(state, listener_state);
if (has_map)
sitemap.show(state, listener_state);
// } catch (Exception e) {
@@ -274,7 +274,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
flightInfo = new AltosInfoTable();
pane.add("Table", new JScrollPane(flightInfo));
- ignitor = new AltosIgnitor();
+ igniter = new AltosIgnitor();
sitemap = new AltosUIMap();
diff --git a/altosui/AltosIgniteUI.java b/altosui/AltosIgniteUI.java
index 15493b8a..debbf763 100644
--- a/altosui/AltosIgniteUI.java
+++ b/altosui/AltosIgniteUI.java
@@ -25,8 +25,8 @@ import java.io.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosIgniteUI
extends AltosUIDialog
@@ -213,6 +213,8 @@ public class AltosIgniteUI
fired();
} else if (reply.startsWith("npyro")) {
npyro = Integer.parseInt(reply.substring(6));
+ if (npyro == AltosLib.MISSING)
+ npyro = 0;
make_ui();
}
}
@@ -255,15 +257,11 @@ public class AltosIgniteUI
boolean getting_status = false;
- boolean visible = false;
-
void set_ignite_status() {
getting_status = false;
poll_remaining = 2;
- if (!visible) {
- visible = true;
+ if (!isVisible())
setVisible(true);
- }
}
void poll_ignite_status() {
diff --git a/altosui/AltosIgnitor.java b/altosui/AltosIgnitor.java
index fabf4320..7c7d1fba 100644
--- a/altosui/AltosIgnitor.java
+++ b/altosui/AltosIgnitor.java
@@ -21,65 +21,65 @@ package altosui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosIgnitor extends AltosUIFlightTab {
public class Ignitor extends AltosUIUnitsIndicator {
- int ignitor;
+ int igniter;
public double value(AltosState state, int i) {
- if (state.ignitor_voltage == null ||
- state.ignitor_voltage.length < ignitor)
+ if (state.igniter_voltage == null ||
+ state.igniter_voltage.length < igniter)
return AltosLib.MISSING;
- return state.ignitor_voltage[ignitor];
+ return state.igniter_voltage[igniter];
}
public double good() { return AltosLib.ao_igniter_good; }
public Ignitor (AltosUIFlightTab container, int y) {
- super(container, y, AltosConvert.voltage, String.format ("%s Voltage", AltosLib.ignitor_name(y)), 1, true, 1);
- ignitor = y;
+ super(container, y, AltosConvert.voltage, String.format ("%s Voltage", AltosLib.igniter_name(y)), 1, true, 1);
+ igniter = y;
}
}
- Ignitor[] ignitors;
+ Ignitor[] igniters;
public void show(AltosState state, AltosListenerState listener_state) {
if (isShowing())
- make_ignitors(state);
+ make_igniters(state);
super.show(state, listener_state);
}
public boolean should_show(AltosState state) {
if (state == null)
return false;
- if (state.ignitor_voltage == null)
+ if (state.igniter_voltage == null)
return false;
- return state.ignitor_voltage.length > 0;
+ return state.igniter_voltage.length > 0;
}
- void make_ignitors(AltosState state) {
- int n = (state == null || state.ignitor_voltage == null) ? 0 : state.ignitor_voltage.length;
- int old_n = ignitors == null ? 0 : ignitors.length;
+ void make_igniters(AltosState state) {
+ int n = (state == null || state.igniter_voltage == null) ? 0 : state.igniter_voltage.length;
+ int old_n = igniters == null ? 0 : igniters.length;
if (n != old_n) {
- if (ignitors != null) {
- for (int i = 0; i < ignitors.length; i++) {
- remove(ignitors[i]);
- ignitors[i].remove(this);
- ignitors = null;
+ if (igniters != null) {
+ for (int i = 0; i < igniters.length; i++) {
+ remove(igniters[i]);
+ igniters[i].remove(this);
+ igniters = null;
}
}
if (n > 0) {
setVisible(true);
- ignitors = new Ignitor[n];
+ igniters = new Ignitor[n];
for (int i = 0; i < n; i++) {
- ignitors[i] = new Ignitor(this, i);
- add(ignitors[i]);
+ igniters[i] = new Ignitor(this, i);
+ add(igniters[i]);
}
} else
setVisible(false);
diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java
index ded08537..c2e14923 100644
--- a/altosui/AltosLanded.java
+++ b/altosui/AltosLanded.java
@@ -22,8 +22,8 @@ import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosLanded extends AltosUIFlightTab implements ActionListener {
@@ -123,18 +123,17 @@ public class AltosLanded extends AltosUIFlightTab implements ActionListener {
if (file != null) {
String filename = file.getName();
try {
- AltosStateIterable states = null;
+ AltosRecordSet record_set = null;
+ FileInputStream in = new FileInputStream(file);
if (filename.endsWith("eeprom")) {
- FileInputStream in = new FileInputStream(file);
- states = new AltosEepromFile(in);
+ record_set = new AltosEepromRecordSet(in);
} else if (filename.endsWith("telem")) {
- FileInputStream in = new FileInputStream(file);
- states = new AltosTelemetryFile(in);
+ record_set = new AltosTelemetryFile(in);
} else {
throw new FileNotFoundException(filename);
}
try {
- new AltosGraphUI(states, file);
+ new AltosGraphUI(record_set, file);
} catch (InterruptedException ie) {
} catch (IOException ie) {
}
@@ -143,6 +142,11 @@ public class AltosLanded extends AltosUIFlightTab implements ActionListener {
fe.getMessage(),
"Cannot open file",
JOptionPane.ERROR_MESSAGE);
+ } catch (IOException ie) {
+ JOptionPane.showMessageDialog(null,
+ ie.getMessage(),
+ "Error reading file file",
+ JOptionPane.ERROR_MESSAGE);
}
}
}
diff --git a/altosui/AltosLaunch.java b/altosui/AltosLaunch.java
index d4e73b3e..f1893cf5 100644
--- a/altosui/AltosLaunch.java
+++ b/altosui/AltosLaunch.java
@@ -21,7 +21,7 @@ package altosui;
import java.io.*;
import java.util.concurrent.*;
import java.awt.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosLaunch {
AltosDevice device;
diff --git a/altosui/AltosLaunchUI.java b/altosui/AltosLaunchUI.java
index 835858e2..8a24ed3e 100644
--- a/altosui/AltosLaunchUI.java
+++ b/altosui/AltosLaunchUI.java
@@ -24,7 +24,7 @@ import javax.swing.*;
import java.io.*;
import java.text.*;
import java.util.concurrent.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altosuilib_12.*;
class FireButton extends JButton {
protected void processMouseEvent(MouseEvent e) {
diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java
index d411c969..0aeef8e1 100644
--- a/altosui/AltosPad.java
+++ b/altosui/AltosPad.java
@@ -19,8 +19,8 @@
package altosui;
import java.util.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosPad extends AltosUIFlightTab {
@@ -46,10 +46,11 @@ public class AltosPad extends AltosUIFlightTab {
class LoggingReady extends AltosUIIndicator {
public void show (AltosState state, AltosListenerState listener_state) {
- if (state == null || state.flight == AltosLib.MISSING) {
+ AltosCalData cal_data = state.cal_data();
+ if (state == null || cal_data.flight == AltosLib.MISSING) {
hide();
} else {
- if (state.flight != 0) {
+ if (cal_data.flight != 0) {
if (state.state() <= Altos.ao_flight_pad)
show("Ready to record");
else if (state.state() < Altos.ao_flight_landed ||
@@ -59,7 +60,7 @@ public class AltosPad extends AltosUIFlightTab {
show("Recorded data");
} else
show("Storage full");
- set_lights(state.flight != 0);
+ set_lights(cal_data.flight != 0);
}
}
public LoggingReady (AltosUIFlightTab container, int y) {
@@ -128,10 +129,8 @@ public class AltosPad extends AltosUIFlightTab {
}
boolean report_pad(AltosState state) {
- if ((state.state() == AltosLib.ao_flight_stateless ||
- state.state() < AltosLib.ao_flight_pad) &&
- state.gps != null &&
- state.gps.lat != AltosLib.MISSING)
+ if (state.state() == AltosLib.ao_flight_stateless ||
+ state.state() < AltosLib.ao_flight_pad)
{
return false;
}
@@ -150,7 +149,7 @@ public class AltosPad extends AltosUIFlightTab {
if (report_pad(state)) {
lat = state.pad_lat;
label = "Pad Latitude";
- } else {
+ } else if (state.gps != null) {
lat = state.gps.lat;
label = "Latitude";
}
@@ -187,7 +186,7 @@ public class AltosPad extends AltosUIFlightTab {
if (report_pad(state)) {
lon = state.pad_lon;
label = "Pad Longitude";
- } else {
+ } else if (state.gps != null) {
lon = state.gps.lon;
label = "Longitude";
}
@@ -217,8 +216,10 @@ public class AltosPad extends AltosUIFlightTab {
public double value(AltosState state, int i) {
if (report_pad(state))
return state.pad_alt;
- else
+ else if (state.gps != null)
return state.gps.alt;
+ else
+ return state.altitude();
}
public void show (AltosState state, AltosListenerState listener_state) {
diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java
index 019bbb9e..4bc2a5f8 100644
--- a/altosui/AltosUI.java
+++ b/altosui/AltosUI.java
@@ -23,8 +23,8 @@ import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_12.*;
+import org.altusmetrum.altosuilib_12.*;
public class AltosUI extends AltosUIFrame {
public AltosVoice voice = new AltosVoice();
@@ -276,7 +276,7 @@ public class AltosUI extends AltosUIFrame {
}
void ConfigureTeleMetrum() {
- new AltosConfig(AltosUI.this);
+ new AltosConfigFC(AltosUI.this);
}
void ConfigureTeleDongle() {
@@ -310,10 +310,9 @@ public class AltosUI extends AltosUIFrame {
AltosDataChooser chooser = new AltosDataChooser(
AltosUI.this);
- Iterable<AltosState> states = chooser.runDialog();
- if (states != null) {
- AltosFlightReader reader = new AltosReplayReader(states.iterator(),
- chooser.file());
+ AltosRecordSet set = chooser.runDialog();
+ if (set != null) {
+ AltosReplayReader reader = new AltosReplayReader(set, chooser.file());
new AltosFlightUI(voice, reader);
}
}
@@ -325,6 +324,13 @@ public class AltosUI extends AltosUIFrame {
new AltosEepromManage(AltosUI.this, AltosLib.product_any);
}
+ private static AltosFlightSeries make_series(AltosRecordSet set) {
+ AltosFlightSeries series = new AltosFlightSeries(set.cal_data());
+ set.capture_series(series);
+ series.finish();
+ return series;
+ }
+
/* Load a flight log file and write out a CSV file containing
* all of the data in standard units
*/
@@ -332,10 +338,11 @@ public class AltosUI extends AltosUIFrame {
private void ExportData() {
AltosDataChooser chooser;
chooser = new AltosDataChooser(this);
- AltosStateIterable states = chooser.runDialog();
- if (states == null)
+ AltosRecordSet set = chooser.runDialog();
+ if (set == null)
return;
- new AltosCSVUI(AltosUI.this, states, chooser.file());
+ AltosFlightSeries series = make_series(set);
+ new AltosCSVUI(AltosUI.this, series, chooser.file());
}
/* Load a flight log CSV file and display a pretty graph.
@@ -344,11 +351,11 @@ public class AltosUI extends AltosUIFrame {
private void GraphData() {
AltosDataChooser chooser;
chooser = new AltosDataChooser(this);
- AltosStateIterable states = chooser.runDialog();
- if (states == null)
+ AltosRecordSet set = chooser.runDialog();
+ if (set == null)
return;
try {
- new AltosGraphUI(states, chooser.file());
+ new AltosGraphUI(set, chooser.file());
} catch (InterruptedException ie) {
} catch (IOException ie) {
}
@@ -365,21 +372,6 @@ public class AltosUI extends AltosUIFrame {
}
}
- static AltosStateIterable open_logfile(File file) {
- try {
- FileInputStream in;
-
- in = new FileInputStream(file);
- if (file.getName().endsWith("telem"))
- return new AltosTelemetryFile(in);
- else
- return new AltosEepromFile(in);
- } catch (FileNotFoundException fe) {
- System.out.printf("%s\n", fe.getMessage());
- return null;
- }
- }
-
static AltosWriter open_csv(File file) {
try {
return new AltosCSV(file);
@@ -398,17 +390,28 @@ public class AltosUI extends AltosUIFrame {
}
}
+ static AltosRecordSet record_set(File input) {
+ try {
+ return AltosLib.record_set(input);
+ } catch (IOException ie) {
+ String message = ie.getMessage();
+ if (message == null)
+ message = String.format("%s (I/O error)", input.toString());
+ System.err.printf("%s\n", message);
+ }
+ return null;
+ }
+
static final int process_none = 0;
static final int process_csv = 1;
static final int process_kml = 2;
static final int process_graph = 3;
static final int process_replay = 4;
static final int process_summary = 5;
- static final int process_cat = 6;
static boolean process_csv(File input) {
- AltosStateIterable states = open_logfile(input);
- if (states == null)
+ AltosRecordSet set = record_set(input);
+ if (set == null)
return false;
File output = Altos.replace_extension(input,".csv");
@@ -420,15 +423,16 @@ public class AltosUI extends AltosUIFrame {
AltosWriter writer = open_csv(output);
if (writer == null)
return false;
- writer.write(states);
+ AltosFlightSeries series = make_series(set);
+ writer.write(series);
writer.close();
}
return true;
}
static boolean process_kml(File input) {
- AltosStateIterable states = open_logfile(input);
- if (states == null)
+ AltosRecordSet set = record_set(input);
+ if (set == null)
return false;
File output = Altos.replace_extension(input,".kml");
@@ -440,31 +444,19 @@ public class AltosUI extends AltosUIFrame {
AltosWriter writer = open_kml(output);
if (writer == null)
return false;
- writer.write(states);
+ AltosFlightSeries series = make_series(set);
+ series.finish();
+ writer.write(series);
writer.close();
return true;
}
}
- static AltosStateIterable record_iterable(File file) {
- FileInputStream in;
- try {
- in = new FileInputStream(file);
- } catch (Exception e) {
- System.out.printf("Failed to open file '%s'\n", file);
- return null;
- }
- if (file.getName().endsWith("telem"))
- return new AltosTelemetryFile(in);
- else
- return new AltosEepromFile(in);
- }
-
static AltosReplayReader replay_file(File file) {
- AltosStateIterable states = record_iterable(file);
- if (states == null)
+ AltosRecordSet set = record_set(file);
+ if (set == null)
return null;
- return new AltosReplayReader(states.iterator(), file);
+ return new AltosReplayReader(set, file);
}
static boolean process_replay(File file) {
@@ -476,11 +468,11 @@ public class AltosUI extends AltosUIFrame {
}
static boolean process_graph(File file) {
- AltosStateIterable states = record_iterable(file);
- if (states == null)
+ AltosRecordSet set = record_set(file);
+ if (set == null)
return false;
try {
- new AltosGraphUI(states, file);
+ new AltosGraphUI(set, file);
return true;
} catch (InterruptedException ie) {
} catch (IOException ie) {
@@ -489,85 +481,52 @@ public class AltosUI extends AltosUIFrame {
}
static boolean process_summary(File file) {
- AltosStateIterable states = record_iterable(file);
- if (states == null)
- return false;
- try {
- System.out.printf("%s:\n", file.toString());
- AltosFlightStats stats = new AltosFlightStats(states);
- if (stats.serial != AltosLib.MISSING)
- System.out.printf("Serial: %5d\n", stats.serial);
- if (stats.flight != AltosLib.MISSING)
- System.out.printf("Flight: %5d\n", stats.flight);
- if (stats.year != AltosLib.MISSING)
- System.out.printf("Date: %04d-%02d-%02d\n",
- stats.year, stats.month, stats.day);
- if (stats.hour != AltosLib.MISSING)
- System.out.printf("Time: %02d:%02d:%02d UTC\n",
- stats.hour, stats.minute, stats.second);
- if (stats.max_height != AltosLib.MISSING)
- System.out.printf("Max height: %6.0f m %6.0f ft\n",
- stats.max_height,
- AltosConvert.meters_to_feet(stats.max_height));
- if (stats.max_speed != AltosLib.MISSING)
- System.out.printf("Max speed: %6.0f m/s %6.0f ft/s %6.4f Mach\n",
- stats.max_speed,
- AltosConvert.meters_to_feet(stats.max_speed),
- AltosConvert.meters_to_mach(stats.max_speed));
- if (stats.max_acceleration != AltosLib.MISSING) {
- System.out.printf("Max accel: %6.0f m/s² %6.0f ft/s² %6.2f g\n",
- stats.max_acceleration,
- AltosConvert.meters_to_feet(stats.max_acceleration),
- AltosConvert.meters_to_g(stats.max_acceleration));
- }
- if (stats.state_speed[Altos.ao_flight_drogue] != AltosLib.MISSING)
- System.out.printf("Drogue rate: %6.0f m/s %6.0f ft/s\n",
- stats.state_speed[Altos.ao_flight_drogue],
- AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_drogue]));
- if (stats.state_speed[Altos.ao_flight_main] != AltosLib.MISSING)
- System.out.printf("Main rate: %6.0f m/s %6.0f ft/s\n",
- stats.state_speed[Altos.ao_flight_main],
- AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main]));
- if (stats.state_end[Altos.ao_flight_main] != AltosLib.MISSING &&
- stats.state_start[Altos.ao_flight_boost] != AltosLib.MISSING)
- System.out.printf("Flight time: %6.0f s\n",
- stats.state_end[Altos.ao_flight_main] -
- stats.state_start[Altos.ao_flight_boost]);
- System.out.printf("\n");
- return true;
- } catch (InterruptedException ie) {
- } catch (IOException ie) {
- }
- return false;
- }
-
- static boolean process_cat(File file) {
- try {
- AltosStateIterable eef = record_iterable(file);
-
- for (AltosState state : eef) {
- if ((state.set & AltosState.set_gps) != 0) {
- System.out.printf ("time %d %d-%d-%d %d:%d:%d lat %g lon %g alt %g\n",
- state.gps.seconds(),
- state.gps.year,
- state.gps.month,
- state.gps.day,
- state.gps.hour,
- state.gps.minute,
- state.gps.second,
- state.gps.lat,
- state.gps.lon,
- state.gps.alt);
- } else {
- System.out.printf ("tick %d state %d height %g\n",
- state.tick, state.state(), state.height());
- }
- }
-
- } catch (Exception e) {
- System.out.printf("Failed to open file '%s'\n", file);
+ AltosRecordSet set = record_set(file);
+ if (set == null)
return false;
+ System.out.printf("%s:\n", file.toString());
+ AltosFlightSeries series = make_series(set);
+ AltosFlightStats stats = new AltosFlightStats(series);
+ if (stats.serial != AltosLib.MISSING)
+ System.out.printf("Serial: %5d\n", stats.serial);
+ if (stats.flight != AltosLib.MISSING)
+ System.out.printf("Flight: %5d\n", stats.flight);
+ if (stats.year != AltosLib.MISSING)
+ System.out.printf("Date: %04d-%02d-%02d\n",
+ stats.year, stats.month, stats.day);
+ if (stats.hour != AltosLib.MISSING)
+ System.out.printf("Time: %02d:%02d:%02d UTC\n",
+ stats.hour, stats.minute, stats.second);
+ if (stats.max_height != AltosLib.MISSING)
+ System.out.printf("Max height: %6.0f m %6.0f ft\n",
+ stats.max_height,
+ AltosConvert.meters_to_feet(stats.max_height));
+ if (stats.max_speed != AltosLib.MISSING)
+ System.out.printf("Max speed: %6.0f m/s %6.0f ft/s %6.4f Mach\n",
+ stats.max_speed,
+ AltosConvert.meters_to_feet(stats.max_speed),
+ AltosConvert.meters_to_mach(stats.max_speed));
+ if (stats.max_acceleration != AltosLib.MISSING) {
+ System.out.printf("Max accel: %6.0f m/s² %6.0f ft/s² %6.2f g\n",
+ stats.max_acceleration,
+ AltosConvert.meters_to_feet(stats.max_acceleration),
+ AltosConvert.meters_to_g(stats.max_acceleration));
}
+ if (stats.state_speed[Altos.ao_flight_drogue] != AltosLib.MISSING)
+ System.out.printf("Drogue rate: %6.0f m/s %6.0f ft/s\n",
+ stats.state_speed[Altos.ao_flight_drogue],
+ AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_drogue]));
+ if (stats.state_speed[Altos.ao_flight_main] != AltosLib.MISSING)
+ System.out.printf("Main rate: %6.0f m/s %6.0f ft/s\n",
+ stats.state_speed[Altos.ao_flight_main],
+ AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main]));
+ if (stats.landed_time != AltosLib.MISSING &&
+ stats.boost_time != AltosLib.MISSING &&
+ stats.landed_time > stats.boost_time)
+ System.out.printf("Flight time: %6.0f s\n",
+ stats.landed_time -
+ stats.boost_time);
+ System.out.printf("\n");
return true;
}
@@ -613,8 +572,6 @@ public class AltosUI extends AltosUIFrame {
process = process_graph;
else if (args[i].equals("--summary"))
process = process_summary;
- else if (args[i].equals("--cat"))
- process = process_cat;
else if (args[i].startsWith("--"))
help(1);
else {
@@ -643,9 +600,6 @@ public class AltosUI extends AltosUIFrame {
if (!process_summary(file))
++errors;
break;
- case process_cat:
- if (!process_cat(file))
- ++errors;
}
}
}
diff --git a/altosui/Makefile-standalone b/altosui/Makefile-standalone
index cbaf9743..e5f41639 100644
--- a/altosui/Makefile-standalone
+++ b/altosui/Makefile-standalone
@@ -4,8 +4,8 @@ CLASSPATH=classes:./*:/usr/share/java/*
CLASSFILES=\
Altos.class \
AltosChannelMenu.class \
- AltosConfig.class \
- AltosConfigUI.class \
+ AltosConfigFC.class \
+ AltosConfigFCUI.class \
AltosConvert.class \
AltosCRCException.class \
AltosCSV.class \
diff --git a/altosui/Makefile.am b/altosui/Makefile.am
index de3dee68..31ec06bc 100644
--- a/altosui/Makefile.am
+++ b/altosui/Makefile.am
@@ -14,8 +14,8 @@ altosui_JAVA = \
AltosAscent.java \
AltosChannelMenu.java \
AltosCompanionInfo.java \
- AltosConfig.java \
- AltosConfigUI.java \
+ AltosConfigFC.java \
+ AltosConfigFCUI.java \
AltosConfigPyroUI.java \
AltosConfigureUI.java \
AltosConfigTD.java \
@@ -131,11 +131,13 @@ FIRMWARE_TM_2_0=$(top_srcdir)/src/telemetrum-v2.0/telemetrum-v2.0-$(VERSION).ihx
FIRMWARE_TM=$(FIRMWARE_TM_1_0) $(FIRMWARE_TM_1_1) $(FIRMWARE_TM_1_2) $(FIRMWARE_TM_2_0)
FIRMWARE_TELEMINI_1_0=$(top_srcdir)/src/telemini-v1.0/telemini-v1.0-$(VERSION).ihx
-FIRMWARE_TELEMINI=$(FIRMWARE_TELEMINI_1_0)
+FIRMWARE_TELEMINI_3_0=$(top_srcdir)/src/telemini-v3.0/telemini-v3.0-$(VERSION).ihx
+FIRMWARE_TELEMINI=$(FIRMWARE_TELEMINI_1_0) $(FIRMWARE_TELEMINI_3_0)
FIRMWARE_TBT_1_0=$(top_srcdir)/src/telebt-v1.0/telebt-v1.0-$(VERSION).ihx
FIRMWARE_TBT_3_0=$(top_srcdir)/src/telebt-v3.0/telebt-v3.0-$(VERSION).ihx
-FIRMWARE_TBT=$(FIRMWARE_TBT_1_0) $(FIRMWARE_TBT_3_0)
+FIRMWARE_TBT_4_0=$(top_srcdir)/src/telebt-v4.0/telebt-v4.0-$(VERSION).ihx
+FIRMWARE_TBT=$(FIRMWARE_TBT_1_0) $(FIRMWARE_TBT_3_0) $(FIRMWARE_TBT_4_0)
FIRMWARE_TMEGA_1_0=$(top_srcdir)/src/telemega-v1.0/telemega-v1.0-$(VERSION).ihx
FIRMWARE_TMEGA_2_0=$(top_srcdir)/src/telemega-v2.0/telemega-v2.0-$(VERSION).ihx
diff --git a/altosui/altos-windows.nsi.in b/altosui/altos-windows.nsi.in
index 1039bd41..31139513 100644
--- a/altosui/altos-windows.nsi.in
+++ b/altosui/altos-windows.nsi.in
@@ -126,14 +126,17 @@ Section "Firmware"
File "../src/telemetrum-v2.0/telemetrum-v2.0-${VERSION}.ihx"
; File "../src/telemetrum-v3.0/telemetrum-v3.0-${VERSION}.ihx"
File "../src/telemini-v1.0/telemini-v1.0-${VERSION}.ihx"
+ File "../src/telemini-v3.0/telemini-v3.0-${VERSION}.ihx"
File "../src/telegps-v1.0/telegps-v1.0-${VERSION}.ihx"
File "../src/teledongle-v0.2/teledongle-v0.2-${VERSION}.ihx"
File "../src/teledongle-v3.0/teledongle-v3.0-${VERSION}.ihx"
File "../src/telebt-v1.0/telebt-v1.0-${VERSION}.ihx"
File "../src/telebt-v3.0/telebt-v3.0-${VERSION}.ihx"
+ File "../src/telebt-v4.0/telebt-v4.0-${VERSION}.ihx"
File "../src/telemega-v1.0/telemega-v1.0-${VERSION}.ihx"
File "../src/telemega-v2.0/telemega-v2.0-${VERSION}.ihx"
File "../src/easymini-v1.0/easymini-v1.0-${VERSION}.ihx"
+ File "../src/easymini-v2.0/easymini-v2.0-${VERSION}.ihx"
File "../src/easymega-v1.0/easymega-v1.0-${VERSION}.ihx"
SectionEnd