From: Keith Packard Date: Fri, 2 May 2014 20:53:08 +0000 (-0700) Subject: altosui: Add configuration UI for beeper tone X-Git-Tag: 1.3.2.2~126 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=2dfc4bc92b11252f17103f28198a702a3fdc2b2d altosui: Add configuration UI for beeper tone Signed-off-by: Keith Packard --- 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 { /* 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 { aprs_interval = -1; + beep = -1; + storage_size = -1; storage_erase_unit = -1; stored_flight = 0; @@ -286,6 +291,9 @@ public class AltosConfigData implements Iterable { /* 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 { 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 { 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 { 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);