diff options
Diffstat (limited to 'ao-tools/altosui/AltosState.java')
| -rw-r--r-- | ao-tools/altosui/AltosState.java | 55 | 
1 files changed, 31 insertions, 24 deletions
diff --git a/ao-tools/altosui/AltosState.java b/ao-tools/altosui/AltosState.java index 9aa10a08..3ef00f35 100644 --- a/ao-tools/altosui/AltosState.java +++ b/ao-tools/altosui/AltosState.java @@ -16,16 +16,16 @@   */  /* - * Track flight state from telemetry data stream + * Track flight state from telemetry or eeprom data stream   */  package altosui; -import altosui.AltosTelemetry; +import altosui.AltosRecord;  import altosui.AltosGPS;  public class AltosState { -	AltosTelemetry data; +	AltosRecord data;  	/* derived data */ @@ -64,6 +64,8 @@ public class AltosState {  	boolean	gps_ready;  	AltosGreatCircle from_pad; +	double	elevation;	/* from pad */ +	double	range;		/* total distance */  	double	gps_height; @@ -71,27 +73,25 @@ public class AltosState {  	double	speak_altitude; -	void init (AltosTelemetry cur, AltosState prev_state) { +	void init (AltosRecord cur, AltosState prev_state) {  		int		i; -		AltosTelemetry prev; -		double	accel_counts_per_mss; +		AltosRecord prev;  		data = cur; -		ground_altitude = AltosConvert.cc_barometer_to_altitude(data.ground_pres); -		height = AltosConvert.cc_barometer_to_altitude(data.flight_pres) - ground_altitude; +		ground_altitude = data.ground_altitude(); +		height = data.altitude() - ground_altitude;  		report_time = System.currentTimeMillis(); -		accel_counts_per_mss = ((data.accel_minus_g - data.accel_plus_g) / 2.0) / 9.80665; -		acceleration = (data.ground_accel - data.flight_accel) / accel_counts_per_mss; -		speed = data.flight_vel / (accel_counts_per_mss * 100.0); -		temperature = AltosConvert.cc_thermometer_to_temperature(data.temp); -		drogue_sense = AltosConvert.cc_ignitor_to_voltage(data.drogue); -		main_sense = AltosConvert.cc_ignitor_to_voltage(data.main); -		battery = AltosConvert.cc_battery_to_voltage(data.batt); +		acceleration = data.acceleration(); +		speed = data.accel_speed(); +		temperature = data.temperature(); +		drogue_sense = data.drogue_voltage(); +		main_sense = data.main_voltage(); +		battery = data.battery_voltage();  		tick = data.tick; -		state = data.state(); +		state = data.state;  		if (prev_state != null) { @@ -125,8 +125,8 @@ public class AltosState {  			time_change = 0;  		} -		if (state == AltosTelemetry.ao_flight_pad) { -			if (data.gps != null && data.gps.gps_locked && data.gps.nsat >= 4) { +		if (state == Altos.ao_flight_pad) { +			if (data.gps != null && data.gps.locked) {  				npad++;  				if (npad > 1) {  					/* filter pad position */ @@ -149,8 +149,8 @@ public class AltosState {  		gps_ready = gps_waiting == 0; -		ascent = (AltosTelemetry.ao_flight_boost <= state && -			  state <= AltosTelemetry.ao_flight_coast); +		ascent = (Altos.ao_flight_boost <= state && +			  state <= Altos.ao_flight_coast);  		/* Only look at accelerometer data on the way up */  		if (ascent && acceleration > max_acceleration) @@ -161,23 +161,30 @@ public class AltosState {  		if (height > max_height)  			max_height = height;  		if (data.gps != null) { -			if (gps == null || !gps.gps_locked || data.gps.gps_locked) +			if (gps == null || !gps.locked || data.gps.locked)  				gps = data.gps; -			if (npad > 0 && gps.gps_locked) +			if (npad > 0 && gps.locked) {  				from_pad = new AltosGreatCircle(pad_lat, pad_lon, gps.lat, gps.lon); +			}  		} +		elevation = 0; +		range = -1;  		if (npad > 0) {  			gps_height = gps.alt - pad_alt; +			if (from_pad != null) { +				elevation = Math.atan2(height, from_pad.distance) * 180 / Math.PI; +				range = Math.sqrt(height * height + from_pad.distance * from_pad.distance); +			}  		} else {  			gps_height = 0;  		}  	} -	public AltosState(AltosTelemetry cur) { +	public AltosState(AltosRecord cur) {  		init(cur, null);  	} -	public AltosState (AltosTelemetry cur, AltosState prev) { +	public AltosState (AltosRecord cur, AltosState prev) {  		init(cur, prev);  	}  }  | 
