summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altoslib/AltosConfigData.java18
-rw-r--r--altoslib/AltosConfigValues.java4
-rw-r--r--altosui/AltosConfigUI.java64
3 files changed, 84 insertions, 2 deletions
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<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
+}
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);
+ }
}