diff options
Diffstat (limited to 'altoslib/AltosState.java')
| -rw-r--r-- | altoslib/AltosState.java | 129 | 
1 files changed, 99 insertions, 30 deletions
| diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index aa3de432..b80d7b2e 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -32,7 +32,7 @@ public class AltosState implements Cloneable {  	/* derived data */ -	public long  	report_time; +	public long	received_time;  	public double	time;  	public double	prev_time; @@ -48,6 +48,12 @@ public class AltosState implements Cloneable {  	public boolean	boost;	/* under power */  	public int	rssi;  	public int	status; +	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 double	ground_altitude;  	public double	ground_pressure; @@ -61,11 +67,16 @@ public class AltosState implements Cloneable {  	public double	apogee_voltage;  	public double	main_voltage;  	public double	speed; +	public double	ignitor_voltage[];  	public double	prev_height;  	public double	prev_speed;  	public double	prev_acceleration; +	public double	prev_max_height; +	public double	prev_max_acceleration; +	public double	prev_max_speed; +  	public double	max_height;  	public double	max_acceleration;  	public double	max_speed; @@ -100,6 +111,8 @@ public class AltosState implements Cloneable {  	public double	speak_altitude;  	public String	callsign; +	public String	firmware_version; +  	public double	accel_plus_g;  	public double	accel_minus_g;  	public double	accel; @@ -133,7 +146,7 @@ public class AltosState implements Cloneable {  		set = 0; -		report_time = System.currentTimeMillis(); +		received_time = System.currentTimeMillis();  		time = AltosRecord.MISSING;  		time_change = AltosRecord.MISSING;  		prev_time = AltosRecord.MISSING; @@ -145,6 +158,12 @@ public class AltosState implements Cloneable {  		boost = false;  		rssi = AltosRecord.MISSING;  		status = 0; +		device_type = AltosRecord.MISSING; +		config_major = AltosRecord.MISSING; +		config_minor = AltosRecord.MISSING; +		apogee_delay = AltosRecord.MISSING; +		main_deploy = AltosRecord.MISSING; +		flight_log_max = AltosRecord.MISSING;  		ground_altitude = AltosRecord.MISSING;  		ground_pressure = AltosRecord.MISSING; @@ -158,10 +177,15 @@ public class AltosState implements Cloneable {  		prev_speed = AltosRecord.MISSING;  		prev_acceleration = AltosRecord.MISSING; +		prev_max_height = 0; +		prev_max_speed = 0; +		prev_max_acceleration = 0; +  		battery_voltage = AltosRecord.MISSING;  		pyro_voltage = AltosRecord.MISSING;  		apogee_voltage = AltosRecord.MISSING;  		main_voltage = AltosRecord.MISSING; +		ignitor_voltage = null;  		speed = AltosRecord.MISSING; @@ -219,7 +243,7 @@ public class AltosState implements Cloneable {  			return;  		} -		report_time = old.report_time; +		received_time = old.received_time;  		time = old.time;  		time_change = 0;  		tick = old.tick; @@ -232,6 +256,12 @@ public class AltosState implements Cloneable {  		boost = old.boost;  		rssi = old.rssi;  		status = old.status; +		device_type = old.device_type; +		config_major = old.config_major; +		config_minor = old.config_minor; +		apogee_delay = old.apogee_delay; +		main_deploy = old.main_deploy; +		flight_log_max = old.flight_log_max;  		set = 0; @@ -245,11 +275,16 @@ public class AltosState implements Cloneable {  		temperature = old.temperature;  		apogee_voltage = old.apogee_voltage;  		main_voltage = old.main_voltage; +		ignitor_voltage = old.ignitor_voltage;  		speed = old.speed;  		prev_height = old.height;  		prev_speed = old.speed;  		prev_acceleration = old.acceleration; + +		prev_max_height = old.max_height; +		prev_max_speed = old.max_speed; +		prev_max_acceleration = old.max_acceleration;  		prev_time = old.time;  		max_height = old.max_height; @@ -343,7 +378,7 @@ public class AltosState implements Cloneable {  		else  			height = AltosRecord.MISSING; -		if (height != AltosRecord.MISSING && height > max_height) +		if (height != AltosRecord.MISSING && height > prev_max_height)  			max_height = height;  		update_speed(); @@ -394,31 +429,34 @@ public class AltosState implements Cloneable {  				}  			}  		} -		if (boost && speed != AltosRecord.MISSING && speed > max_speed) +		if (boost && speed != AltosRecord.MISSING && speed > prev_max_speed)  			max_speed = speed;  	}  	void update_accel() { -		double	ground = ground_accel; - -		if (ground == AltosRecord.MISSING) -			ground = ground_accel_avg; -		if (accel == AltosRecord.MISSING) -			return; -		if (ground == AltosRecord.MISSING) -			return; -		if (accel_plus_g == AltosRecord.MISSING) -			return; -		if (accel_minus_g == AltosRecord.MISSING) -			return; - -		double counts_per_g = (accel_minus_g - accel_plus_g) / 2.0; -		double counts_per_mss = counts_per_g / 9.80665; - -		acceleration = (ground - accel) / counts_per_mss; +		if (kalman_acceleration != AltosRecord.MISSING) { +			acceleration = kalman_acceleration; +		} else { +			double	ground = ground_accel; + +			if (ground == AltosRecord.MISSING) +				ground = ground_accel_avg; +			if (accel == AltosRecord.MISSING) +				return; +			if (ground == AltosRecord.MISSING) +				return; +			if (accel_plus_g == AltosRecord.MISSING) +				return; +			if (accel_minus_g == AltosRecord.MISSING) +				return; + +			double counts_per_g = (accel_minus_g - accel_plus_g) / 2.0; +			double counts_per_mss = counts_per_g / 9.80665; +			acceleration = (ground - accel) / counts_per_mss; +		}  		/* Only look at accelerometer data under boost */ -		if (boost && acceleration != AltosRecord.MISSING && (max_acceleration == AltosRecord.MISSING || acceleration > max_acceleration)) +		if (boost && acceleration != AltosRecord.MISSING && acceleration > prev_max_acceleration)  			max_acceleration = acceleration;  		update_speed();  	} @@ -502,6 +540,26 @@ public class AltosState implements Cloneable {  	} +	public void set_device_type(int device_type) { +		this.device_type = device_type; +	} + +	public void set_config(int major, int minor, int apogee_delay, int main_deploy, int flight_log_max) { +		config_major = major; +		config_minor = minor; +		this.apogee_delay = apogee_delay; +		this.main_deploy = main_deploy; +		this.flight_log_max = flight_log_max; +	} + +	public void set_callsign(String callsign) { +		this.callsign = callsign; +	} + +	public void set_firmware_version(String version) { +		firmware_version = version; +	} +  	public void set_flight(int flight) {  		/* When the flight changes, reset the state */ @@ -538,6 +596,10 @@ public class AltosState implements Cloneable {  		}  	} +	public void set_received_time(long ms) { +		received_time = ms; +	} +  	public void set_altitude(double altitude) {  		if (altitude != AltosRecord.MISSING) {  			this.altitude = altitude; @@ -577,6 +639,8 @@ public class AltosState implements Cloneable {  			kalman_speed = speed;  			kalman_acceleration = acceleration;  			update_vertical_pos(); +			update_speed(); +			update_accel();  		}  	} @@ -672,6 +736,9 @@ public class AltosState implements Cloneable {  		}  	} +	public void set_ignitor_voltage(double[] voltage) { +		this.ignitor_voltage = voltage; +	}  	public double time_since_boost() {  		if (tick == AltosRecord.MISSING) @@ -702,6 +769,13 @@ public class AltosState implements Cloneable {  		temp_gps = null;  	} +	public AltosState clone() { +		AltosState s = new AltosState(); +		s.copy(this); +		return s; +	} + +  	public void init (AltosRecord cur, AltosState prev_state) {  		System.out.printf ("init\n"); @@ -721,7 +795,7 @@ public class AltosState implements Cloneable {  		set_kalman(cur.kalman_height, cur.kalman_speed, cur.kalman_acceleration); -		report_time = System.currentTimeMillis(); +		received_time = System.currentTimeMillis();  		set_temperature(cur.temperature());  		set_apogee_voltage(cur.drogue_voltage()); @@ -742,12 +816,6 @@ public class AltosState implements Cloneable {  	} -	public AltosState clone() { -		AltosState s = new AltosState(); -		s.copy(this); -		return s; -	} -  	public AltosState(AltosRecord cur) {  		init(cur, null);  	} @@ -756,6 +824,7 @@ public class AltosState implements Cloneable {  		init(cur, prev);  	} +  	public AltosState () {  		init();  	} | 
