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/AltosIdleFetch.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/AltosIdleFetch.java')
| -rw-r--r-- | altoslib/AltosIdleFetch.java | 151 | 
1 files changed, 151 insertions, 0 deletions
diff --git a/altoslib/AltosIdleFetch.java b/altoslib/AltosIdleFetch.java new file mode 100644 index 00000000..4adc6c41 --- /dev/null +++ b/altoslib/AltosIdleFetch.java @@ -0,0 +1,151 @@ +/* + * 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.*; +import java.util.concurrent.*; + +class AltosIdler { +	String	prefix; +	int[]	idlers; + +	static final int	idle_gps = 0; +	static final int	idle_imu = 1; +	static final int	idle_mag = 2; +	static final int	idle_ms5607 = 3; +	static final int	idle_mma655x = 4; + + +	static final int	idle_sensor_tm = 10; +	static final int	idle_sensor_metrum = 11; +	static final int	idle_sensor_mega = 12; +	static final int	idle_sensor_emini = 13; +	static final int	idle_sensor_tmini = 14; + +	public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException { +		for (int idler : idlers) { +			AltosIdle idle = null; +			switch (idler) { +			case idle_gps: +				AltosGPS.update_state(state, link, config_data); +				break; +			case idle_imu: +				AltosIMU.update_state(state, link, config_data); +				break; +			case idle_mag: +				AltosMag.update_state(state, link, config_data); +				break; +			case idle_ms5607: +				AltosMs5607.update_state(state, link, config_data); +				break; +			case idle_mma655x: +				AltosMma655x.update_state(state, link, config_data); +				break; +			case idle_sensor_tm: +				AltosSensorTM.update_state(state, link, config_data); +				break; +			case idle_sensor_metrum: +				AltosSensorMetrum.update_state(state, link, config_data); +				break; +			case idle_sensor_mega: +				AltosSensorMega.update_state(state, link, config_data); +				break; +			case idle_sensor_emini: +				AltosSensorEMini.update_state(state, link, config_data); +				break; +			case idle_sensor_tmini: +				AltosSensorTMini.update_state(state, link, config_data); +			} +			if (idle != null) +				idle.update_state(state); +		} +	} + +	public boolean matches(AltosConfigData config_data) { +		return config_data.product.startsWith(prefix); +	} + +	public AltosIdler(String prefix, int ... idlers) { +		this.prefix = prefix; +		this.idlers = idlers; +	} +} + + +public class AltosIdleFetch implements AltosStateUpdate { + +	static final AltosIdler[] idlers = { + +		new AltosIdler("EasyMini", +			       AltosIdler.idle_ms5607, +			       AltosIdler.idle_sensor_emini), + +		new AltosIdler("TeleMini-v1", +			       AltosIdler.idle_sensor_tm), + +		new AltosIdler("TeleMini-v2", +			       AltosIdler.idle_ms5607, +			       AltosIdler.idle_sensor_tmini), + +		new AltosIdler("TeleMetrum-v1", +			       AltosIdler.idle_gps, +			       AltosIdler.idle_sensor_tm), + +		new AltosIdler("TeleMetrum-v2", +			       AltosIdler.idle_gps, +			       AltosIdler.idle_ms5607, AltosIdler.idle_mma655x, +			       AltosIdler.idle_sensor_metrum), + +		new AltosIdler("TeleMega", +			       AltosIdler.idle_gps, +			       AltosIdler.idle_ms5607, AltosIdler.idle_mma655x, +			       AltosIdler.idle_imu, AltosIdler.idle_mag, +			       AltosIdler.idle_sensor_mega), +	}; + +	AltosLink		link; + +	double			frequency; +	String			callsign; + +	public void update_state(AltosState state) throws InterruptedException { +		try { +			AltosConfigData config_data = new AltosConfigData(link); +			state.set_state(AltosLib.ao_flight_startup); +			state.set_serial(config_data.serial); +			state.set_callsign(config_data.callsign); +			state.set_ground_accel(config_data.accel_cal_plus); +			state.set_accel_g(config_data.accel_cal_plus, config_data.accel_cal_minus); +			for (AltosIdler idler : idlers) { +				if (idler.matches(config_data)) { +					idler.update_state(state, link, config_data); +					break; +				} +			} +			state.set_received_time(System.currentTimeMillis()); +		} catch (TimeoutException te) { +		} +		 +	} + +	public AltosIdleFetch(AltosLink link) { +		this.link = link; +	} +}  | 
