diff options
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosEepromMini.java | 193 | ||||
| -rw-r--r-- | altoslib/AltosEepromMiniIterable.java | 297 | ||||
| -rw-r--r-- | altoslib/AltosLib.java | 1 | ||||
| -rw-r--r-- | altoslib/AltosOrderedMiniRecord.java | 52 | ||||
| -rw-r--r-- | altoslib/AltosRecordMini.java | 129 | ||||
| -rw-r--r-- | altoslib/Makefile.am | 4 | 
6 files changed, 676 insertions, 0 deletions
diff --git a/altoslib/AltosEepromMini.java b/altoslib/AltosEepromMini.java new file mode 100644 index 00000000..215cd3d9 --- /dev/null +++ b/altoslib/AltosEepromMini.java @@ -0,0 +1,193 @@ +/* + * Copyright © 2011 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_1; + +import java.text.*; + +public class AltosEepromMini { +	public int	cmd; +	public int	tick; +	public boolean	valid; +	public String	data; +	public int	config_a, config_b; + +	public int	data8[]; + +	public static final int	record_length = 16; +	static final int	header_length = 4; +	static final int	data_length = record_length - header_length; + +	public int data8(int i) { +		return data8[i]; +	} + +	public int data16(int i) { +		return ((data8[i] | (data8[i+1] << 8)) << 16) >> 16; +	} + +	public int data24(int i) { +		return data8[i] | (data8[i+1] << 8) | (data8[i+2] << 16); +	} + +	public int data32(int i) { +		return data8[i] | (data8[i+1] << 8) | (data8[i+2] << 16) | (data8[i+3] << 24); +	} + +	/* AO_LOG_FLIGHT elements */ +	public int flight() { return data16(0); } +	public int ground_pres() { return data32(4); } + +	/* AO_LOG_STATE elements */ +	public int state() { return data16(0); } +	public int reason() { return data16(2); } + +	/* AO_LOG_SENSOR elements */ +	public int pres() { return data24(0); } +	public int temp() { return data24(3); } +	public int sense_a() { return data16(6); } +	public int sense_m() { return data16(8); } +	public int v_batt() { return data16(10); } + +	public AltosEepromMini (AltosEepromChunk chunk, int start) throws ParseException { +		cmd = chunk.data(start); + +		valid = !chunk.erased(start, record_length); +		if (valid) { +			if (AltosConvert.checksum(chunk.data, start, record_length) != 0) +				throw new ParseException(String.format("invalid checksum at 0x%x", +								       chunk.address + start), 0); +		} else { +			cmd = AltosLib.AO_LOG_INVALID; +		} + +		tick = chunk.data16(start+2); + +		data8 = new int[data_length]; +		for (int i = 0; i < data_length; i++) +			data8[i] = chunk.data(start + header_length + i); +	} + +	public AltosEepromMini (String line) { +		valid = false; +		tick = 0; + +		if (line == null) { +			cmd = AltosLib.AO_LOG_INVALID; +			line = ""; +		} else { +			try { +				String[] tokens = line.split("\\s+"); + +				if (tokens[0].length() == 1) { +					if (tokens.length != 2 + data_length) { +						cmd = AltosLib.AO_LOG_INVALID; +						data = line; +					} else { +						cmd = tokens[0].codePointAt(0); +						tick = Integer.parseInt(tokens[1],16); +						valid = true; +						data8 = new int[data_length]; +						for (int i = 0; i < data_length; i++) +							data8[i] = Integer.parseInt(tokens[2 + i],16); +					} +				} else if (tokens[0].equals("Config") && tokens[1].equals("version:")) { +					cmd = AltosLib.AO_LOG_CONFIG_VERSION; +					data = tokens[2]; +				} else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) { +					cmd = AltosLib.AO_LOG_MAIN_DEPLOY; +					config_a = Integer.parseInt(tokens[2]); +				} else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) { +					cmd = AltosLib.AO_LOG_APOGEE_DELAY; +					config_a = Integer.parseInt(tokens[2]); +				} else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) { +					cmd = AltosLib.AO_LOG_RADIO_CHANNEL; +					config_a = Integer.parseInt(tokens[2]); +				} else if (tokens[0].equals("Callsign:")) { +					cmd = AltosLib.AO_LOG_CALLSIGN; +					data = tokens[1].replaceAll("\"",""); +				} else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) { +					cmd = AltosLib.AO_LOG_ACCEL_CAL; +					config_a = Integer.parseInt(tokens[3]); +					config_b = Integer.parseInt(tokens[5]); +				} else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) { +					cmd = AltosLib.AO_LOG_RADIO_CAL; +					config_a = Integer.parseInt(tokens[2]); +				} else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) { +					cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG; +					config_a = Integer.parseInt(tokens[3]); +				} else if (tokens[0].equals("manufacturer")) { +					cmd = AltosLib.AO_LOG_MANUFACTURER; +					data = tokens[1]; +				} else if (tokens[0].equals("product")) { +					cmd = AltosLib.AO_LOG_PRODUCT; +					data = tokens[1]; +				} else if (tokens[0].equals("serial-number")) { +					cmd = AltosLib.AO_LOG_SERIAL_NUMBER; +					config_a = Integer.parseInt(tokens[1]); +				} else if (tokens[0].equals("log-format")) { +					cmd = AltosLib.AO_LOG_LOG_FORMAT; +					config_a = Integer.parseInt(tokens[1]); +				} else if (tokens[0].equals("software-version")) { +					cmd = AltosLib.AO_LOG_SOFTWARE_VERSION; +					data = tokens[1]; +				} else if (tokens[0].equals("ms5607")) { +					if (tokens[1].equals("reserved:")) { +						cmd = AltosLib.AO_LOG_BARO_RESERVED; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("sens:")) { +						cmd = AltosLib.AO_LOG_BARO_SENS; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("off:")) { +						cmd = AltosLib.AO_LOG_BARO_OFF; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("tcs:")) { +						cmd = AltosLib.AO_LOG_BARO_TCS; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("tco:")) { +						cmd = AltosLib.AO_LOG_BARO_TCO; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("tref:")) { +						cmd = AltosLib.AO_LOG_BARO_TREF; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("tempsens:")) { +						cmd = AltosLib.AO_LOG_BARO_TEMPSENS; +						config_a = Integer.parseInt(tokens[2]); +					} else if (tokens[1].equals("crc:")) { +						cmd = AltosLib.AO_LOG_BARO_CRC; +						config_a = Integer.parseInt(tokens[2]); +					} else { +						cmd = AltosLib.AO_LOG_INVALID; +						data = line; +					} +				} else { +					cmd = AltosLib.AO_LOG_INVALID; +					data = line; +				} +			} catch (NumberFormatException ne) { +				cmd = AltosLib.AO_LOG_INVALID; +				data = line; +			} +		} +	} + +	public AltosEepromMini(int in_cmd, int in_tick) { +		cmd = in_cmd; +		tick = in_tick; +		valid = true; +	} +} diff --git a/altoslib/AltosEepromMiniIterable.java b/altoslib/AltosEepromMiniIterable.java new file mode 100644 index 00000000..1f221187 --- /dev/null +++ b/altoslib/AltosEepromMiniIterable.java @@ -0,0 +1,297 @@ +/* + * Copyright © 2010 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_1; + +import java.io.*; +import java.util.*; +import java.text.*; + +public class AltosEepromMiniIterable extends AltosRecordIterable { + +	static final int	seen_flight = 1; +	static final int	seen_sensor = 2; + +	static final int	seen_basic = seen_flight|seen_sensor; + +	boolean			has_accel; +	boolean			has_gps; +	boolean			has_ignite; + +	AltosEepromMini	flight_record; + +	TreeSet<AltosOrderedMiniRecord>	records; + +	AltosMs5607		baro; + +	LinkedList<AltosRecord>	list; + +	class EepromState { +		int	seen; +		int	n_pad_samples; +		double	ground_pres; +		int	boost_tick; +		int	sensor_tick; + +		EepromState() { +			seen = 0; +			n_pad_samples = 0; +			ground_pres = 0.0; +		} +	} + +	void update_state(AltosRecordMini state, AltosEepromMini record, EepromState eeprom) { +		state.tick = record.tick; +		switch (record.cmd) { +		case AltosLib.AO_LOG_FLIGHT: +			eeprom.seen |= seen_flight; +			state.ground_pres = record.ground_pres(); +			state.flight_pres = state.ground_pres; +			state.flight = record.data16(0); +			eeprom.boost_tick = record.tick; +			break; +		case AltosLib.AO_LOG_SENSOR: +			baro.set(record.pres(), record.temp()); +			state.pres = baro.pa; +			state.temp = baro.cc; +			state.sense_m = record.sense_m(); +			state.sense_a = record.sense_a(); +			state.v_batt = record.v_batt(); +			if (state.state < AltosLib.ao_flight_boost) { +				eeprom.n_pad_samples++; +				eeprom.ground_pres += state.pres; +				state.ground_pres = (int) (eeprom.ground_pres / eeprom.n_pad_samples); +				state.flight_pres = state.ground_pres; +			} else { +				state.flight_pres = (state.flight_pres * 15 + state.pres) / 16; +			} +			if ((eeprom.seen & seen_sensor) == 0) +				eeprom.sensor_tick = record.tick - 1; +			eeprom.seen |= seen_sensor; +			eeprom.sensor_tick = record.tick; +			break; +		case AltosLib.AO_LOG_STATE: +			state.state = record.state(); +			break; +		case AltosLib.AO_LOG_CONFIG_VERSION: +			break; +		case AltosLib.AO_LOG_MAIN_DEPLOY: +			break; +		case AltosLib.AO_LOG_APOGEE_DELAY: +			break; +		case AltosLib.AO_LOG_RADIO_CHANNEL: +			break; +		case AltosLib.AO_LOG_CALLSIGN: +			state.callsign = record.data; +			break; +		case AltosLib.AO_LOG_RADIO_CAL: +			break; +		case AltosLib.AO_LOG_MANUFACTURER: +			break; +		case AltosLib.AO_LOG_PRODUCT: +			break; +		case AltosLib.AO_LOG_SERIAL_NUMBER: +			state.serial = record.config_a; +			break; +		case AltosLib.AO_LOG_SOFTWARE_VERSION: +			break; +		case AltosLib.AO_LOG_BARO_RESERVED: +			baro.reserved = record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_SENS: +			baro.sens =record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_OFF: +			baro.off =record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_TCS: +			baro.tcs =record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_TCO: +			baro.tco =record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_TREF: +			baro.tref =record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_TEMPSENS: +			baro.tempsens =record.config_a; +			break; +		case AltosLib.AO_LOG_BARO_CRC: +			baro.crc =record.config_a; +			break; +		} +		state.seen |= eeprom.seen; +	} + +	LinkedList<AltosRecord> make_list() { +		LinkedList<AltosRecord>		list = new LinkedList<AltosRecord>(); +		Iterator<AltosOrderedMiniRecord> iterator = records.iterator(); +		AltosOrderedMiniRecord		record = null; +		AltosRecordMini			state = new AltosRecordMini(); +		//boolean			last_reported = false; +		EepromState			eeprom = new EepromState(); + +		state.state = AltosLib.ao_flight_pad; + +		/* Pull in static data from the flight records */ +		if (flight_record != null) +			update_state(state, flight_record, eeprom); + +		while (iterator.hasNext()) { +			record = iterator.next(); +			if ((eeprom.seen & seen_basic) == seen_basic && record.tick != state.tick) { +				AltosRecordMini r = state.clone(); +				r.time = (r.tick - eeprom.boost_tick) / 100.0; +				list.add(r); +			} +			update_state(state, record, eeprom); +		} +		AltosRecordMini r = state.clone(); +		r.time = (r.tick - eeprom.boost_tick) / 100.0; +		list.add(r); +		return list; +	} + +	public Iterator<AltosRecord> iterator() { +		if (list == null) +			list = make_list(); +		return list.iterator(); +	} + +	public boolean has_gps() { return has_gps; } +	public boolean has_accel() { return has_accel; } +	public boolean has_ignite() { return has_ignite; } + +	public void write_comments(PrintStream out) { +		Iterator<AltosOrderedMiniRecord>	iterator = records.iterator(); +		out.printf("# Comments\n"); +		while (iterator.hasNext()) { +			AltosOrderedMiniRecord	record = iterator.next(); +			switch (record.cmd) { +			case AltosLib.AO_LOG_CONFIG_VERSION: +				out.printf("# Config version: %s\n", record.data); +				break; +			case AltosLib.AO_LOG_MAIN_DEPLOY: +				out.printf("# Main deploy: %s\n", record.config_a); +				break; +			case AltosLib.AO_LOG_APOGEE_DELAY: +				out.printf("# Apogee delay: %s\n", record.config_a); +				break; +			case AltosLib.AO_LOG_RADIO_CHANNEL: +				out.printf("# Radio channel: %s\n", record.config_a); +				break; +			case AltosLib.AO_LOG_CALLSIGN: +				out.printf("# Callsign: %s\n", record.data); +				break; +			case AltosLib.AO_LOG_ACCEL_CAL: +				out.printf ("# Accel cal: %d %d\n", record.config_a, record.config_b); +				break; +			case AltosLib.AO_LOG_RADIO_CAL: +				out.printf ("# Radio cal: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_MAX_FLIGHT_LOG: +				out.printf ("# Max flight log: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_MANUFACTURER: +				out.printf ("# Manufacturer: %s\n", record.data); +				break; +			case AltosLib.AO_LOG_PRODUCT: +				out.printf ("# Product: %s\n", record.data); +				break; +			case AltosLib.AO_LOG_SERIAL_NUMBER: +				out.printf ("# Serial number: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_SOFTWARE_VERSION: +				out.printf ("# Software version: %s\n", record.data); +				break; +			case AltosLib.AO_LOG_BARO_RESERVED: +				out.printf ("# Baro reserved: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_SENS: +				out.printf ("# Baro sens: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_OFF: +				out.printf ("# Baro off: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_TCS: +				out.printf ("# Baro tcs: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_TCO: +				out.printf ("# Baro tco: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_TREF: +				out.printf ("# Baro tref: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_TEMPSENS: +				out.printf ("# Baro tempsens: %d\n", record.config_a); +				break; +			case AltosLib.AO_LOG_BARO_CRC: +				out.printf ("# Baro crc: %d\n", record.config_a); +				break; +			} +		} +	} + +	/* +	 * Read the whole file, dumping records into a RB tree so +	 * we can enumerate them in time order -- the eeprom data +	 * are sometimes out of order +	 */ +	public AltosEepromMiniIterable (FileInputStream input) { +		records = new TreeSet<AltosOrderedMiniRecord>(); + +		AltosOrderedMiniRecord last_gps_time = null; + +		baro = new AltosMs5607(); + +		int index = 0; +		int prev_tick = 0; +		boolean prev_tick_valid = false; +		boolean missing_time = false; + +		try { +			for (;;) { +				String line = AltosLib.gets(input); +				if (line == null) +					break; +				AltosOrderedMiniRecord record = new AltosOrderedMiniRecord(line, index++, prev_tick, prev_tick_valid); +				if (record.cmd == AltosLib.AO_LOG_INVALID) +					continue; +				prev_tick = record.tick; +				if (record.cmd < AltosLib.AO_LOG_CONFIG_VERSION) +					prev_tick_valid = true; +				if (record.cmd == AltosLib.AO_LOG_FLIGHT) { +					flight_record = record; +					continue; +				} + +				records.add(record); + +				/* Bail after reading the 'landed' record; we're all done */ +				if (record.cmd == AltosLib.AO_LOG_STATE && +				    record.state() == AltosLib.ao_flight_landed) +					break; +			} +		} catch (IOException io) { +		} catch (ParseException pe) { +		} +		try { +			input.close(); +		} catch (IOException ie) { +		} +	} +} diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 25d17e72..a629260b 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -216,6 +216,7 @@ public class AltosLib {  	public static final int AO_LOG_FORMAT_TELEMETRY = 3;  	public static final int AO_LOG_FORMAT_TELESCIENCE = 4;  	public static final int AO_LOG_FORMAT_TELEMEGA = 5; +	public static final int AO_LOG_FORMAT_MINI = 6;  	public static final int AO_LOG_FORMAT_NONE = 127;  	public static boolean isspace(int c) { diff --git a/altoslib/AltosOrderedMiniRecord.java b/altoslib/AltosOrderedMiniRecord.java new file mode 100644 index 00000000..96888941 --- /dev/null +++ b/altoslib/AltosOrderedMiniRecord.java @@ -0,0 +1,52 @@ +/* + * Copyright © 2010 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_1; + +import java.text.ParseException; + +/* + * AltosRecords with an index field so they can be sorted by tick while preserving + * the original ordering for elements with matching ticks + */ +class AltosOrderedMiniRecord extends AltosEepromMini implements Comparable<AltosOrderedMiniRecord> { + +	public int	index; + +	public AltosOrderedMiniRecord(String line, int in_index, int prev_tick, boolean prev_tick_valid) +		throws ParseException { +		super(line); +		if (prev_tick_valid) { +			tick |= (prev_tick & ~0xffff); +			if (tick < prev_tick) { +				if (prev_tick - tick > 0x8000) +					tick += 0x10000; +			} else { +				if (tick - prev_tick > 0x8000) +					tick -= 0x10000; +			} +		} +		index = in_index; +	} + +	public int compareTo(AltosOrderedMiniRecord o) { +		int	tick_diff = tick - o.tick; +		if (tick_diff != 0) +			return tick_diff; +		return index - o.index; +	} +} diff --git a/altoslib/AltosRecordMini.java b/altoslib/AltosRecordMini.java new file mode 100644 index 00000000..253f3804 --- /dev/null +++ b/altoslib/AltosRecordMini.java @@ -0,0 +1,129 @@ +/* + * Copyright © 2012 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_1; + +public class AltosRecordMini extends AltosRecord { + +	/* Sensor values */ +	public int	pres; +	public int	temp; +	 +	public int	sense_a; +	public int	sense_m; +	public int	v_batt; + +	public int      ground_pres; + +	public int	flight_accel; +	public int	flight_vel; +	public int	flight_pres; + +	static double adc(int raw) { +		return raw / 4095.0; +	} + +	public double pressure() { +		if (pres != MISSING) +			return pres; +		return MISSING; +	} + +	public double temperature() { +		if (temp != MISSING) +			return temp; +		return MISSING; +	} + +	public double ground_pressure() { +		if (ground_pres != MISSING) +			return ground_pres; +		return MISSING; +	} + +	public double battery_voltage() { +		if (v_batt != MISSING) +			return 3.3 * adc(v_batt) * (15.0 + 27.0) / 27.0; +		return MISSING; +	} + +	static double pyro(int raw) { +		if (raw != MISSING) +			return 3.3 * adc(raw) * (100.0 + 27.0) / 27.0; +		return MISSING; +	} + +	public double main_voltage() { +		return pyro(sense_m); +	} + +	public double apogee_voltage() { +		return pyro(sense_a); +	} + +	public void copy (AltosRecordMini old) { +		super.copy(old); + +		pres = old.pres; +		temp = old.temp; + +		sense_a = old.sense_a; +		sense_m = old.sense_m; +		v_batt = old.v_batt; + +		ground_pres = old.ground_pres; +		 +		flight_accel = old.flight_accel; +		flight_vel = old.flight_vel; +		flight_pres = old.flight_pres; +	} + + + +	public AltosRecordMini clone() { +		return new AltosRecordMini(this); +	} + +	void make_missing() { + +		pres = MISSING; + +		sense_a = MISSING; +		sense_m = MISSING; +		v_batt = MISSING; + +		ground_pres = MISSING; + +		flight_accel = 0; +		flight_vel = 0; +		flight_pres = 0; +	} + +	public AltosRecordMini(AltosRecord old) { +		super.copy(old); +		make_missing(); +	} + +	public AltosRecordMini(AltosRecordMini old) { +		copy(old); +	} + +	public AltosRecordMini() { +		super(); +		make_missing(); +	} +} diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 18b028d6..8c1cf2ad 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -24,6 +24,8 @@ altoslib_JAVA = \  	AltosEepromMegaIterable.java \  	AltosEepromRecord.java \  	AltosEepromTeleScience.java \ +	AltosEepromMini.java \ +	AltosEepromMiniIterable.java \  	AltosFile.java \  	AltosFlash.java \  	AltosFlashListener.java \ @@ -47,6 +49,7 @@ altoslib_JAVA = \  	AltosMs5607Query.java \  	AltosOrderedRecord.java \  	AltosOrderedMegaRecord.java \ +	AltosOrderedMiniRecord.java \  	AltosParse.java \  	AltosPreferences.java \  	AltosPreferencesBackend.java \ @@ -56,6 +59,7 @@ altoslib_JAVA = \  	AltosRecordNone.java \  	AltosRecordTM.java \  	AltosRecordMM.java \ +	AltosRecordMini.java \  	AltosReplayReader.java \  	AltosRomconfig.java \  	AltosSensorMM.java \  | 
