altosui: Add APRS interval configuration to UI
authorKeith Packard <keithp@keithp.com>
Sat, 8 Dec 2012 01:35:15 +0000 (17:35 -0800)
committerKeith Packard <keithp@keithp.com>
Sat, 8 Dec 2012 01:35:15 +0000 (17:35 -0800)
Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosConfigData.java
altoslib/AltosConfigValues.java
altosui/AltosConfigUI.java

index 515ff480e705a41452040e86bd4514fa97f9f6e2..f940b150710a8743d6e64bd9f44ab417bdb66462 100644 (file)
@@ -67,6 +67,9 @@ public class AltosConfigData implements Iterable<String> {
        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<String> {
                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<String> {
                        } 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<String> {
                /* 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<String> {
                        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<String> {
                        }
                }
 
+               /* 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<String> {
                }
        }
 
-}
\ No newline at end of file
+}
index 69239f2115e9cf6545b43db3cb301c3e7a6d41f2..40d5217e84100fe9ec85390c6f3b4e1b3883d771 100644 (file)
@@ -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);
 }
index 2c3435c18a47494834663d00c1626c9041399dc8..95780e2b26a0484272728a0875a39da0aea1e3a8 100644 (file)
@@ -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);
+       }
 }