diff options
| author | Bdale Garbee <bdale@gag.com> | 2012-09-12 20:01:22 -0600 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2012-09-12 20:01:22 -0600 | 
| commit | 3b612efcd1dddc6a3d59012f7ed57754b1f798c2 (patch) | |
| tree | 18d50713491ef96c5c127a309f870efb6c33f98d /altoslib/AltosRecord.java | |
| parent | e076773c1693e2a62bb828dee71c04c20dbab0a5 (diff) | |
| parent | 01eb36408d7e0e826b431fcc1d3b2deb23607e0b (diff) | |
Merge branch 'new-debian' into debian
Conflicts:
	ChangeLog
	debian/altos.install
	debian/changelog
	debian/control
	debian/copyright
	debian/dirs
	debian/docs
	debian/menu
	debian/rules
	src/Makefile
Diffstat (limited to 'altoslib/AltosRecord.java')
| -rw-r--r-- | altoslib/AltosRecord.java | 202 | 
1 files changed, 202 insertions, 0 deletions
diff --git a/altoslib/AltosRecord.java b/altoslib/AltosRecord.java new file mode 100644 index 00000000..dd741716 --- /dev/null +++ b/altoslib/AltosRecord.java @@ -0,0 +1,202 @@ +/* + * 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; + +public class AltosRecord implements Comparable <AltosRecord>, Cloneable { + +	public static final int	seen_flight = 1; +	public static final int	seen_sensor = 2; +	public static final int	seen_temp_volt = 4; +	public static final int	seen_deploy = 8; +	public static final int	seen_gps_time = 16; +	public static final int	seen_gps_lat = 32; +	public static final int	seen_gps_lon = 64; +	public static final int	seen_companion = 128; + +	public int	seen; +	 +	public final static int	MISSING = 0x7fffffff; + +	/* Every AltosRecord implementation provides these fields */ +	 +	public int	version; +	public String 	callsign; +	public int	serial; +	public int	flight; +	public int	rssi; +	public int	status; +	public int	state; +	public int	tick; + +	/* Current flight dynamic state */ +	public double	acceleration;	/* m/s² */ +	public double	speed;		/* m/s */ +	public double	height;		/* m */ + +	public AltosGPS	gps; +	public boolean	new_gps; + +	public double	time;	/* seconds since boost */ + +	public int	device_type; +	public int	config_major; +	public int	config_minor; +	public int	apogee_delay; +	public int	main_deploy; +	public int	flight_log_max; +	public String	firmware_version; + +	public AltosRecordCompanion companion; + +	/* +	 * Abstract methods that convert record data +	 * to standard units: +	 * +	 *	pressure:	Pa +	 *	voltage:	V +	 *	acceleration:	m/s² +	 *	speed:		m/s +	 *	height:		m +	 *	temperature:	°C +	 */ + +	public double raw_pressure() { return MISSING; } + +	public double filtered_pressure() { return MISSING; } + +	public double ground_pressure() { return MISSING; } + +	public double battery_voltage() { return MISSING; } + +	public double main_voltage() { return MISSING; } + +	public double drogue_voltage() { return MISSING; } + +	public double temperature() { return MISSING; } +	 +	public double acceleration() { return MISSING; } + +	public double accel_speed() { return MISSING; } + +	public AltosIMU imu() { return null; } + +	public AltosMag mag() { return null; } + +	/* +	 * Convert various pressure values to altitude +	 */ + +	public double raw_altitude() { +		double p = raw_pressure(); +		if (p == MISSING) +			return MISSING; +		return AltosConvert.pressure_to_altitude(p); +	} + +	public double ground_altitude() { +		double p = ground_pressure(); +		if (p == MISSING) +			return MISSING; +		return AltosConvert.pressure_to_altitude(p); +	} + +	public double filtered_altitude() { +		double	ga = ground_altitude(); +		if (height != MISSING && ga != MISSING) +			return height + ga; + +		double	p = filtered_pressure(); +		if (p == MISSING) +			return raw_altitude(); +		return AltosConvert.pressure_to_altitude(p); +	} + +	public double filtered_height() { +		if (height != MISSING) +			return height; + +		double f = filtered_altitude(); +		double g = ground_altitude(); +		if (f == MISSING || g == MISSING) +			return MISSING; +		return f - g; +	} + +	public double raw_height() { +		double r = raw_altitude(); +		double g = ground_altitude(); + +		if (r == MISSING || g == MISSING) +			return height; +		return r - g; +	} + +	public String state() { +		return AltosLib.state_name(state); +	} + +	public int compareTo(AltosRecord o) { +		return tick - o.tick; +	} + +	public void copy(AltosRecord old) { +		seen = old.seen; +		version = old.version; +		callsign = old.callsign; +		serial = old.serial; +		flight = old.flight; +		rssi = old.rssi; +		status = old.status; +		state = old.state; +		tick = old.tick; +		acceleration = old.acceleration; +		speed = old.speed; +		height = old.height; +		gps = new AltosGPS(old.gps); +		new_gps = false; +		companion = old.companion; +	} + +	public AltosRecord clone() { +		try { +			AltosRecord n = (AltosRecord) super.clone(); +			n.copy(this); +			return n; +		} catch (CloneNotSupportedException e) { +			return null; +		} +	} + +	public AltosRecord() { +		seen = 0; +		version = 0; +		callsign = "N0CALL"; +		serial = 0; +		flight = 0; +		rssi = 0; +		status = 0; +		state = AltosLib.ao_flight_startup; +		tick = 0; +		acceleration = MISSING; +		speed = MISSING; +		height = MISSING; +		gps = new AltosGPS(); +		new_gps = false; +		companion = null; +	} +}  | 
