diff options
| author | Keith Packard <keithp@keithp.com> | 2013-08-29 19:24:51 -0500 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-08-29 19:24:51 -0500 | 
| commit | de8d9c5630ae46378c50faf97f7d2e97fe139e30 (patch) | |
| tree | e8e41e4186c5d27e1a5184d915bdb9f08926fa7a /altoslib/AltosEepromFile.java | |
| parent | ce1378385ef273010498e81c205f42d8e32c7dc1 (diff) | |
altoslib, altosui: Restructured state management now does TM eeprom files
Removed uses of AltosRecord from AltosState, now just need to rewrite
the other AltosState changing code to match
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosEepromFile.java')
| -rw-r--r-- | altoslib/AltosEepromFile.java | 64 | 
1 files changed, 62 insertions, 2 deletions
| diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java index 48d2543c..bcc7171e 100644 --- a/altoslib/AltosEepromFile.java +++ b/altoslib/AltosEepromFile.java @@ -21,11 +21,47 @@ import java.io.*;  import java.util.*;  import java.text.*; -public class AltosEepromFile { +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; +	public void write_comments(PrintStream out) { +		headers.write(out); +	} +  	public void write(PrintStream out) {  		headers.write(out);  		body.write(out); @@ -38,14 +74,38 @@ public class AltosEepromFile {  		switch (state.log_format) {  		case AltosLib.AO_LOG_FORMAT_FULL: +			body = new AltosEepromIterable(AltosEepromTM.read(input)); +			break;  		case AltosLib.AO_LOG_FORMAT_TINY:  		case AltosLib.AO_LOG_FORMAT_TELEMETRY:  		case AltosLib.AO_LOG_FORMAT_TELESCIENCE:  		case AltosLib.AO_LOG_FORMAT_TELEMEGA:  			break; -		case AltosLib.AO_LOG_FORMAT_MINI: +		case AltosLib.AO_LOG_FORMAT_TELEMINI: +		case AltosLib.AO_LOG_FORMAT_EASYMINI:  			body = new AltosEepromIterable(AltosEepromMini.read(input));  			break;  		}  	} + +	int boost_tick (AltosState start) { +		AltosState	state = start.clone(); +		for (AltosEeprom eeprom : body) { +			eeprom.update_state(state); +			if (state.state >= AltosLib.ao_flight_boost) +				return state.tick; +		} +		return 0; +	} + +	public Iterator<AltosState> iterator() { + +		AltosState		state = headers.state(); +		Iterator<AltosEeprom>  	i = body.iterator(); + +		while (i.hasNext() && !state.valid()) +			i.next().update_state(state); +		state.set_boost_tick(boost_tick(state)); +		return new AltosEepromIterator(state, i); +	}  }
\ No newline at end of file | 
