summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altoslib/AltosConfigData.java18
-rw-r--r--altoslib/AltosConfigValues.java4
-rw-r--r--altoslib/AltosConvert.java12
-rw-r--r--altosui/AltosConfigUI.java62
4 files changed, 96 insertions, 0 deletions
diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java
index edaf4601..750faa71 100644
--- a/altoslib/AltosConfigData.java
+++ b/altoslib/AltosConfigData.java
@@ -70,6 +70,9 @@ public class AltosConfigData implements Iterable<String> {
/* HAS_APRS */
public int aprs_interval;
+ /* HAS_BEEP */
+ public int beep;
+
/* Storage info replies */
public int storage_size;
public int storage_erase_unit;
@@ -210,6 +213,8 @@ public class AltosConfigData implements Iterable<String> {
aprs_interval = -1;
+ beep = -1;
+
storage_size = -1;
storage_erase_unit = -1;
stored_flight = 0;
@@ -286,6 +291,9 @@ public class AltosConfigData implements Iterable<String> {
/* HAS_APRS */
try { aprs_interval = get_int(line, "APRS interval:"); } catch (Exception e) {}
+ /* HAS_BEEP */
+ try { beep = get_int(line, "Beeper setting:"); System.out.printf ("beeper now %d\n", beep); } 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) {}
@@ -409,8 +417,13 @@ public class AltosConfigData implements Iterable<String> {
if (npyro > 0)
pyros = source.pyros();
+ /* HAS_APRS */
if (aprs_interval >= 0)
aprs_interval = source.aprs_interval();
+
+ /* HAS_BEEP */
+ if (beep >= 0)
+ beep = source.beep();
}
public void set_values(AltosConfigValues dest) {
@@ -449,6 +462,7 @@ public class AltosConfigData implements Iterable<String> {
else
dest.set_pyros(null);
dest.set_aprs_interval(aprs_interval);
+ dest.set_beep(beep);
}
public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException {
@@ -515,6 +529,10 @@ public class AltosConfigData implements Iterable<String> {
if (aprs_interval >= 0)
link.printf("c A %d\n", aprs_interval);
+ /* HAS_BEEP */
+ if (beep >= 0)
+ link.printf("c b %d\n", beep);
+
link.printf("c w\n");
link.flush_output();
}
diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java
index 4aa55d6a..1a9fddbf 100644
--- a/altoslib/AltosConfigValues.java
+++ b/altoslib/AltosConfigValues.java
@@ -76,4 +76,8 @@ public interface AltosConfigValues {
public abstract int aprs_interval();
public abstract void set_aprs_interval(int new_aprs_interval);
+
+ public abstract int beep();
+
+ public abstract void set_beep(int new_beep);
}
diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java
index 35923ec3..4ed45c68 100644
--- a/altoslib/AltosConvert.java
+++ b/altoslib/AltosConvert.java
@@ -359,4 +359,16 @@ public class AltosConvert {
csum += data[i + start];
return csum & 0xff;
}
+
+ public static double beep_value_to_freq(int value) {
+ if (value == 0)
+ return 4000;
+ return 1.0/2.0 * (24.0e6/32.0) / (double) value;
+ }
+
+ public static int beep_freq_to_value(double freq) {
+ if (freq == 0)
+ return 94;
+ return (int) Math.floor (1.0/2.0 * (24.0e6/32.0) / freq + 0.5);
+ }
}
diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java
index 656b0b6f..0a5291ea 100644
--- a/altosui/AltosConfigUI.java
+++ b/altosui/AltosConfigUI.java
@@ -45,6 +45,7 @@ public class AltosConfigUI
JLabel ignite_mode_label;
JLabel pad_orientation_label;
JLabel callsign_label;
+ JLabel beep_label;
public boolean dirty;
@@ -63,6 +64,7 @@ public class AltosConfigUI
JComboBox ignite_mode_value;
JComboBox pad_orientation_value;
JTextField callsign_value;
+ JComboBox beep_value;
JButton pyro;
@@ -112,6 +114,12 @@ public class AltosConfigUI
"10"
};
+ static String[] beep_values = {
+ "3750",
+ "4000",
+ "4250",
+ };
+
static String[] pad_orientation_values = {
"Antenna Up",
"Antenna Down",
@@ -204,6 +212,13 @@ public class AltosConfigUI
}
}
+ void set_beep_tool_tip() {
+ if (beep_value.isEnabled())
+ 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) {
super (in_owner, "Configure Flight Computer", false);
@@ -569,6 +584,32 @@ public class AltosConfigUI
set_pad_orientation_tool_tip();
row++;
+ /* Beeper */
+ 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;
+ beep_label = new JLabel("Beeper Frequency:");
+ pane.add(beep_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;
+ beep_value = new JComboBox(beep_values);
+ beep_value.setEditable(true);
+ beep_value.addItemListener(this);
+ pane.add(beep_value, c);
+ set_beep_tool_tip();
+ row++;
+
/* Pyro channels */
c = new GridBagConstraints();
c.gridx = 4; c.gridy = row;
@@ -908,6 +949,27 @@ public class AltosConfigUI
return -1;
}
+ public void set_beep(int new_beep) {
+ int new_freq = (int) Math.floor (AltosConvert.beep_value_to_freq(new_beep) + 0.5);
+ System.out.printf("set_beep %d %d\n", new_beep, new_freq);
+ 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);
+ set_beep_tool_tip();
+ }
+
+ public int beep() {
+ if (beep_value.isEnabled())
+ return AltosConvert.beep_freq_to_value(Integer.parseInt(beep_value.getSelectedItem().toString()));
+ else
+ return -1;
+ }
+
public void set_pyros(AltosPyro[] new_pyros) {
pyros = new_pyros;
pyro.setVisible(pyros != null);