diff options
Diffstat (limited to 'micropeak')
| -rw-r--r-- | micropeak/Makefile.am | 1 | ||||
| -rw-r--r-- | micropeak/MicroDownload.java | 96 | ||||
| -rw-r--r-- | micropeak/MicroSerial.java | 8 | ||||
| -rw-r--r-- | micropeak/MicroSerialLog.java | 28 | 
4 files changed, 110 insertions, 23 deletions
| diff --git a/micropeak/Makefile.am b/micropeak/Makefile.am index 33b1420a..1a614cbd 100644 --- a/micropeak/Makefile.am +++ b/micropeak/Makefile.am @@ -23,6 +23,7 @@ micropeak_JAVA= \  	MicroRaw.java \  	MicroSave.java \  	MicroSerial.java \ +	MicroSerialLog.java \  	MicroStats.java \  	MicroStatsTable.java \  	MicroFileChooser.java \ diff --git a/micropeak/MicroDownload.java b/micropeak/MicroDownload.java index ec76824d..cd109b79 100644 --- a/micropeak/MicroDownload.java +++ b/micropeak/MicroDownload.java @@ -26,17 +26,21 @@ import java.util.*;  import org.altusmetrum.altoslib_3.*;  import org.altusmetrum.altosuilib_1.*; -public class MicroDownload extends AltosUIDialog implements Runnable, ActionListener { +public class MicroDownload extends AltosUIDialog implements Runnable, ActionListener, MicroSerialLog {  	MicroPeak	owner;  	Container	pane;  	AltosDevice	device;  	JButton		cancel;  	MicroData	data;  	MicroSerial	serial; +	LinkedList<Integer> log_queue = new LinkedList<Integer>(); +	Runnable	log_run; +	JTextArea	serial_log; +	JLabel		status_value;  	private void done_internal() { -		setVisible(false);  		if (data != null) { +			status_value.setText("Received MicroPeak Data");  			if (data.crc_valid) {  				owner = owner.SetData(data);  				MicroSave save = new MicroSave(owner, data); @@ -48,8 +52,43 @@ public class MicroDownload extends AltosUIDialog implements Runnable, ActionList  							      "Download Failed",  							      JOptionPane.ERROR_MESSAGE);  			} +			setVisible(false); +			dispose(); +		} else { +			status_value.setText("Download Failed"); +		} +	} + +	public void drain_queue() { +		for (;;) { +			int	c; +			synchronized(this) { +				if (log_queue.isEmpty()) { +					log_run = null; +					break; +				} +				c = log_queue.remove(); +			} +			if (c == '\r') +				continue; +			byte[] bytes = new byte[1]; +			bytes[0] = (byte) c; +			serial_log.append(new String(bytes, AltosLib.unicode_set)); +		} +	} + +	public void log_char(int c) { +		synchronized(this) { +			log_queue.add(c); +			if (log_run == null) { +				log_run = new Runnable() { +						public void run() { +							drain_queue(); +						} +					}; +				SwingUtilities.invokeLater(log_run); +			}  		} -		dispose();  	}  	public void done() { @@ -80,6 +119,7 @@ public class MicroDownload extends AltosUIDialog implements Runnable, ActionList  	public void start() {  		try {  			serial = new MicroSerial(device); +			serial.set_log(this);  		} catch (FileNotFoundException fe) {  			return;  		} @@ -120,7 +160,7 @@ public class MicroDownload extends AltosUIDialog implements Runnable, ActionList  		c = new GridBagConstraints();  		c.gridx = 1; c.gridy = y; -		c.fill = GridBagConstraints.HORIZONTAL; +		c.fill = GridBagConstraints.NONE;  		c.weightx = 1;  		c.anchor = GridBagConstraints.LINE_START;  		c.insets = ir; @@ -135,39 +175,49 @@ public class MicroDownload extends AltosUIDialog implements Runnable, ActionList  		c.weightx = 1;  		c.anchor = GridBagConstraints.LINE_START;  		c.insets = ir; -		JTextArea help_text = new JTextArea( - -			"Locate the photo transistor on the MicroPeak USB adapter\n" + -			"and place the LED on the MicroPeak directly in contact\n" + -			"with it.\n" + -			"\n" + -			"The MicroPeak LED and the MicroPeak USB adapter\n" + -			"photo need to be touching—even a millimeters of space\n" + -			"between them will reduce the light intensity from the LED\n" + -			"enough that the phototransistor will not sense it.\n" + -			"\n" + -			"Turn on the MicroPeak board and adjust the position until\n" + -			"the blue LED on the MicroPeak USB adapter blinks in time\n" + -			"with the orange LED on the MicroPeak board."); +		JLabel help_text = new JLabel( +			"<html><i>Turn on the MicroPeak and place the LED inside the<br>" + +			"opening in the top of the MicroPeak USB adapter.<br>" + +			"Verify that the blue LED in the side of the USB adapter<br>" + +			"is blinking along with the orange LED on the MicroPeak.</i></html>"); +//		help_text.setEditable(false);  		pane.add(help_text, c);  		y++;  		c = new GridBagConstraints();  		c.gridx = 0; c.gridy = y; -		c.gridwidth = 1; +		c.gridwidth = 2;  		c.fill = GridBagConstraints.HORIZONTAL;  		c.weightx = 1;  		c.anchor = GridBagConstraints.LINE_START;  		c.insets = ir; -		JLabel waiting_value = new JLabel("Waiting for MicroPeak data..."); -		pane.add(waiting_value, c); +		status_value = new JLabel("Waiting for MicroPeak data..."); +		pane.add(status_value, c); +		y++; + +		serial_log = new JTextArea(10, 20); +		serial_log.setEditable(false); + +		JScrollPane serial_scroll = new JScrollPane(serial_log); +		serial_scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + +		c = new GridBagConstraints(); +		c.gridx = 0; c.gridy = y; +		c.gridwidth = GridBagConstraints.REMAINDER; +		c.fill = GridBagConstraints.HORIZONTAL; +		c.weightx = 1; +		c.anchor = GridBagConstraints.LINE_START; +		c.insets = ir; + +		pane.add(serial_scroll, c); +		y++;  		cancel = new JButton("Cancel");  		c = new GridBagConstraints();  		c.fill = GridBagConstraints.NONE; -		c.anchor = GridBagConstraints.CENTER; -		c.gridx = 1; c.gridy = y; +		c.anchor = GridBagConstraints.EAST; +		c.gridx = 0; c.gridy = y;  		c.gridwidth = GridBagConstraints.REMAINDER;  		Insets ic = new Insets(4,4,4,4);  		c.insets = ic; diff --git a/micropeak/MicroSerial.java b/micropeak/MicroSerial.java index 376223f1..39f421ec 100644 --- a/micropeak/MicroSerial.java +++ b/micropeak/MicroSerial.java @@ -24,6 +24,7 @@ import org.altusmetrum.altosuilib_1.*;  public class MicroSerial extends InputStream {  	SWIGTYPE_p_altos_file	file; +	private MicroSerialLog	log;  	public int read() {  		int	c = libaltos.altos_getchar(file, 0); @@ -33,6 +34,8 @@ public class MicroSerial extends InputStream {  			return -1;  		if (AltosUIPreferences.serial_debug)  			System.out.printf("%c", c); +		if (log != null) +			log.log_char(c);  		return c;  	} @@ -43,8 +46,13 @@ public class MicroSerial extends InputStream {  		}  	} +	public void set_log(MicroSerialLog log) { +		this.log = log; +	} +  	public MicroSerial(AltosDevice device) throws FileNotFoundException {  		file = device.open(); +		log = null;  		if (file == null) {  			final String message = device.getErrorString();  			throw new FileNotFoundException(String.format("%s (%s)", diff --git a/micropeak/MicroSerialLog.java b/micropeak/MicroSerialLog.java new file mode 100644 index 00000000..0a5a0b91 --- /dev/null +++ b/micropeak/MicroSerialLog.java @@ -0,0 +1,28 @@ +/* + * Copyright © 2014 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; version 2 of the License. + * + * 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., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.micropeak; + +import java.util.*; +import java.io.*; +import libaltosJNI.*; +import org.altusmetrum.altosuilib_1.*; + +public interface MicroSerialLog { + +	public void log_char(int c); +} | 
