diff options
Diffstat (limited to 'altosuilib/AltosUIAccelCal.java')
| -rw-r--r-- | altosuilib/AltosUIAccelCal.java | 243 | 
1 files changed, 243 insertions, 0 deletions
diff --git a/altosuilib/AltosUIAccelCal.java b/altosuilib/AltosUIAccelCal.java new file mode 100644 index 00000000..ea1869d0 --- /dev/null +++ b/altosuilib/AltosUIAccelCal.java @@ -0,0 +1,243 @@ +/* + * Copyright © 2017 Keith Packard <keithp@keithp.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.altusmetrum.altosuilib_12; + +import java.awt.*; +import java.awt.event.*; +import java.beans.*; +import javax.swing.*; +import javax.swing.event.*; +import org.altusmetrum.altoslib_12.*; + +public class AltosUIAccelCal +	extends AltosUIDialog +	implements AltosAccelCalListener, ActionListener +{ +	Frame owner; +	AltosLink link; +	AltosAccelCal cal; +	AltosConfigValues	config_values; +	Thread thread; +	Container pane; +	JTextField message; +	JButton	antenna_up; +	JButton	antenna_down; +	JButton	ok; +	JButton cancel; +	boolean success; +	int accel_plus, accel_minus; + +	private void make_visible() { +		System.out.printf("Make calibration dialog visible\n"); +		pack(); +		cal.start(); +		setVisible(true); +	} + +	public boolean doit() { +		success = false; +		make_visible(); +		return success; +	} + +	public int accel_cal_plus() { +		if (success) +			return accel_plus; +		return AltosLib.MISSING; +	} + +	public int accel_cal_minus() { +		if (success) +			return accel_minus; +		return AltosLib.MISSING; +	} + +	/* AltosAccelCalListener interface */ +	public void set_thread(AltosAccelCal cal, Thread thread) { +		this.thread = thread; +	} + +	public void set_phase(AltosAccelCal cal, final int phase) { +		SwingUtilities.invokeLater(new Runnable() { +				public void run() { +					switch (phase) { +					case AltosAccelCal.phase_antenna_up: +						message.setText("Orient antenna upwards and click on Antenna Up"); +						antenna_up.setEnabled(true); +						antenna_down.setEnabled(false); +						ok.setEnabled(false); +						break; +					case AltosAccelCal.phase_antenna_down: +						message.setText("Orient antenna downwards and click on Antenna Down"); +						antenna_up.setEnabled(false); +						antenna_down.setEnabled(true); +						ok.setEnabled(false); +						break; +					} +				} +			}); +	} + +	public void cal_done(AltosAccelCal cal, int plus, int minus) { +		accel_plus = plus; +		accel_minus = minus; +		success = true; +		SwingUtilities.invokeLater(new Runnable() { +				public void run() { +					message.setText(String.format("Calibration succeeded, plus %d minus %d, press OK to continue", accel_plus, accel_minus)); +					antenna_up.setEnabled(false); +					antenna_down.setEnabled(false); +					ok.setEnabled(true); +				} +			}); +	} + +	public void message(AltosAccelCal cal, final String msg) { +		SwingUtilities.invokeLater(new Runnable() { +				public void run() { +					message.setText(msg); +				} +			}); +	} + +	public void error(AltosAccelCal cal, String msg) { +		message(cal, msg); +	} + +	/* ActionListener interface */ +	public void actionPerformed(ActionEvent e) { +		String	cmd = e.getActionCommand(); + +		if ("up".equals(cmd)) { +			cal.signal(true); +			antenna_up.setEnabled(false); +		} else if ("down".equals(cmd)) { +			cal.signal(true); +			antenna_down.setEnabled(false); +		} else if ("ok".equals(cmd)) { +			cal.signal(true); +			this.setVisible(false); +			if (success) { +				System.out.printf("set accel cal to %d/%d\n", accel_plus, accel_minus); +				config_values.set_accel_cal(accel_plus, accel_minus); +				config_values.set_dirty(); +			} +			try { +				cal.abort(); +			} catch (InterruptedException ie) { +			} +		} else if ("cancel".equals(cmd)) { +			cal.signal(false); +			this.setVisible(false); +			try { +				cal.abort(); +			} catch (InterruptedException ie) { +			} +		} +	} +	public AltosUIAccelCal(Frame owner, AltosLink link, AltosConfigValues config_values) { +		super(owner, "Calibrate Accelerometer", true); + +		this.owner = owner; +		this.link = link; +		this.config_values = config_values; + +		pane = getContentPane(); +		pane.setLayout(new GridBagLayout()); + +		GridBagConstraints c = new GridBagConstraints(); +		c.insets = new Insets(4,4,4,4); + +		int x = 0; +		int y = 0; +		c.fill = GridBagConstraints.HORIZONTAL; +		c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridy = y; +		c.gridwidth = 4; +		c.gridheight = 1; +		c.weightx = 0; +		c.weighty = 0; +		message = new JTextField(64); +		pane.add(message, c); + +		y++; x = 0; + +		c.fill = GridBagConstraints.NONE; +		c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridy = y; +		c.gridwidth = 1; +		c.gridheight = 1; +		c.weightx = 0; +		c.weighty = 0; +		antenna_up = new JButton("Antenna Up"); +		antenna_up.setActionCommand("up"); +		antenna_up.setEnabled(false); +		antenna_up.addActionListener(this); +		pane.add(antenna_up, c); + +		x++; +		c.fill = GridBagConstraints.NONE; +		c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridy = y; +		c.gridwidth = 1; +		c.gridheight = 1; +		c.weightx = 0; +		c.weighty = 0; +		antenna_down = new JButton("Antenna Down"); +		antenna_down.setActionCommand("down"); +		antenna_down.setEnabled(false); +		antenna_down.addActionListener(this); +		pane.add(antenna_down, c); + +		x++; +		c.fill = GridBagConstraints.NONE; +		c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridy = y; +		c.gridwidth = 1; +		c.gridheight = 1; +		c.weightx = 0; +		c.weighty = 0; +		ok = new JButton("OK"); +		ok.setActionCommand("ok"); +		ok.setEnabled(false); +		ok.addActionListener(this); +		pane.add(ok, c); + +		x++; +		c.fill = GridBagConstraints.NONE; +		c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridy = y; +		c.gridwidth = 1; +		c.gridheight = 1; +		c.weightx = 0; +		c.weighty = 0; +		cancel = new JButton("Cancel"); +		cancel.setActionCommand("cancel"); +		cancel.setEnabled(true); +		cancel.addActionListener(this); +		pane.add(cancel, c); + +		cal = new AltosAccelCal(this.link, this); +	} +}  | 
