diff options
Diffstat (limited to 'altoslib/AltosTelemetryFile.java')
| -rw-r--r-- | altoslib/AltosTelemetryFile.java | 136 | 
1 files changed, 86 insertions, 50 deletions
| diff --git a/altoslib/AltosTelemetryFile.java b/altoslib/AltosTelemetryFile.java index 9c5f8dae..0b0e6a48 100644 --- a/altoslib/AltosTelemetryFile.java +++ b/altoslib/AltosTelemetryFile.java @@ -22,76 +22,112 @@ import java.io.*;  import java.util.*;  import java.text.*; -class AltosTelemetryIterator implements Iterator<AltosState> { -	AltosState			state; -	Iterator<AltosTelemetry>	telems; -	AltosTelemetry			next; -	boolean				seen; - -	public boolean hasNext() { -		return !seen || telems.hasNext(); +class AltosTelemetryNullListener extends AltosDataListener { +	public void set_rssi(int rssi, int status) { } +	public void set_received_time(long received_time) { } + +	public void set_acceleration(double accel) { } +	public void set_pressure(double pa) { } +	public void set_thrust(double N) { } + +	public void set_kalman(double height, double speed, double accel) { } + +	public void set_temperature(double deg_c) { } +	public void set_battery_voltage(double volts) { } + +	public void set_apogee_voltage(double volts) { } +	public void set_main_voltage(double volts) { } + +	public void set_gps(AltosGPS gps) { } + +	public void set_orient(double orient) { } +	public void set_gyro(double roll, double pitch, double yaw) { } +	public void set_accel_ground(double along, double across, double through) { } +	public void set_accel(double along, double across, double through) { } +	public void set_mag(double along, double across, double through) { } +	public void set_pyro_voltage(double volts) { } +	public void set_ignitor_voltage(double[] voltage) { } +	public void set_pyro_fired(int pyro_mask) { } +	public void set_companion(AltosCompanion companion) { } + +	public boolean cal_data_complete() { +		/* All telemetry packets */ +		if (cal_data.serial == AltosLib.MISSING) +			return false; + +		if (cal_data.boost_tick == AltosLib.MISSING) +			return false; + +		/* +		 * TelemetryConfiguration: +		 * +		 * device_type, flight, config version, log max, +		 * flight params, callsign and version +		 */ +		if (cal_data.device_type == AltosLib.MISSING) +			return false; + +		/* +		 * TelemetrySensor or TelemetryMegaData: +		 * +		 * ground_accel, accel+/-, ground pressure +		 */ +		if (cal_data.ground_pressure == AltosLib.MISSING) +			return false; + +		/* +		 * TelemetryLocation +		 */ +		if (AltosLib.has_gps(cal_data.device_type) && cal_data.gps_ground_altitude == AltosLib.MISSING) +			return false; + +		return true;  	} -	public AltosState next() { -		if (seen) { -			AltosState	n = state.clone(); -			AltosTelemetry	t = telems.next(); - -			t.update_state(n); -			state = n; -		} -		seen = true; -		return state; -	} - -	public void remove () { -	} - -	public AltosTelemetryIterator(AltosState start, Iterator<AltosTelemetry> telems) { -		this.state = start; -		this.telems = telems; -		this.seen = false; +	public AltosTelemetryNullListener(AltosCalData cal_data) { +		super(cal_data);  	}  } -public class AltosTelemetryFile extends AltosStateIterable { +public class AltosTelemetryFile implements AltosRecordSet {  	AltosTelemetryIterable	telems; -	AltosState		start; +	AltosCalData		cal_data;  	public void write_comments(PrintStream out) {  	}  	public void write(PrintStream out) { -  	} -	public AltosTelemetryFile(FileInputStream input) { -		telems = new AltosTelemetryIterable(input); -		start = new AltosState(); - -		/* Find boost tick */ -		AltosState	state = start.clone(); +	/* Construct cal data by walking through the telemetry data until we've found everything available */ +	public AltosCalData cal_data() { +		if (cal_data == null) { +			cal_data = new AltosCalData(); +			AltosTelemetryNullListener l = new AltosTelemetryNullListener(cal_data); -		for (AltosTelemetry telem : telems) { -			telem.update_state(state); -			state.finish_update(); -			if (state.state() != AltosLib.ao_flight_invalid && state.state() >= AltosLib.ao_flight_boost) { -				start.set_boost_tick(state.tick); -				break; +			for (AltosTelemetry telem : telems) { +				telem.provide_data(l, cal_data); +				if (l.cal_data_complete()) +					break;  			} +			System.out.printf("Telemetry boost tick %d\n", cal_data.boost_tick);  		} +		return cal_data;  	} -	public Iterator<AltosState> iterator() { -		AltosState			state = start.clone(); -		Iterator<AltosTelemetry>  	i = telems.iterator(); +	public void capture_series(AltosDataListener listener) { +		AltosCalData	cal_data = cal_data(); -		while (i.hasNext() && !state.valid()) { -			AltosTelemetry	t = i.next(); -			t.update_state(state); -			state.finish_update(); +		for (AltosTelemetry telem : telems) { +			int tick = telem.tick(); +			cal_data.set_tick(tick); +			if (cal_data.time() >= -1) +				telem.provide_data(listener, cal_data);  		} -		return new AltosTelemetryIterator(state, i); +	} + +	public AltosTelemetryFile(FileInputStream input) { +		telems = new AltosTelemetryIterable(input);  	}  } | 
