diff options
| author | Keith Packard <keithp@keithp.com> | 2014-10-30 21:59:45 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-10-30 21:59:45 -0700 | 
| commit | b0e903a76276e33f531eade42ac721c9490c6758 (patch) | |
| tree | afdb7cb33056227b57f738ce4c18c2cf6ad011e1 | |
| parent | ef00182c79bd7a56fbc5d782cb8f4aa0079bb86f (diff) | |
altosui: Pop up 'Connecting' dialog during Monitor Idle
This was a bit harder than expected as I had to wire up a way to shut
down the whole monitor idle window when you clicked on the cancel button.
Signed-off-by: Keith Packard <keithp@keithp.com>
| -rw-r--r-- | altoslib/AltosIdleMonitor.java | 32 | ||||
| -rw-r--r-- | altoslib/AltosIdleMonitorListener.java | 3 | ||||
| -rw-r--r-- | altoslib/AltosLib.java | 1 | ||||
| -rw-r--r-- | altoslib/AltosLink.java | 8 | ||||
| -rw-r--r-- | altosui/AltosIdleMonitorUI.java | 36 | 
5 files changed, 46 insertions, 34 deletions
diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index 85bcff10..57c77c47 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -35,20 +35,6 @@ public class AltosIdleMonitor extends Thread {  	AltosConfigData		config_data;  	AltosGPS		gps; -	int AltosRSSI() throws TimeoutException, InterruptedException { -		link.printf("s\n"); -		String line = link.get_reply_no_dialog(5000); -		if (line == null) -			throw new TimeoutException(); -		String[] items = line.split("\\s+"); -		if (items.length < 2) -			return 0; -		if (!items[0].equals("RSSI:")) -			return 0; -		int rssi = Integer.parseInt(items[1]); -		return rssi; -	} -  	void start_link() throws InterruptedException, TimeoutException {  		if (remote) {  			link.set_radio_frequency(frequency); @@ -58,26 +44,30 @@ public class AltosIdleMonitor extends Thread {  			link.flush_input();  	} -	void stop_link() throws InterruptedException, TimeoutException { +	boolean stop_link() throws InterruptedException, TimeoutException {  		if (remote)  			link.stop_remote(); +		return link.reply_abort;  	} -	void update_state(AltosState state) throws InterruptedException, TimeoutException { +	boolean update_state(AltosState state) throws InterruptedException, TimeoutException {  		boolean		worked = false; +		boolean		aborted = false;  		try {  			start_link();  			fetch.update_state(state); -			worked = true; +			if (!link.has_error && !link.reply_abort) +				worked = true;  		} finally { -			stop_link(); +			aborted = stop_link();  			if (worked) {  				if (remote)  					state.set_rssi(link.rssi(), 0);  				listener_state.battery = link.monitor_battery();  			}  		} +		return aborted;  	}  	public void set_frequency(double in_frequency) { @@ -102,13 +92,17 @@ public class AltosIdleMonitor extends Thread {  	public void run() {  		AltosState state = new AltosState();  		try { -			while (!link.has_error) { +			for (;;) {  				try {  					link.config_data();  					update_state(state);  					listener.update(state, listener_state);  				} catch (TimeoutException te) {  				} +				if (link.has_error || link.reply_abort) { +					listener.failed(); +					break; +				}  				Thread.sleep(1000);  			}  		} catch (InterruptedException ie) { diff --git a/altoslib/AltosIdleMonitorListener.java b/altoslib/AltosIdleMonitorListener.java index 4382430c..36484763 100644 --- a/altoslib/AltosIdleMonitorListener.java +++ b/altoslib/AltosIdleMonitorListener.java @@ -19,4 +19,5 @@ package org.altusmetrum.altoslib_5;  public interface AltosIdleMonitorListener {  	public void update(AltosState state, AltosListenerState listener_state); -}
\ No newline at end of file +	public void failed(); +} diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 0edc0b43..be69519b 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -188,6 +188,7 @@ public class AltosLib {  	};  	public static final String launch_sites_url = "http://www.altusmetrum.org/AltOS/launch-sites.txt"; +//	public static final String launch_sites_url = "file:///home/keithp/misc/text/altusmetrum/AltOS/launch-sites.txt";  	public static final int ao_telemetry_standard_len = 32;  	public static final int ao_telemetry_0_9_len = 95; diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index c0031cad..639d2ac7 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -427,8 +427,10 @@ public abstract class AltosLink implements Runnable {  	public void set_callsign(String callsign) {  		this.callsign = callsign; -		printf ("c c %s\n", callsign); -		flush_output(); +		if (callsign != null) { +			printf ("c c %s\n", callsign); +			flush_output(); +		}  	}  	public boolean is_loader() throws InterruptedException { @@ -467,7 +469,7 @@ public abstract class AltosLink implements Runnable {  		if (telemetry_rate < 0)  			telemetry_rate = AltosPreferences.telemetry_rate(serial);  		set_telemetry_rate(telemetry_rate); -		if (callsign.equals("")) +		if (callsign == null || callsign.equals(""))  			callsign = AltosPreferences.callsign();  		set_callsign(callsign);  		printf("p\nE 0\n"); diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 67b7a989..0230ff2f 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -102,6 +102,15 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl  		SwingUtilities.invokeLater(r);  	} +	public void failed() { +		Runnable r = new Runnable() { +				public void run() { +					close(); +				} +			}; +		SwingUtilities.invokeLater(r); +	} +  	Container	bag;  	AltosUIFreqList	frequencies;  	JTextField	callsign_value; @@ -174,6 +183,19 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl  		}  	} +	private void close() { +		try { +			disconnect(); +		} catch (Exception ex) { +			System.out.printf("Exception %s\n", ex.toString()); +			for (StackTraceElement el : ex.getStackTrace()) +				System.out.printf("%s\n", el.toString()); +		} +		setVisible(false); +		dispose(); +		AltosUIPreferences.unregister_font_listener(AltosIdleMonitorUI.this); +	} +  	public AltosIdleMonitorUI(JFrame in_owner)  		throws FileNotFoundException, TimeoutException, InterruptedException { @@ -184,9 +206,10 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl  		serial = device.getSerial(); -		AltosLink link; +		AltosSerial link;  		try {  			link = new AltosSerial(device); +			link.set_frame(this);  		} catch (Exception ex) {  			idle_exception(in_owner, ex);  			return; @@ -248,16 +271,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl  		addWindowListener(new WindowAdapter() {  				@Override  				public void windowClosing(WindowEvent e) { -					try { -						disconnect(); -					} catch (Exception ex) { -						System.out.printf("Exception %s\n", ex.toString()); -						for (StackTraceElement el : ex.getStackTrace()) -							System.out.printf("%s\n", el.toString()); -					} -					setVisible(false); -					dispose(); -					AltosUIPreferences.unregister_font_listener(AltosIdleMonitorUI.this); +					close();  				}  			});  | 
