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/AltosEepromFile.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/AltosEepromFile.java')
| -rw-r--r-- | altoslib/AltosEepromFile.java | 123 | 
1 files changed, 123 insertions, 0 deletions
| diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java new file mode 100644 index 00000000..60ab2573 --- /dev/null +++ b/altoslib/AltosEepromFile.java @@ -0,0 +1,123 @@ +/* + * Copyright © 2013 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.altoslib_2; + +import java.io.*; +import java.util.*; +import java.text.*; + +class AltosEepromIterator implements Iterator<AltosState> { +	AltosState		state; +	Iterator<AltosEeprom>	body; +	AltosEeprom		next; +	boolean			seen; + +	public boolean hasNext() { +		return !seen || body.hasNext(); +	} + +	public AltosState next() { +		if (seen) { +			AltosState	n = state.clone(); +			AltosEeprom	e = body.next(); + +			e.update_state(n); +			state = n; +		} +		seen = true; +		return state; +	} + +	public void remove () { +	} + +	public AltosEepromIterator(AltosState start, Iterator<AltosEeprom> body) { +		this.state = start; +		this.body = body; +		this.seen = false; +	} +} + +public class AltosEepromFile extends AltosStateIterable { + +	AltosEepromIterable	headers; +	AltosEepromIterable	body; +	AltosState		start; + +	public void write_comments(PrintStream out) { +		headers.write(out); +	} + +	public void write(PrintStream out) { +		headers.write(out); +		body.write(out); +	} + +	public AltosEepromFile(FileInputStream input) { +		headers = new AltosEepromIterable(AltosEepromHeader.read(input)); + +		start = headers.state(); +		start.set_state(AltosLib.ao_flight_pad); + +		switch (start.log_format) { +		case AltosLib.AO_LOG_FORMAT_FULL: +			body = new AltosEepromIterable(AltosEepromTM.read(input)); +			break; +		case AltosLib.AO_LOG_FORMAT_TINY: +			body = new AltosEepromIterable(AltosEepromTm.read(input)); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEMETRY: +		case AltosLib.AO_LOG_FORMAT_TELESCIENCE: +		case AltosLib.AO_LOG_FORMAT_TELEMEGA: +			body = new AltosEepromIterable(AltosEepromMega.read(input)); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEMETRUM: +			body = new AltosEepromIterable(AltosEepromMetrum2.read(input)); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEMINI: +		case AltosLib.AO_LOG_FORMAT_EASYMINI: +			body = new AltosEepromIterable(AltosEepromMini.read(input)); +			break; +		default: +			body = new AltosEepromIterable(new LinkedList<AltosEeprom>()); +			break; +		} + +		/* Find boost tick */ +		AltosState	state = start.clone(); +		for (AltosEeprom eeprom : body) { +			eeprom.update_state(state); +			state.finish_update(); +			if (state.state >= AltosLib.ao_flight_boost) { +				start.set_boost_tick(state.tick); +				break; +			} +		} +	} + +	public Iterator<AltosState> iterator() { +		AltosState		state = start.clone(); +		Iterator<AltosEeprom>	i = body.iterator(); + +		while (i.hasNext() && !state.valid()) { +			i.next().update_state(state); +			state.finish_update(); +		} +		return new AltosEepromIterator(state, i); +	} +}
\ No newline at end of file | 
