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/AltosTelemetryIterable.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/AltosTelemetryIterable.java')
| -rw-r--r-- | altoslib/AltosTelemetryIterable.java | 124 | 
1 files changed, 61 insertions, 63 deletions
| diff --git a/altoslib/AltosTelemetryIterable.java b/altoslib/AltosTelemetryIterable.java index 57033638..bf30b4c8 100644 --- a/altoslib/AltosTelemetryIterable.java +++ b/altoslib/AltosTelemetryIterable.java @@ -15,33 +15,74 @@   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.   */ -package org.altusmetrum.altoslib_1; +package org.altusmetrum.altoslib_2;  import java.io.*;  import java.util.*;  import java.text.*; -public class AltosTelemetryIterable extends AltosRecordIterable { -	TreeSet<AltosRecord>	records; +class AltosTelemetryOrdered implements Comparable<AltosTelemetryOrdered> { +	AltosTelemetry	telem; +	int		index; +	int		tick; -	public Iterator<AltosRecord> iterator () { -		return records.iterator(); +	public int compareTo(AltosTelemetryOrdered o) { +		int	tick_diff = tick - o.tick; + +		if (tick_diff != 0) +			return tick_diff; +		return index - o.index;  	} -	boolean has_gps = false; -	boolean has_accel = false; -	boolean has_ignite = false; -	public boolean has_gps() { return has_gps; } -	public boolean has_accel() { return has_accel; } -	public boolean has_ignite() { return has_ignite; }; +	AltosTelemetryOrdered (AltosTelemetry telem, int index, int tick) { +		this.telem = telem; +		this.index = index; +		this.tick = tick; +	} +} -	public AltosTelemetryIterable (FileInputStream input) { -		boolean saw_boost = false; -		int	current_tick = 0; -		int	boost_tick = 0; +class AltosTelemetryOrderedIterator implements Iterator<AltosTelemetry> { +	Iterator<AltosTelemetryOrdered> iterator; + +	public AltosTelemetryOrderedIterator(TreeSet<AltosTelemetryOrdered> telems) { +		iterator = telems.iterator(); +	} + +	public boolean hasNext() { +		return iterator.hasNext(); +	} -		AltosRecord	previous = null; -		records = new TreeSet<AltosRecord> (); +	public AltosTelemetry next() { +		return iterator.next().telem; +	} + +	public void remove () { +	} +} + +public class AltosTelemetryIterable implements Iterable<AltosTelemetry> { +	TreeSet<AltosTelemetryOrdered>	telems; +	int tick; +	int index; + +	public void add (AltosTelemetry telem) { +		int	t = telem.tick; +		if (!telems.isEmpty()) { +			while (t < tick - 1000) +				t += 65536; +		} +		tick = t; +		telems.add(new AltosTelemetryOrdered(telem, index++, tick)); +	} + +	public Iterator<AltosTelemetry> iterator () { +		return new AltosTelemetryOrderedIterator(telems); +	} + +	public AltosTelemetryIterable (FileInputStream input) { +		telems = new TreeSet<AltosTelemetryOrdered> (); +		tick = 0; +		index = 0;  		try {  			for (;;) { @@ -50,32 +91,10 @@ public class AltosTelemetryIterable extends AltosRecordIterable {  					break;  				}  				try { -					AltosRecord record = AltosTelemetry.parse(line, previous); -					if (record == null) +					AltosTelemetry telem = AltosTelemetry.parse(line); +					if (telem == null)  						break; -					if (records.isEmpty()) { -						current_tick = record.tick; -					} else { -						int tick = record.tick; -						while (tick < current_tick - 0x1000) -							tick += 0x10000; -						current_tick = tick; -						record.tick = current_tick; -					} -					if (!saw_boost && record.state >= AltosLib.ao_flight_boost) -					{ -						saw_boost = true; -						boost_tick = record.tick; -					} -					if (record.acceleration() != AltosRecord.MISSING) -						has_accel = true; -					if (record.gps != null) -						has_gps = true; -					if (record.main_voltage() != AltosRecord.MISSING) -						has_ignite = true; -					if (previous != null && previous.tick != record.tick) -						records.add(previous); -					previous = record; +					add(telem);  				} catch (ParseException pe) {  					System.out.printf("parse exception %s\n", pe.getMessage());  				} catch (AltosCRCException ce) { @@ -84,26 +103,5 @@ public class AltosTelemetryIterable extends AltosRecordIterable {  		} catch (IOException io) {  			System.out.printf("io exception\n");  		} - -		if (previous != null) -			records.add(previous); - -		/* Adjust all tick counts to match expected eeprom values, -		 * which starts with a 16-bit tick count 16 samples before boost -		 */ - -		int tick_adjust = (boost_tick - 16) & 0xffff0000; -		for (AltosRecord r : this) -			r.tick -= tick_adjust; -		boost_tick -= tick_adjust; - -		/* adjust all tick counts to be relative to boost time */ -		for (AltosRecord r : this) -			r.time = (r.tick - boost_tick) / 100.0; - -		try { -			input.close(); -		} catch (IOException ie) { -		}  	}  } | 
