From c8078d352a7f54a4a97d25af080155d3f875536a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 16 Jun 2014 22:49:34 -0700 Subject: java: Bump java library versions for next release Prepare for future release by bumping java versions now Signed-off-by: Keith Packard --- telegps/TeleGPSConfigUI.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 5f269fd3..7d28b371 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -21,8 +21,8 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_4.*; -import org.altusmetrum.altosuilib_2.*; +import org.altusmetrum.altoslib_5.*; +import org.altusmetrum.altosuilib_3.*; public class TeleGPSConfigUI extends AltosUIDialog -- cgit v1.2.3 From 3016ee5f21ec66bf9230b90ab1420b8fad628f8d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 20 Jun 2014 00:40:10 -0700 Subject: altosuilib: Wrap radio frequency menu in JMenuBar when used in config The device config dialogs place the radio frequency menu inside a dialog box; it needs to be inside a MenuBar to work properly, so create one to hold it. Signed-off-by: Keith Packard --- altosui/AltosConfigUI.java | 5 ++++- telegps/TeleGPSConfigUI.java | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 4a33b64f..a4e7aca6 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -419,7 +419,10 @@ public class AltosConfigUI c.ipady = 5; radio_frequency_value = new AltosFreqList(); radio_frequency_value.addItemListener(this); - pane.add(radio_frequency_value, c); + + JMenuBar menu_bar = new JMenuBar(); + menu_bar.add(radio_frequency_value); + pane.add(menu_bar, c); radio_frequency_value.setToolTipText("Telemetry, RDF and packet frequency"); row++; diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 7d28b371..dfbff12d 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -257,7 +257,11 @@ public class TeleGPSConfigUI c.ipady = 5; radio_frequency_value = new AltosFreqList(); radio_frequency_value.addItemListener(this); - pane.add(radio_frequency_value, c); + + JMenuBar menu_bar = new JMenuBar(); + menu_bar.add(radio_frequency_value); + + pane.add(menu_bar, c); radio_frequency_value.setToolTipText("Telemetry, RDF and packet frequency"); row++; -- cgit v1.2.3 From 6cc2d671c0e335fbedb0e97699f8f273502c6807 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 22 Jun 2014 21:06:24 -0700 Subject: altosui/telegps: Expose configurable APRS SSID Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 8 +++++++ altoslib/AltosConfigValues.java | 4 ++++ altosui/AltosConfigUI.java | 53 +++++++++++++++++++++++++++++++++++++++++ telegps/TeleGPSConfigUI.java | 53 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index d8b0b081..3bf8ea43 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -71,6 +71,7 @@ public class AltosConfigData implements Iterable { /* HAS_APRS */ public int aprs_interval; + public int aprs_ssid; /* HAS_BEEP */ public int beep; @@ -250,6 +251,7 @@ public class AltosConfigData implements Iterable { pyro_firing_time = -1; aprs_interval = -1; + aprs_ssid = -1; beep = -1; @@ -333,6 +335,7 @@ public class AltosConfigData implements Iterable { /* HAS_APRS */ try { aprs_interval = get_int(line, "APRS interval:"); } catch (Exception e) {} + try { aprs_ssid = get_int(line, "APRS SSID:"); } catch (Exception e) {} /* HAS_BEEP */ try { beep = get_int(line, "Beeper setting:"); } catch (Exception e) {} @@ -459,6 +462,8 @@ public class AltosConfigData implements Iterable { /* HAS_APRS */ if (aprs_interval >= 0) aprs_interval = source.aprs_interval(); + if (aprs_ssid >= 0) + aprs_ssid = source.aprs_ssid(); /* HAS_BEEP */ if (beep >= 0) @@ -507,6 +512,7 @@ public class AltosConfigData implements Iterable { dest.set_pyros(null); dest.set_pyro_firing_time(pyro_firing_time); dest.set_aprs_interval(aprs_interval); + dest.set_aprs_ssid(aprs_ssid); dest.set_beep(beep); dest.set_tracker_motion(tracker_motion); dest.set_tracker_interval(tracker_interval); @@ -577,6 +583,8 @@ public class AltosConfigData implements Iterable { /* HAS_APRS */ if (aprs_interval >= 0) link.printf("c A %d\n", aprs_interval); + if (aprs_ssid >= 0) + link.printf("c S %d\n", aprs_ssid); /* HAS_BEEP */ if (beep >= 0) diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java index dcb4d48f..b0c49e98 100644 --- a/altoslib/AltosConfigValues.java +++ b/altoslib/AltosConfigValues.java @@ -81,6 +81,10 @@ public interface AltosConfigValues { public abstract void set_aprs_interval(int new_aprs_interval); + public abstract int aprs_ssid() throws AltosConfigDataException; + + public abstract void set_aprs_ssid(int new_aprs_ssid); + public abstract int beep() throws AltosConfigDataException; public abstract void set_beep(int new_beep); diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index a4e7aca6..6e1b47c2 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -41,6 +41,7 @@ public class AltosConfigUI JLabel radio_frequency_label; JLabel radio_enable_label; JLabel aprs_interval_label; + JLabel aprs_ssid_label; JLabel flight_log_max_label; JLabel ignite_mode_label; JLabel pad_orientation_label; @@ -62,6 +63,7 @@ public class AltosConfigUI JTextField radio_calibration_value; JRadioButton radio_enable_value; JComboBox aprs_interval_value; + JComboBox aprs_ssid_value; JComboBox flight_log_max_value; JComboBox ignite_mode_value; JComboBox pad_orientation_value; @@ -113,6 +115,10 @@ public class AltosConfigUI "10" }; + static Integer[] aprs_ssid_values = { + 0, 1, 2 ,3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + }; + static String[] beep_values = { "3750", "4000", @@ -201,6 +207,15 @@ public class AltosConfigUI aprs_interval_value.setToolTipText("Hardware doesn't support APRS"); } + void set_aprs_ssid_tool_tip() { + if (aprs_ssid_value.isEnabled()) + aprs_interval_value.setToolTipText("Set the APRS SSID (secondary station identifier)"); + else if (aprs_interval_value.isEnabled()) + aprs_interval_value.setToolTipText("Software version doesn't support setting the APRS SSID"); + 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)"); @@ -504,6 +519,33 @@ public class AltosConfigUI set_aprs_interval_tool_tip(); row++; + /* APRS SSID */ + 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_ssid_label = new JLabel("APRS SSID:"); + pane.add(aprs_ssid_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_ssid_value = new JComboBox(aprs_ssid_values); + aprs_ssid_value.setEditable(false); + aprs_ssid_value.addItemListener(this); + aprs_ssid_value.setMaximumRowCount(aprs_ssid_values.length); + pane.add(aprs_ssid_value, c); + set_aprs_ssid_tool_tip(); + row++; + /* Callsign */ c = new GridBagConstraints(); c.gridx = 0; c.gridy = row; @@ -1180,4 +1222,15 @@ public class AltosConfigUI return 0; return parse_int("aprs interval", s, false); } + + public void set_aprs_ssid(int new_aprs_ssid) { + aprs_ssid_value.setSelectedItem(Math.max(0,new_aprs_ssid)); + aprs_ssid_value.setVisible(new_aprs_ssid >= 0); + set_aprs_ssid_tool_tip(); + } + + public int aprs_ssid() throws AltosConfigDataException { + Integer i = (Integer) aprs_ssid_value.getSelectedItem(); + return i; + } } diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index dfbff12d..1fdfd70c 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -38,6 +38,7 @@ public class TeleGPSConfigUI JLabel radio_frequency_label; JLabel radio_enable_label; JLabel aprs_interval_label; + JLabel aprs_ssid_label; JLabel flight_log_max_label; JLabel callsign_label; JLabel tracker_motion_label; @@ -53,6 +54,7 @@ public class TeleGPSConfigUI JTextField radio_calibration_value; JRadioButton radio_enable_value; JComboBox aprs_interval_value; + JComboBox aprs_ssid_value; JComboBox flight_log_max_value; JTextField callsign_value; JComboBox tracker_motion_value; @@ -72,6 +74,10 @@ public class TeleGPSConfigUI "10" }; + static Integer[] aprs_ssid_values = { + 0, 1, 2 ,3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + }; + static String[] tracker_motion_values_m = { "2", "5", @@ -148,6 +154,15 @@ public class TeleGPSConfigUI aprs_interval_value.setToolTipText("Hardware doesn't support APRS"); } + void set_aprs_ssid_tool_tip() { + if (aprs_ssid_value.isEnabled()) + aprs_interval_value.setToolTipText("Set the APRS SSID (secondary station identifier)"); + else if (aprs_interval_value.isEnabled()) + aprs_interval_value.setToolTipText("Software version doesn't support setting the APRS SSID"); + 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)"); @@ -341,6 +356,33 @@ public class TeleGPSConfigUI set_aprs_interval_tool_tip(); row++; + /* APRS SSID */ + 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_ssid_label = new JLabel("APRS SSID:"); + pane.add(aprs_ssid_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_ssid_value = new JComboBox(aprs_ssid_values); + aprs_ssid_value.setEditable(false); + aprs_ssid_value.addItemListener(this); + aprs_ssid_value.setMaximumRowCount(aprs_ssid_values.length); + pane.add(aprs_ssid_value, c); + set_aprs_ssid_tool_tip(); + row++; + /* Callsign */ c = new GridBagConstraints(); c.gridx = 0; c.gridy = row; @@ -786,4 +828,15 @@ public class TeleGPSConfigUI return 0; return parse_int("aprs interval", s, false); } + + public void set_aprs_ssid(int new_aprs_ssid) { + aprs_ssid_value.setSelectedItem(Math.max(0,new_aprs_ssid)); + aprs_ssid_value.setVisible(new_aprs_ssid >= 0); + set_aprs_ssid_tool_tip(); + } + + public int aprs_ssid() throws AltosConfigDataException { + Integer i = (Integer) aprs_ssid_value.getSelectedItem(); + return i; + } } -- cgit v1.2.3 From 424112349d54bb6360403683f8012b83f49220be Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 24 Jun 2014 20:57:29 -0700 Subject: telegps: Disable tracker config when not available Tracker motion and interval were both left enabled even when the device being configured didn't support them. Disable them like other elements. Signed-off-by: Keith Packard --- telegps/TeleGPSConfigUI.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 1fdfd70c..ee2fbd2d 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -612,12 +612,16 @@ public class TeleGPSConfigUI } public void units_changed(boolean imperial_units) { + boolean was_dirty = dirty; + if (tracker_motion_value.isEnabled()) { String motion = tracker_motion_value.getSelectedItem().toString(); tracker_motion_label.setText(get_tracker_motion_label()); set_tracker_motion_values(); set_tracker_motion((int) (AltosConvert.height.parse(motion, !imperial_units) + 0.5)); } + if (!was_dirty) + set_clean(); } /* set and get all of the dialog values */ @@ -794,7 +798,12 @@ public class TeleGPSConfigUI } public void set_tracker_motion(int tracker_motion) { - tracker_motion_value.setSelectedItem(AltosConvert.height.say(tracker_motion)); + if (tracker_motion < 0) { + tracker_motion_value.setEnabled(false); + } else { + tracker_motion_value.setEnabled(true); + tracker_motion_value.setSelectedItem(AltosConvert.height.say(tracker_motion)); + } } public int tracker_motion() throws AltosConfigDataException { @@ -802,7 +811,12 @@ public class TeleGPSConfigUI } public void set_tracker_interval(int tracker_interval) { - tracker_interval_value.setSelectedItem(String.format("%d", tracker_interval)); + if (tracker_interval< 0) { + tracker_interval_value.setEnabled(false); + } else { + tracker_interval_value.setEnabled(true); + tracker_interval_value.setSelectedItem(String.format("%d", tracker_interval)); + } } public int tracker_interval() throws AltosConfigDataException { -- cgit v1.2.3 From 98c3c3f7edd58358939f7dacf5b8f4c336712f5b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 4 Jul 2014 23:38:53 -0700 Subject: altosui/telegps: Undo the frequency/telemetry menu changes Using menus for these items isn't what we want; we want to show the current value on the screen, which is what a combo box is for. Switch back to those and remove the frequency and telemetry config from the TeleGPS menu bar so that Mac OS X is happy. Signed-off-by: Keith Packard --- altosui/AltosConfigTDUI.java | 33 ++++-- altosui/AltosConfigUI.java | 9 +- altosui/AltosFlightUI.java | 65 +++++++---- altosui/AltosIdleMonitorUI.java | 4 +- altosuilib/AltosFreqList.java | 206 ----------------------------------- altosuilib/AltosUIFreqList.java | 85 +++++++++++++++ altosuilib/AltosUITelemetryList.java | 47 ++++++++ altosuilib/AltosUITelemetryMenu.java | 88 --------------- altosuilib/Makefile.am | 4 +- telegps/TeleGPS.java | 28 +++-- telegps/TeleGPSConfigUI.java | 10 +- 11 files changed, 229 insertions(+), 350 deletions(-) delete mode 100644 altosuilib/AltosFreqList.java create mode 100644 altosuilib/AltosUIFreqList.java create mode 100644 altosuilib/AltosUITelemetryList.java delete mode 100644 altosuilib/AltosUITelemetryMenu.java (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/altosui/AltosConfigTDUI.java b/altosui/AltosConfigTDUI.java index ca365718..947d78ee 100644 --- a/altosui/AltosConfigTDUI.java +++ b/altosui/AltosConfigTDUI.java @@ -44,8 +44,7 @@ public class AltosConfigTDUI JLabel product_value; JLabel version_value; JLabel serial_value; - JMenuBar radio_frequency_menu_bar; - AltosFreqList radio_frequency_value; + AltosUIFreqList radio_frequency_value; JLabel radio_calibration_value; JButton save; @@ -55,7 +54,6 @@ public class AltosConfigTDUI ActionListener listener; - /* A window listener to catch closing events and tell the config code */ class ConfigListener extends WindowAdapter { AltosConfigTDUI ui; @@ -167,11 +165,9 @@ public class AltosConfigTDUI c.anchor = GridBagConstraints.LINE_START; c.insets = ir; c.ipady = 5; - radio_frequency_value = new AltosFreqList(false); + radio_frequency_value = new AltosUIFreqList(); radio_frequency_value.addItemListener(this); - radio_frequency_menu_bar = new JMenuBar(); - radio_frequency_menu_bar.add(radio_frequency_value); - pane.add(radio_frequency_menu_bar, c); + pane.add(radio_frequency_value, c); radio_frequency_value.setToolTipText("Telemetry, RDF and packet frequency"); /* Radio Calibration */ @@ -311,7 +307,28 @@ public class AltosConfigTDUI } public void set_radio_frequency(double new_radio_frequency) { - radio_frequency_value.set_frequency(new_radio_frequency); + int i; + for (i = 0; i < radio_frequency_value.getItemCount(); i++) { + AltosFrequency f = (AltosFrequency) radio_frequency_value.getItemAt(i); + + if (f.close(new_radio_frequency)) { + radio_frequency_value.setSelectedIndex(i); + return; + } + } + for (i = 0; i < radio_frequency_value.getItemCount(); i++) { + AltosFrequency f = (AltosFrequency) radio_frequency_value.getItemAt(i); + + if (new_radio_frequency < f.frequency) + break; + } + String description = String.format("%s serial %s", + product_value.getText(), + serial_value.getText()); + AltosFrequency new_frequency = new AltosFrequency(new_radio_frequency, description); + AltosPreferences.add_common_frequency(new_frequency); + radio_frequency_value.insertItemAt(new_frequency, i); + radio_frequency_value.setSelectedIndex(i); } public double radio_frequency() { diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index de1b582e..91c37fd5 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -59,7 +59,7 @@ public class AltosConfigUI JComboBox main_deploy_value; JComboBox apogee_delay_value; JComboBox apogee_lockout_value; - AltosFreqList radio_frequency_value; + AltosUIFreqList radio_frequency_value; JTextField radio_calibration_value; JRadioButton radio_enable_value; JComboBox aprs_interval_value; @@ -432,12 +432,9 @@ public class AltosConfigUI c.anchor = GridBagConstraints.LINE_START; c.insets = ir; c.ipady = 5; - radio_frequency_value = new AltosFreqList(); + radio_frequency_value = new AltosUIFreqList(); radio_frequency_value.addItemListener(this); - - JMenuBar menu_bar = new JMenuBar(); - menu_bar.add(radio_frequency_value); - pane.add(menu_bar, c); + pane.add(radio_frequency_value, c); radio_frequency_value.setToolTipText("Telemetry, RDF and packet frequency"); row++; diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index 5aff1817..5db0ee92 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -169,18 +169,14 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { exit_on_close = true; } - Container bag; - - JMenuBar menu_bar; - AltosFreqList frequencies; - AltosUITelemetryMenu telemetries; + Container bag; + AltosUIFreqList frequencies; + AltosUITelemetryList telemetries; JLabel telemetry; ActionListener show_timer; public AltosFlightUI(AltosVoice in_voice, AltosFlightReader in_reader, final int serial) { - super(); - AltosUIPreferences.set_component(this); displays = new LinkedList(); @@ -197,12 +193,8 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { /* Stick channel selector at top of table for telemetry monitoring */ if (serial >= 0) { - - menu_bar = new JMenuBar(); - setJMenuBar(menu_bar); - - // Channel menu - frequencies = new AltosFreqList(AltosUIPreferences.frequency(serial)); + // Frequency menu + frequencies = new AltosUIFreqList(AltosUIPreferences.frequency(serial)); frequencies.set_product("Monitor"); frequencies.set_serial(serial); frequencies.addActionListener(new ActionListener() { @@ -216,19 +208,43 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { reader.save_frequency(); } }); - menu_bar.add (frequencies); - - // Telemetry format menu - if (reader.supports_telemetry(AltosLib.ao_telemetry_standard)) { - telemetries = new AltosUITelemetryMenu(serial); + c.gridx = 0; + c.gridy = 0; + c.weightx = 0; + c.weighty = 0; + c.insets = new Insets(3, 3, 3, 3); + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.WEST; + bag.add (frequencies, c); + + // Telemetry format list + if (reader.supports_telemetry(Altos.ao_telemetry_standard)) { + telemetries = new JComboBox(); + for (int i = 1; i <= Altos.ao_telemetry_max; i++) + telemetries.addItem(Altos.telemetry_name(i)); + int telemetry = AltosPreferences.telemetry(serial); + if (telemetry <= Altos.ao_telemetry_off || + telemetry > Altos.ao_telemetry_max) + telemetry = Altos.ao_telemetry_standard; + telemetries.setSelectedIndex(telemetry - 1); + telemetries.setMaximumRowCount(Altos.ao_telemetry_max); + telemetries.setPreferredSize(null); + telemetries.revalidate(); telemetries.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - int telemetry = telemetries.get_selected(); + int telemetry = telemetries.getSelectedIndex() + 1; reader.set_telemetry(telemetry); reader.save_telemetry(); } }); - menu_bar.add(telemetries); + c.gridx = 1; + c.gridy = 0; + c.weightx = 0; + c.weighty = 0; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.WEST; + bag.add (telemetries, c); + c.insets = new Insets(0, 0, 0, 0); } else { String version; @@ -240,7 +256,14 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { version = "Telemetry: None"; telemetry = new JLabel(version); - menu_bar.add(telemetry); + c.gridx = 1; + c.gridy = 0; + c.weightx = 0; + c.weighty = 0; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.WEST; + bag.add (telemetry, c); + c.insets = new Insets(0, 0, 0, 0); } } diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 63d86291..67b7a989 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -103,7 +103,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl } Container bag; - AltosFreqList frequencies; + AltosUIFreqList frequencies; JTextField callsign_value; /* DocumentListener interface methods */ @@ -200,7 +200,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl /* Stick frequency selector at top of table for telemetry monitoring */ if (remote && serial >= 0) { // Frequency menu - frequencies = new AltosFreqList(AltosUIPreferences.frequency(serial)); + frequencies = new AltosUIFreqList(AltosUIPreferences.frequency(serial)); frequencies.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double frequency = frequencies.frequency(); diff --git a/altosuilib/AltosFreqList.java b/altosuilib/AltosFreqList.java deleted file mode 100644 index 293ce032..00000000 --- a/altosuilib/AltosFreqList.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright © 2011 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.altosuilib_3; - -import java.util.*; -import javax.swing.*; -import java.awt.event.*; -import org.altusmetrum.altoslib_5.*; - -class FreqEntry extends JMenuItem { - AltosFrequency frequency; - - public FreqEntry(AltosFrequency frequency) { - super(frequency.toShortString()); - this.frequency = frequency; - } -} - -public class AltosFreqList extends JMenu implements ActionListener { - - String product; - int serial; - int calibrate; - - AltosFrequency[] frequencies = new AltosFrequency[0]; - - int selected = -1; - - LinkedList action_listeners = new LinkedList(); - - public void addActionListener(ActionListener listener) { - action_listeners.add(listener); - } - - public void removeActionListener(ActionListener listener) { - action_listeners.remove(listener); - } - - public void actionPerformed(ActionEvent ev) { - FreqEntry e = (FreqEntry) ev.getSource(); - set_selected(e.frequency); - ActionEvent event = new ActionEvent(e.frequency, 0, "selected"); - for (ActionListener l : action_listeners) - l.actionPerformed(event); - } - - boolean label = true; - - public void set_label(boolean label) { - this.label = label; - set_label(); - } - - private void set_label() { - String new_text = ""; - if (0 <= selected && selected < frequencies.length) { - AltosFrequency frequency = frequencies[selected]; - new_text = String.format("%s%7.3f MHz (%s) ▾", - label ? "Frequency: " : "", - frequency.frequency, - frequency.description); - } - setText(new_text); - } - - private void set_selected(AltosFrequency frequency) { - for (int i = 0; i < frequencies.length; i++) { - if (frequencies[i].frequency == frequency.frequency) { - selected = i; - set_label(); - } - } - } - - private AltosFrequency get_selected() { - if (0 <= selected && selected < frequencies.length) - return frequencies[selected]; - return null; - } - - private void add(AltosFrequency add) { - int insert; - - for (insert = 0; insert < frequencies.length; insert++) { - if (frequencies[insert].frequency == add.frequency) - return; - if (add.frequency < frequencies[insert].frequency) - break; - } - - AltosFrequency[] new_frequencies = new AltosFrequency[frequencies.length + 1]; - - for (int before = 0; before < insert; before++) - new_frequencies[before] = frequencies[before]; - new_frequencies[insert] = add; - - for (int after = insert; after < frequencies.length; after++) - new_frequencies[after+1] = frequencies[after]; - - frequencies = new_frequencies; - - FreqEntry e = new FreqEntry(add); - add(e, insert); - e.addActionListener(this); - } - - private void remove(AltosFrequency remove) { - int delete; - for (delete = 0; delete < frequencies.length; delete++) { - if (frequencies[delete].frequency == remove.frequency) - break; - if (remove.frequency < frequencies[delete].frequency) - return; - } - - remove(delete); - - AltosFrequency[] new_frequencies = new AltosFrequency[frequencies.length - 1]; - - for (int before = 0; before < delete; before++) - new_frequencies[before] = frequencies[before]; - - for (int after = delete + 1; after < frequencies.length; after++) - new_frequencies[after-1] = frequencies[after]; - frequencies = new_frequencies; - } - - public void set_frequency(double new_frequency) { - int i; - - if (new_frequency < 0) { - setVisible(false); - return; - } - - for (i = 0; i < frequencies.length; i++) { - AltosFrequency f = frequencies[i]; - - if (f.close(new_frequency)) { - set_selected(f); - return; - } - } - - String description = String.format("%s serial %d", product, serial); - AltosFrequency frequency = new AltosFrequency(new_frequency, description); - AltosUIPreferences.add_common_frequency(frequency); - - add(frequency); - set_selected(frequency); - } - - public void set_product(String new_product) { - product = new_product; - } - - public void set_serial(int new_serial) { - serial = new_serial; - } - - public double frequency() { - AltosFrequency f = get_selected(); - if (f != null) - return f.frequency; - return 434.550; - } - - public AltosFreqList(double in_frequency, boolean label) { - super(); - this.label = label; - - for (AltosFrequency frequency: AltosUIPreferences.common_frequencies()) - add(frequency); - product = "Unknown"; - serial = 0; - - if (in_frequency != 0) - set_frequency(in_frequency); - } - public AltosFreqList(double in_frequency) { - this(in_frequency, true); - } - - public AltosFreqList (boolean label) { - this(0, label); - } - - public AltosFreqList () { - this(0, true); - } -} diff --git a/altosuilib/AltosUIFreqList.java b/altosuilib/AltosUIFreqList.java new file mode 100644 index 00000000..f1f83dd5 --- /dev/null +++ b/altosuilib/AltosUIFreqList.java @@ -0,0 +1,85 @@ +/* + * Copyright © 2011 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.altosuilib_3; + +import javax.swing.*; +import org.altusmetrum.altoslib_5.*; + +public class AltosUIFreqList extends JComboBox { + + String product; + int serial; + int calibrate; + + public void set_frequency(double new_frequency) { + int i; + + if (new_frequency < 0) { + setVisible(false); + return; + } + + for (i = 0; i < getItemCount(); i++) { + AltosFrequency f = (AltosFrequency) getItemAt(i); + + if (f.close(new_frequency)) { + setSelectedIndex(i); + return; + } + } + for (i = 0; i < getItemCount(); i++) { + AltosFrequency f = (AltosFrequency) getItemAt(i); + + if (new_frequency < f.frequency) + break; + } + String description = String.format("%s serial %d", product, serial); + AltosFrequency frequency = new AltosFrequency(new_frequency, description); + AltosUIPreferences.add_common_frequency(frequency); + insertItemAt(frequency, i); + setMaximumRowCount(getItemCount()); + } + + public void set_product(String new_product) { + product = new_product; + } + + public void set_serial(int new_serial) { + serial = new_serial; + } + + public double frequency() { + AltosFrequency f = (AltosFrequency) getSelectedItem(); + if (f != null) + return f.frequency; + return 434.550; + } + + public AltosUIFreqList () { + super(AltosUIPreferences.common_frequencies()); + setMaximumRowCount(getItemCount()); + setEditable(false); + product = "Unknown"; + serial = 0; + } + + public AltosUIFreqList(double in_frequency) { + this(); + set_frequency(in_frequency); + } +} diff --git a/altosuilib/AltosUITelemetryList.java b/altosuilib/AltosUITelemetryList.java new file mode 100644 index 00000000..facfdcde --- /dev/null +++ b/altosuilib/AltosUITelemetryList.java @@ -0,0 +1,47 @@ +/* + * Copyright © 2014 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.altosuilib_3; + +import java.util.*; +import javax.swing.*; +import org.altusmetrum.altoslib_5.*; + + +public class AltosUITelemetryList extends JComboBox { + public int get_selected() { + return getSelectedIndex() + 1; + } + + public void set_selected(int telemetry) { + setSelectedIndex(telemetry-1); + } + + public AltosUITelemetryList(int serial) { + super(); + for (int i = AltosLib.ao_telemetry_min; i <= AltosLib.ao_telemetry_max; i++) + addItem(AltosLib.telemetry_name(i)); + + int telemetry = AltosPreferences.telemetry(serial); + if (telemetry < AltosLib.ao_telemetry_min || AltosLib.ao_telemetry_max < telemetry) + telemetry = AltosLib.ao_telemetry_standard; + setMaximumRowCount(AltosLib.ao_telemetry_max); + set_selected(telemetry); + revalidate(); + } +} + diff --git a/altosuilib/AltosUITelemetryMenu.java b/altosuilib/AltosUITelemetryMenu.java deleted file mode 100644 index 893c3c44..00000000 --- a/altosuilib/AltosUITelemetryMenu.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright © 2014 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.altosuilib_3; - -import java.util.*; -import javax.swing.*; -import java.awt.event.*; -import org.altusmetrum.altoslib_5.*; - -class TelemetryMenuItem extends JMenuItem { - public int telemetry; - - public TelemetryMenuItem (int telemetry) { - super(AltosLib.telemetry_name(telemetry)); - this.telemetry = telemetry; - } -} - -public class AltosUITelemetryMenu extends JMenu implements ActionListener { - TelemetryMenuItem selected = null; - - public int get_selected() { - if (selected == null) - return AltosLib.ao_telemetry_off; - return selected.telemetry; - } - - public void set_selected(int telemetry) { - for (int i = 0; i < getItemCount(); i++) { - TelemetryMenuItem item = (TelemetryMenuItem) getItem(i); - if (item.telemetry == telemetry) { - selected = item; - String new_text = String.format("Format: %s ▾", AltosLib.telemetry_name(telemetry)); - setText(new_text); - break; - } - } - } - - private LinkedList action_listeners = new LinkedList(); - - public void addActionListener(ActionListener l) { - action_listeners.add(l); - } - - public void removeActionListener(ActionListener l) { - action_listeners.remove(l); - } - - public void actionPerformed(ActionEvent e) { - TelemetryMenuItem item = (TelemetryMenuItem) e.getSource(); - set_selected(item.telemetry); - ActionEvent my_e = new ActionEvent(selected, 0, "selected"); - for (ActionListener l : action_listeners) - l.actionPerformed(my_e); - } - - public AltosUITelemetryMenu(int serial) { - super(); - for (int i = AltosLib.ao_telemetry_min; i <= AltosLib.ao_telemetry_max; i++) { - TelemetryMenuItem item = new TelemetryMenuItem(i); - - item.addActionListener(this); - add(item); - } - - int telemetry = AltosPreferences.telemetry(serial); - if (telemetry < AltosLib.ao_telemetry_min || AltosLib.ao_telemetry_max < telemetry) - telemetry = AltosLib.ao_telemetry_standard; - set_selected(telemetry); - } -} - diff --git a/altosuilib/Makefile.am b/altosuilib/Makefile.am index 56b01ec5..40e6dda5 100644 --- a/altosuilib/Makefile.am +++ b/altosuilib/Makefile.am @@ -36,7 +36,6 @@ altosuilib_JAVA = \ AltosVoice.java \ AltosDisplayThread.java \ AltosDeviceUIDialog.java \ - AltosFreqList.java \ AltosSerial.java \ AltosSerialInUseException.java \ AltosConfigFreqUI.java \ @@ -82,7 +81,8 @@ altosuilib_JAVA = \ AltosUIIndicator.java \ AltosUIUnitsIndicator.java \ AltosUIVoltageIndicator.java \ - AltosUITelemetryMenu.java \ + AltosUIFreqList.java \ + AltosUITelemetryList.java \ OSXAdapter.java JAR=altosuilib_$(ALTOSUILIB_VERSION).jar diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index e78c2124..7e5ff42a 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -58,7 +58,7 @@ public class TeleGPS JMenu file_menu; JMenu monitor_menu; JMenu device_menu; - AltosFreqList frequencies; + AltosUIFreqList frequencies; ActionListener frequency_listener; Container bag; @@ -351,18 +351,17 @@ public class TeleGPS frequencies.set_product("Monitor"); frequencies.set_serial(serial); frequencies.set_frequency(AltosUIPreferences.frequency(serial)); + frequencies.setEnabled(true); - menu_bar.add(frequencies); - menu_bar.repaint(); } void disable_frequency_menu() { - if (frequency_listener == null) - return; - frequencies.removeActionListener(frequency_listener); - menu_bar.remove(frequencies); - menu_bar.repaint(); - frequency_listener = null; + if (frequency_listener != null) { + frequencies.removeActionListener(frequency_listener); + frequencies.setEnabled(false); + frequency_listener = null; + } + } public void set_reader(AltosFlightReader reader, AltosDevice device) { @@ -457,7 +456,16 @@ public class TeleGPS file_menu = make_menu("File", file_menu_entries); monitor_menu = make_menu("Monitor", monitor_menu_entries); device_menu = make_menu("Device", device_menu_entries); - frequencies = new AltosFreqList(); + + frequencies = new AltosUIFreqList(); + frequencies.setEnabled(false); + c.gridx = 0; + c.gridy = 0; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.WEST; + c.weightx = 0; + c.gridwidth = 1; + bag.add(frequencies, c); displays = new LinkedList(); diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index ee2fbd2d..e5ac6d7e 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -50,7 +50,7 @@ public class TeleGPSConfigUI JLabel product_value; JLabel version_value; JLabel serial_value; - AltosFreqList radio_frequency_value; + AltosUIFreqList radio_frequency_value; JTextField radio_calibration_value; JRadioButton radio_enable_value; JComboBox aprs_interval_value; @@ -270,13 +270,9 @@ public class TeleGPSConfigUI c.anchor = GridBagConstraints.LINE_START; c.insets = ir; c.ipady = 5; - radio_frequency_value = new AltosFreqList(); + radio_frequency_value = new AltosUIFreqList(); radio_frequency_value.addItemListener(this); - - JMenuBar menu_bar = new JMenuBar(); - menu_bar.add(radio_frequency_value); - - pane.add(menu_bar, c); + pane.add(radio_frequency_value, c); radio_frequency_value.setToolTipText("Telemetry, RDF and packet frequency"); row++; -- cgit v1.2.3 From f02cc3eec53e9d703837dad55ec2e6625b192588 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 5 Jul 2014 00:16:57 -0700 Subject: telegps: Support variable telemetry rate Add combo box to monitoring window and device configuration. Signed-off-by: Keith Packard --- telegps/TeleGPS.java | 51 +++++++++++++++++++++++++++++++++++++++++++- telegps/TeleGPSConfigUI.java | 42 ++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index 7e5ff42a..d4b7bacf 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -60,6 +60,8 @@ public class TeleGPS JMenu device_menu; AltosUIFreqList frequencies; ActionListener frequency_listener; + AltosUIRateList rates; + ActionListener rate_listener; Container bag; @@ -184,6 +186,7 @@ public class TeleGPS telegps_status.disable_receive(); disable_frequency_menu(); + disable_rate_menu(); } void connect(AltosDevice device) { @@ -364,6 +367,40 @@ public class TeleGPS } + void enable_rate_menu(int serial, final AltosFlightReader reader) { + + if (rate_listener != null) + disable_rate_menu(); + + rate_listener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + int rate = rates.rate(); + try { + System.out.printf("set rate %d\n", rate); + reader.set_telemetry_rate(rate); + } catch (TimeoutException te) { + } catch (InterruptedException ie) { + } + reader.save_telemetry_rate(); + } + }; + + rates.addActionListener(rate_listener); + rates.set_product("Monitor"); + rates.set_serial(serial); + rates.set_rate(AltosUIPreferences.telemetry_rate(serial)); + rates.setEnabled(reader.supports_telemetry_rate(AltosLib.ao_telemetry_rate_2400)); + } + + void disable_rate_menu() { + if (rate_listener != null) { + rates.removeActionListener(rate_listener); + rates.setEnabled(false); + rate_listener = null; + } + + } + public void set_reader(AltosFlightReader reader, AltosDevice device) { status_update = new TeleGPSStatusUpdate(telegps_status); @@ -374,8 +411,10 @@ public class TeleGPS thread = new TeleGPSDisplayThread(this, voice(), this, reader); thread.start(); - if (device != null) + if (device != null) { enable_frequency_menu(device.getSerial(), reader); + enable_rate_menu(device.getSerial(), reader); + } } static int number_of_windows; @@ -467,6 +506,16 @@ public class TeleGPS c.gridwidth = 1; bag.add(frequencies, c); + rates = new AltosUIRateList(); + rates.setEnabled(false); + c.gridx = 1; + c.gridy = 0; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.WEST; + c.weightx = 0; + c.gridwidth = 1; + bag.add(rates, c); + displays = new LinkedList(); int serial = -1; diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index e5ac6d7e..2bd1d2df 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -37,6 +37,7 @@ public class TeleGPSConfigUI JLabel radio_calibration_label; JLabel radio_frequency_label; JLabel radio_enable_label; + JLabel rate_label; JLabel aprs_interval_label; JLabel aprs_ssid_label; JLabel flight_log_max_label; @@ -53,6 +54,7 @@ public class TeleGPSConfigUI AltosUIFreqList radio_frequency_value; JTextField radio_calibration_value; JRadioButton radio_enable_value; + AltosUIRateList rate_value; JComboBox aprs_interval_value; JComboBox aprs_ssid_value; JComboBox flight_log_max_value; @@ -147,6 +149,13 @@ public class TeleGPSConfigUI radio_enable_value.setToolTipText("Firmware version does not support disabling radio"); } + void set_rate_tool_tip() { + if (rate_value.isEnabled()) + 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()) aprs_interval_value.setToolTipText("Enable APRS and set the interval between APRS reports"); @@ -326,6 +335,31 @@ public class TeleGPSConfigUI set_radio_enable_tool_tip(); row++; + /* Telemetry Rate */ + 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; + rate_label = new JLabel("Telemetry baud rate:"); + pane.add(radio_enable_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; + rate_value = new AltosUIRateList(); + rate_value.addItemListener(this); + pane.add(rate_value, c); + set_rate_tool_tip(); + row++; + /* APRS interval */ c = new GridBagConstraints(); c.gridx = 0; c.gridy = row; @@ -703,6 +737,14 @@ public class TeleGPSConfigUI return -1; } + public void set_telemetry_rate(int new_rate) { + rate_value.set_rate(new_rate); + } + + public int telemetry_rate() { + return rate_value.rate(); + } + public void set_callsign(String new_callsign) { callsign_value.setVisible(new_callsign != null); callsign_value.setText(new_callsign); -- cgit v1.2.3 From fa155693282746861b227afd6cbccc83dfd1bbed Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 10 Jul 2014 21:27:30 -0700 Subject: telegps: Missing function in TeleGPSConfigUI set_altitude_32 was added to the abstract class but not here. Signed-off-by: Keith Packard --- telegps/TeleGPSConfigUI.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'telegps/TeleGPSConfigUI.java') diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 2bd1d2df..7a59bf48 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -670,6 +670,9 @@ public class TeleGPSConfigUI serial_value.setText(String.format("%d", serial)); } + public void set_altitude_32(int altitude_32) { + } + public void set_main_deploy(int new_main_deploy) { } -- cgit v1.2.3