diff options
| author | Keith Packard <keithp@keithp.com> | 2014-05-28 21:56:52 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-05-28 22:02:32 -0700 | 
| commit | 3871b9ac036e3adfa1da089245fc7973b268c921 (patch) | |
| tree | f84cee06faaf7574e81836292b67ac702b69cc1b /altoslib | |
| parent | 4cec35564324f909dcddeb7c0d83a2daa8223042 (diff) | |
telegps: Add 'Info' tab
This contains a summary of the tracking info, including position,
speed and course.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosConvert.java | 26 | ||||
| -rw-r--r-- | altoslib/AltosGreatCircle.java | 26 | ||||
| -rw-r--r-- | altoslib/AltosState.java | 24 | 
3 files changed, 54 insertions, 22 deletions
diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index 484f6213..a65669da 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -371,4 +371,30 @@ public class AltosConvert {  			return 94;  		return (int) Math.floor (1.0/2.0 * (24.0e6/32.0) / freq + 0.5);  	} + +	public static final int BEARING_LONG = 0; +	public static final int BEARING_SHORT = 1; +	public static final int BEARING_VOICE = 2; + +	public static String bearing_to_words(int length, double bearing) { +		String [][] bearing_string = { +			{ +				"North", "North North East", "North East", "East North East", +				"East", "East South East", "South East", "South South East", +				"South", "South South West", "South West", "West South West", +				"West", "West North West", "North West", "North North West" +			}, { +				"N", "NNE", "NE", "ENE", +				"E", "ESE", "SE", "SSE", +				"S", "SSW", "SW", "WSW", +				"W", "WNW", "NW", "NNW" +			}, { +				"north", "nor nor east", "north east", "east nor east", +				"east", "east sow east", "south east", "sow sow east", +				"south", "sow sow west", "south west", "west sow west", +				"west", "west nor west", "north west", "nor nor west " +			} +		}; +		return bearing_string[length][(int)((bearing / 90 * 8 + 1) / 2)%16]; +	}  } diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index 39df4fc8..4782c34d 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -30,30 +30,12 @@ public class AltosGreatCircle implements Cloneable {  	static final double rad = Math.PI / 180;  	static final double earth_radius = 6371.2 * 1000;	/* in meters */ -	public static final int BEARING_LONG = 0; -	public static final int BEARING_SHORT = 1; -	public static final int BEARING_VOICE = 2; +	public static final int BEARING_LONG = AltosConvert.BEARING_LONG; +	public static final int BEARING_SHORT = AltosConvert.BEARING_SHORT; +	public static final int BEARING_VOICE = AltosConvert.BEARING_VOICE;  	public String bearing_words(int length) { -		String [][] bearing_string = { -			{ -				"North", "North North East", "North East", "East North East", -				"East", "East South East", "South East", "South South East", -				"South", "South South West", "South West", "West South West", -				"West", "West North West", "North West", "North North West" -			}, { -				"N", "NNE", "NE", "ENE", -				"E", "ESE", "SE", "SSE", -				"S", "SSW", "SW", "WSW", -				"W", "WNW", "NW", "NNW" -			}, { -				"north", "nor nor east", "north east", "east nor east", -				"east", "east sow east", "south east", "sow sow east", -				"south", "sow sow west", "south west", "west sow west", -				"west", "west nor west", "north west", "nor nor west " -			} -		}; -		return bearing_string[length][(int)((bearing / 90 * 8 + 1) / 2)%16]; +		return AltosConvert.bearing_to_words(length, bearing);  	}  	public AltosGreatCircle (double start_lat, double start_lon, double start_alt, diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 9e8e22ac..1162e522 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -389,6 +389,10 @@ public class AltosState implements Cloneable {  	private AltosGpsAltitude	gps_altitude; +	private AltosValue		gps_ground_speed; +	private AltosValue		gps_ascent_rate; +	private AltosValue		gps_course; +  	public double altitude() {  		double a = altitude.value();  		if (a != AltosLib.MISSING) @@ -419,6 +423,18 @@ public class AltosState implements Cloneable {  		gps_altitude.set(new_gps_altitude, time);  	} +	public double gps_ground_speed() { +		return gps_ground_speed.value(); +	} + +	public double gps_ascent_rate() { +		return gps_ascent_rate.value(); +	} + +	public double gps_course() { +		return gps_course.value(); +	} +  	class AltosPressure extends AltosValue {  		void set(double p, double time) {  			super.set(p, time); @@ -695,6 +711,8 @@ public class AltosState implements Cloneable {  		gps_altitude = new AltosGpsAltitude();  		gps_ground_altitude = new AltosGpsGroundAltitude(); +		gps_ground_speed = new AltosValue(); +		gps_ascent_rate = new AltosValue();  		speak_tick = AltosLib.MISSING;  		speak_altitude = AltosLib.MISSING; @@ -877,6 +895,12 @@ public class AltosState implements Cloneable {  				gps_ground_altitude.set(gps.alt, time);  			}  			gps_altitude.set(gps.alt, time); +			if (gps.climb_rate != AltosLib.MISSING) +				gps_ascent_rate.set(gps.climb_rate, time); +			if (gps.ground_speed != AltosLib.MISSING) +				gps_ground_speed.set(gps.ground_speed, time); +			if (gps.course != AltosLib.MISSING) +				gps_course.set(gps.course, time);  		}  		if (gps.lat != 0 && gps.lon != 0 &&  		    pad_lat != AltosLib.MISSING &&  | 
