From 1489c7f75f7b9ce547ac49c157b440c4f9131ef4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 7 Dec 2012 17:27:48 -0800 Subject: altosui: Call config UI from AltosConfigData directly Don't make AltosConfig have a pile of config code, stick that in AltosConfigData instead. This uses a new interface, AltosConfigValues to get from AltosConfigData to the UI. Signed-off-by: Keith Packard --- altoslib/AltosConfigValues.java | 75 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 altoslib/AltosConfigValues.java (limited to 'altoslib/AltosConfigValues.java') diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java new file mode 100644 index 00000000..69239f21 --- /dev/null +++ b/altoslib/AltosConfigValues.java @@ -0,0 +1,75 @@ +/* + * Copyright © 2012 Keith Packard + * + * 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; version 2 of the License. + * + * 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.AltosLib; + +public interface AltosConfigValues { + /* set and get all of the dialog values */ + public abstract void set_product(String product); + + public abstract void set_version(String version); + + public abstract void set_serial(int serial); + + public abstract void set_main_deploy(int new_main_deploy); + + public abstract int main_deploy(); + + public abstract void set_apogee_delay(int new_apogee_delay); + + public abstract int apogee_delay(); + + public abstract void set_apogee_lockout(int new_apogee_lockout); + + public abstract int apogee_lockout(); + + public abstract void set_radio_frequency(double new_radio_frequency); + + public abstract double radio_frequency(); + + public abstract void set_radio_calibration(int new_radio_calibration); + + public abstract int radio_calibration(); + + public abstract void set_radio_enable(int new_radio_enable); + + public abstract int radio_enable(); + + public abstract void set_callsign(String new_callsign); + + public abstract String callsign(); + + public abstract void set_flight_log_max(int new_flight_log_max); + + public abstract void set_flight_log_max_enabled(boolean enable); + + public abstract int flight_log_max(); + + public abstract void set_flight_log_max_limit(int flight_log_max_limit); + + public abstract void set_ignite_mode(int new_ignite_mode); + + public abstract int ignite_mode(); + + public abstract void set_pad_orientation(int new_pad_orientation); + + public abstract int pad_orientation(); + + public abstract void set_pyros(AltosPyro[] new_pyros); + + public abstract AltosPyro[] pyros(); +} -- cgit v1.2.3 From abf82991b8e69754ebc4857ce78ac4a4b01f16e4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 7 Dec 2012 17:35:15 -0800 Subject: altosui: Add APRS interval configuration to UI Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 18 +++++++++++- altoslib/AltosConfigValues.java | 4 +++ altosui/AltosConfigUI.java | 64 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 2 deletions(-) (limited to 'altoslib/AltosConfigValues.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 515ff480..f940b150 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -67,6 +67,9 @@ public class AltosConfigData implements Iterable { public int npyro; public int pyro; + /* HAS_APRS */ + public int aprs_interval; + /* Storage info replies */ public int storage_size; public int storage_erase_unit; @@ -189,6 +192,8 @@ public class AltosConfigData implements Iterable { npyro = 0; pyros = null; + aprs_interval = -1; + storage_size = -1; storage_erase_unit = -1; stored_flight = -1; @@ -262,6 +267,9 @@ public class AltosConfigData implements Iterable { } catch (Exception e) {} } + /* HAS_APRS */ + try { aprs_interval = get_int(line, "APRS interval:"); } catch (Exception e) {} + /* Storage info replies */ try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {} try { storage_erase_unit = get_int(line, "Storage erase unit"); } catch (Exception e) {} @@ -367,6 +375,9 @@ public class AltosConfigData implements Iterable { /* AO_PYRO_NUM */ if (npyro > 0) pyros = source.pyros(); + + if (aprs_interval >= 0) + aprs_interval = source.aprs_interval(); } public void set_values(AltosConfigValues dest) { @@ -399,6 +410,7 @@ public class AltosConfigData implements Iterable { dest.set_pyros(pyros); else dest.set_pyros(null); + dest.set_aprs_interval(aprs_interval); } public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException { @@ -461,6 +473,10 @@ public class AltosConfigData implements Iterable { } } + /* HAS_APRS */ + if (aprs_interval >= 0) + link.printf("c A %d\n", aprs_interval); + link.printf("c w\n"); link.flush_output(); } @@ -479,4 +495,4 @@ public class AltosConfigData implements Iterable { } } -} \ No newline at end of file +} diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java index 69239f21..40d5217e 100644 --- a/altoslib/AltosConfigValues.java +++ b/altoslib/AltosConfigValues.java @@ -72,4 +72,8 @@ public interface AltosConfigValues { public abstract void set_pyros(AltosPyro[] new_pyros); public abstract AltosPyro[] pyros(); + + public abstract int aprs_interval(); + + public abstract void set_aprs_interval(int new_aprs_interval); } diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 2c3435c1..95780e2b 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -39,6 +39,7 @@ public class AltosConfigUI JLabel radio_calibration_label; JLabel radio_frequency_label; JLabel radio_enable_label; + JLabel aprs_interval_label; JLabel flight_log_max_label; JLabel ignite_mode_label; JLabel pad_orientation_label; @@ -56,6 +57,7 @@ public class AltosConfigUI AltosFreqList radio_frequency_value; JTextField radio_calibration_value; JRadioButton radio_enable_value; + JComboBox aprs_interval_value; JComboBox flight_log_max_value; JComboBox ignite_mode_value; JComboBox pad_orientation_value; @@ -97,6 +99,13 @@ public class AltosConfigUI "Redundant Main", }; + static String[] aprs_interval_values = { + "Disabled", + "2", + "5", + "10" + }; + static String[] pad_orientation_values = { "Antenna Up", "Antenna Down", @@ -141,6 +150,13 @@ public class AltosConfigUI radio_enable_value.setToolTipText("Firmware version does not support disabling radio"); } + void set_aprs_interval_tool_tip() { + if (aprs_interval_value.isEnabled()) + 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_flight_log_max_tool_tip() { if (flight_log_max_value.isEnabled()) flight_log_max_value.setToolTipText("Size reserved for each flight log (in kB)"); @@ -393,7 +409,7 @@ public class AltosConfigUI c.anchor = GridBagConstraints.LINE_START; c.insets = il; c.ipady = 5; - radio_enable_label = new JLabel("Telemetry/RDF Enable:"); + radio_enable_label = new JLabel("Telemetry/RDF/APRS Enable:"); pane.add(radio_enable_label, c); c = new GridBagConstraints(); @@ -410,6 +426,32 @@ public class AltosConfigUI set_radio_enable_tool_tip(); row++; + /* APRS interval */ + c = new GridBagConstraints(); + c.gridx = 0; c.gridy = row; + c.gridwidth = 4; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.LINE_START; + c.insets = il; + c.ipady = 5; + aprs_interval_label = new JLabel("APRS Interval(s):"); + pane.add(aprs_interval_label, c); + + c = new GridBagConstraints(); + c.gridx = 4; c.gridy = row; + c.gridwidth = 4; + c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1; + c.anchor = GridBagConstraints.LINE_START; + c.insets = ir; + c.ipady = 5; + aprs_interval_value = new JComboBox(aprs_interval_values); + aprs_interval_value.setEditable(true); + aprs_interval_value.addItemListener(this); + pane.add(aprs_interval_value, c); + set_aprs_interval_tool_tip(); + row++; + /* Callsign */ c = new GridBagConstraints(); c.gridx = 0; c.gridy = row; @@ -843,4 +885,24 @@ public class AltosConfigUI pyros = pyro_ui.get_pyros(); return pyros; } + + public void set_aprs_interval(int new_aprs_interval) { + String s; + + if (new_aprs_interval <= 0) + s = "Disabled"; + else + s = Integer.toString(new_aprs_interval); + aprs_interval_value.setSelectedItem(s); + aprs_interval_value.setEnabled(new_aprs_interval >= 0); + set_aprs_interval_tool_tip(); + } + + public int aprs_interval() { + String s = aprs_interval_value.getSelectedItem().toString(); + + if (s.equals("Disabled")) + return 0; + return Integer.parseInt(s); + } } -- cgit v1.2.3