diff options
Diffstat (limited to 'altoslib/AltosTelemetryRecordSet.java')
| -rw-r--r-- | altoslib/AltosTelemetryRecordSet.java | 97 | 
1 files changed, 97 insertions, 0 deletions
| diff --git a/altoslib/AltosTelemetryRecordSet.java b/altoslib/AltosTelemetryRecordSet.java new file mode 100644 index 00000000..0cb95261 --- /dev/null +++ b/altoslib/AltosTelemetryRecordSet.java @@ -0,0 +1,97 @@ +/* + * Copyright © 2017 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, either version 2 of the License, or + * (at your option) any later version. + * + * 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. + */ + +package org.altusmetrum.altoslib_11; + +import java.io.*; +import java.util.*; + +public class AltosTelemetryRecordSet implements AltosRecordSet { +	AltosTelemetry			telemetry; +	TreeSet<AltosTelemetryRecord>	ordered; + +	public void capture_series(AltosDataListener series) { +		for (AltosTelemetryRecord record : ordered) { +			record.update_state(series); +		} +	} + +	public AltosTelemetryRecordSet(AltosTelemetry telemetry) { +		this.telemetry = telemetry; + +		AltosTelemetryRecord	record = null; + +		switch (config_data.log_format) { +		case AltosLib.AO_LOG_FORMAT_FULL: +			record = new AltosTelemetryRecordFull(eeprom); +			break; +		case AltosLib.AO_LOG_FORMAT_TINY: +			record = new AltosTelemetryRecordTiny(eeprom); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEMETRY: +		case AltosLib.AO_LOG_FORMAT_TELESCIENCE: +		case AltosLib.AO_LOG_FORMAT_TELEMEGA: +		case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: +			record = new AltosTelemetryRecordMega(eeprom); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEMETRUM: +			record = new AltosTelemetryRecordMetrum(eeprom); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEMINI2: +		case AltosLib.AO_LOG_FORMAT_TELEMINI3: +		case AltosLib.AO_LOG_FORMAT_EASYMINI: +			record = new AltosTelemetryRecordMini(eeprom); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEGPS: +			record = new AltosTelemetryRecordGps(eeprom); +			break; +		case AltosLib.AO_LOG_FORMAT_TELEFIRETWO: +			record = new AltosTelemetryRecordFireTwo(eeprom); +			break; +		} + +		if (record == null) { +			System.out.printf("failed to parse log format %d\n", config_data.log_format); +			return; +		} +		ordered = new TreeSet<AltosTelemetryRecord>(); +		int	tick = 0; +		boolean first = true; + +		start_state = new AltosState(); +		start_state.set_config_data(record.eeprom.config_data()); + +		for (;;) { +			int	t = record.tick(); + +			if (first) { +				tick = t; +				first = false; +			} else { +				while (t < tick - 32767) +					t += 65536; +				tick = t; +			} +			record.wide_tick = tick; +			ordered.add(record); +			if (!record.hasNext()) +				break; +			record = record.next(); +		} +	} + +	public AltosTelemetryRecordSet(Reader input) throws IOException { +		this(new AltosTelemetryNew(input)); +	} +} | 
