diff options
| author | Bdale Garbee <bdale@gag.com> | 2013-12-19 01:38:40 -0700 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2013-12-19 01:38:40 -0700 | 
| commit | 575bbaf976c5840fd0e308549c45a466fdec1352 (patch) | |
| tree | 11bfb498348bf7687bffc24699c4b1a998988ee4 /altoslib/AltosTelemetryReader.java | |
| parent | b825116df173b77e2cab217a7b76112c742f9279 (diff) | |
| parent | bc3610d8cecbfed40c62d4dcb93fc9a4d2a7c9e3 (diff) | |
Merge branch 'branch-1.3' into debian
Conflicts:
	ChangeLog
	altoslib/AltosRecordMM.java
	altosui/Makefile.am
	altosui/altos-windows.nsi.in
	configure.ac
	debian/changelog
	debian/control
	doc/Makefile
	doc/altusmetrum.xsl
	doc/release-notes-1.2.1.xsl
	doc/release-notes-1.2.xsl
Diffstat (limited to 'altoslib/AltosTelemetryReader.java')
| -rw-r--r-- | altoslib/AltosTelemetryReader.java | 38 | 
1 files changed, 21 insertions, 17 deletions
diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java index b4293c73..eeb35cb5 100644 --- a/altoslib/AltosTelemetryReader.java +++ b/altoslib/AltosTelemetryReader.java @@ -15,7 +15,7 @@   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.   */ -package org.altusmetrum.altoslib_1; +package org.altusmetrum.altoslib_2;  import java.text.*;  import java.io.*; @@ -24,19 +24,23 @@ import java.util.concurrent.*;  public class AltosTelemetryReader extends AltosFlightReader {  	AltosLink	link;  	AltosLog	log; -	AltosRecord	previous;  	double		frequency;  	int		telemetry; +	AltosState	state = null;  	LinkedBlockingQueue<AltosLine> telem; -	public AltosRecord read() throws InterruptedException, ParseException, AltosCRCException, IOException { +	public AltosState read() throws InterruptedException, ParseException, AltosCRCException, IOException {  		AltosLine l = telem.take();  		if (l.line == null)  			throw new IOException("IO error"); -		AltosRecord	next = AltosTelemetry.parse(l.line, previous); -		previous = next; -		return next; +		AltosTelemetry	telem = AltosTelemetry.parse(l.line); +		if (state == null) +			state = new AltosState(); +		else +			state = state.clone(); +		telem.update_state(state); +		return state;  	}  	public void flush() { @@ -44,14 +48,16 @@ public class AltosTelemetryReader extends AltosFlightReader {  	}  	public void reset() { -		previous = null;  		flush();  	}  	public void close(boolean interrupted) {  		link.remove_monitor(telem);  		log.close(); -		link.close(); +		try { +			link.close(); +		} catch (InterruptedException ie) { +		}  	}  	public void set_frequency(double in_frequency) throws InterruptedException, TimeoutException { @@ -80,7 +86,7 @@ public class AltosTelemetryReader extends AltosFlightReader {  			else  				return false;  		} catch (InterruptedException ie) { -			return true; +			return false;  		} catch (TimeoutException te) {  			return true;  		} @@ -111,29 +117,27 @@ public class AltosTelemetryReader extends AltosFlightReader {  		return link.has_monitor_battery();  	} -	public double monitor_battery() { +	public double monitor_battery() throws InterruptedException {  		return link.monitor_battery();  	}  	public AltosTelemetryReader (AltosLink in_link)  		throws IOException, InterruptedException, TimeoutException {  		link = in_link; +		boolean success = false;  		try {  			log = new AltosLog(link);  			name = link.name; -			previous = null;  			telem = new LinkedBlockingQueue<AltosLine>();  			frequency = AltosPreferences.frequency(link.serial);  			set_frequency(frequency);  			telemetry = AltosPreferences.telemetry(link.serial);  			set_telemetry(telemetry);  			link.add_monitor(telem); -		} catch (TimeoutException e) { -			close(true); -			throw(e); -		} catch (InterruptedException e) { -			close(true); -			throw(e); +			success = true; +		} finally { +			if (!success) +				close(true);  		}  	}  }  | 
