diff options
| -rw-r--r-- | altoslib/AltosConfigData.java | 18 | ||||
| -rw-r--r-- | altoslib/AltosConfigValues.java | 4 | ||||
| -rw-r--r-- | altoslib/AltosConvert.java | 12 | ||||
| -rw-r--r-- | altosui/AltosConfigUI.java | 62 | 
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); | 
