diff options
| -rw-r--r-- | altoslib/AltosCalData.java | 39 | ||||
| -rw-r--r-- | altoslib/AltosDataListener.java | 13 | ||||
| -rw-r--r-- | altoslib/AltosEepromDownload.java | 1 | ||||
| -rw-r--r-- | altoslib/AltosEepromRecord.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosEepromRecordFull.java | 12 | ||||
| -rw-r--r-- | altoslib/AltosEepromRecordMega.java | 4 | ||||
| -rw-r--r-- | altoslib/AltosEepromRecordMetrum.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosFlightListener.java | 162 | ||||
| -rw-r--r-- | altoslib/AltosFlightSeries.java | 1 | ||||
| -rw-r--r-- | altoslib/AltosReplayReader.java | 2 | ||||
| -rw-r--r-- | altoslib/AltosState.java | 1 | ||||
| -rw-r--r-- | altoslib/AltosTelemetryLocation.java | 7 | ||||
| -rw-r--r-- | altoslib/AltosTelemetrySatellite.java | 3 | 
13 files changed, 47 insertions, 210 deletions
| diff --git a/altoslib/AltosCalData.java b/altoslib/AltosCalData.java index 7415d5ad..fdea5e21 100644 --- a/altoslib/AltosCalData.java +++ b/altoslib/AltosCalData.java @@ -199,7 +199,6 @@ public class AltosCalData {  		tick = AltosLib.MISSING;  		prev_tick = AltosLib.MISSING;  		temp_gps = null; -		prev_gps = null;  		temp_gps_sat_tick = AltosLib.MISSING;  		accel = AltosLib.MISSING;  	} @@ -244,11 +243,14 @@ public class AltosCalData {  	public double		gps_pad_altitude = AltosLib.MISSING; -	public void set_gps(AltosGPS gps) { -		if ((state != AltosLib.MISSING && state < AltosLib.ao_flight_boost) || gps_pad == null) -			gps_pad = gps; -		if (gps_pad_altitude == AltosLib.MISSING && gps.alt != AltosLib.MISSING) -			gps_pad_altitude = gps.alt; +	public void set_cal_gps(AltosGPS gps) { +		if (gps.locked && gps.nsat >= 4) { +			if ((state != AltosLib.MISSING && state < AltosLib.ao_flight_boost) || gps_pad == null) +				gps_pad = gps; +			if (gps_pad_altitude == AltosLib.MISSING && gps.alt != AltosLib.MISSING) +				gps_pad_altitude = gps.alt; +		} +		temp_gps = null;  	}  	/* @@ -256,33 +258,24 @@ public class AltosCalData {  	 * object and then deliver the result atomically to the listener  	 */  	AltosGPS		temp_gps = null; -	AltosGPS		prev_gps = null;  	int			temp_gps_sat_tick = AltosLib.MISSING; -	public AltosGPS temp_gps() { +	public AltosGPS temp_cal_gps() {  		return temp_gps;  	} -	public void reset_temp_gps() { -		if (temp_gps != null) { -			if (temp_gps.locked && temp_gps.nsat >= 4) -				set_gps(temp_gps); -			prev_gps = temp_gps; -			temp_gps = null; -		} +	public void reset_temp_cal_gps() { +		if (temp_gps != null) +			set_cal_gps(temp_gps);  	} -	public boolean gps_pending() { +	public boolean cal_gps_pending() {  		return temp_gps != null;  	} -	public AltosGPS make_temp_gps(int tick, boolean sats) { -		if (temp_gps == null) { -			if (prev_gps != null) -				temp_gps = prev_gps.clone(); -			else -				temp_gps = new AltosGPS(); -		} +	public AltosGPS make_temp_cal_gps(int tick, boolean sats) { +		if (temp_gps == null) +			temp_gps = new AltosGPS();  		if (sats) {  			if (tick != temp_gps_sat_tick)  				temp_gps.cc_gps_sat = null; diff --git a/altoslib/AltosDataListener.java b/altoslib/AltosDataListener.java index 359d04c9..9a1e1465 100644 --- a/altoslib/AltosDataListener.java +++ b/altoslib/AltosDataListener.java @@ -111,7 +111,18 @@ public abstract class AltosDataListener {  	public abstract void set_apogee_voltage(double volts);  	public abstract void set_main_voltage(double volts); -	public abstract void set_gps(AltosGPS gps); +	public void set_gps(AltosGPS gps) { +		AltosCalData cal_data = cal_data(); +		cal_data.set_cal_gps(gps); +	} + +	public AltosGPS make_temp_gps(boolean sats) { +		return cal_data().make_temp_cal_gps(tick(), sats); +	} + +	public AltosGPS temp_gps() { +		return cal_data().temp_cal_gps(); +	}  	public abstract void set_orient(double orient);  	public abstract void set_gyro(double roll, double pitch, double yaw); diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java index 33f0dd17..3df8a5b4 100644 --- a/altoslib/AltosEepromDownload.java +++ b/altoslib/AltosEepromDownload.java @@ -40,6 +40,7 @@ class AltosEepromNameData extends AltosDataListener {  	public void set_main_voltage(double volts) { }  	public void set_gps(AltosGPS gps) { +		super.set_gps(gps);  		if (gps != null &&  		    gps.year != AltosLib.MISSING &&  		    gps.month != AltosLib.MISSING && diff --git a/altoslib/AltosEepromRecord.java b/altoslib/AltosEepromRecord.java index e937c3d0..12519e6b 100644 --- a/altoslib/AltosEepromRecord.java +++ b/altoslib/AltosEepromRecord.java @@ -90,11 +90,9 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>  		/* Flush any pending GPS changes */  		if (!AltosLib.is_gps_cmd(cmd())) { -			AltosGPS gps = cal_data.temp_gps(); -			if (gps != null) { +			AltosGPS gps = listener.temp_gps(); +			if (gps != null)  				listener.set_gps(gps); -				cal_data.reset_temp_gps(); -			}  		}  	} diff --git a/altoslib/AltosEepromRecordFull.java b/altoslib/AltosEepromRecordFull.java index 32df9578..7e92d353 100644 --- a/altoslib/AltosEepromRecordFull.java +++ b/altoslib/AltosEepromRecordFull.java @@ -53,7 +53,7 @@ public class AltosEepromRecordFull extends AltosEepromRecord {  			listener.set_state(data16(0));  			break;  		case AltosLib.AO_LOG_GPS_TIME: -			gps = cal_data.make_temp_gps(tick(),false); +			gps = listener.make_temp_gps(false);  			gps.hour = data8(0);  			gps.minute = data8(1); @@ -67,29 +67,29 @@ public class AltosEepromRecordFull extends AltosEepromRecord {  				AltosLib.AO_GPS_NUM_SAT_SHIFT;  			break;  		case AltosLib.AO_LOG_GPS_LAT: -			gps = cal_data.make_temp_gps(tick(),false); +			gps = listener.make_temp_gps(false);  			int lat32 = data32(0);  			gps.lat = (double) lat32 / 1e7;  			break;  		case AltosLib.AO_LOG_GPS_LON: -			gps = cal_data.make_temp_gps(tick(),false); +			gps = listener.make_temp_gps(false);  			int lon32 = data32(0);  			gps.lon = (double) lon32 / 1e7;  			break;  		case AltosLib.AO_LOG_GPS_ALT: -			gps = cal_data.make_temp_gps(tick(),false); +			gps = listener.make_temp_gps(false);  			gps.alt = data16(0);  			break;  		case AltosLib.AO_LOG_GPS_SAT: -			gps = cal_data.make_temp_gps(tick(),true); +			gps = listener.make_temp_gps(true);  			int svid = data16(0);  			int c_n0 = data16(2);  			gps.add_sat(svid, c_n0);  			break;  		case AltosLib.AO_LOG_GPS_DATE: -			gps = cal_data.make_temp_gps(tick(),false); +			gps = listener.make_temp_gps(false);  			gps.year = data8(0) + 2000;  			gps.month = data8(1);  			gps.day = data8(2); diff --git a/altoslib/AltosEepromRecordMega.java b/altoslib/AltosEepromRecordMega.java index ad3e23fd..ea5aff5c 100644 --- a/altoslib/AltosEepromRecordMega.java +++ b/altoslib/AltosEepromRecordMega.java @@ -188,7 +188,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord {  			listener.set_pyro_fired(pyro());  			break;  		case AltosLib.AO_LOG_GPS_TIME: -			gps = cal_data.make_temp_gps(tick(), false); +			gps = listener.make_temp_gps(false);  			gps.lat = latitude() / 1e7;  			gps.lon = longitude() / 1e7; @@ -231,7 +231,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord {  			}  			break;  		case AltosLib.AO_LOG_GPS_SAT: -			gps = cal_data.make_temp_gps(tick(), true); +			gps = listener.make_temp_gps(true);  			int n = nsat();  			if (n > max_sat) diff --git a/altoslib/AltosEepromRecordMetrum.java b/altoslib/AltosEepromRecordMetrum.java index 3da50544..888a06cc 100644 --- a/altoslib/AltosEepromRecordMetrum.java +++ b/altoslib/AltosEepromRecordMetrum.java @@ -91,7 +91,7 @@ public class AltosEepromRecordMetrum extends AltosEepromRecord {  			listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense_m()));  			break;  		case AltosLib.AO_LOG_GPS_POS: -			gps = cal_data.make_temp_gps(tick(), false); +			gps = listener.make_temp_gps(false);  			gps.lat = latitude() / 1e7;  			gps.lon = longitude() / 1e7;  			if (config_data().altitude_32()) @@ -100,7 +100,7 @@ public class AltosEepromRecordMetrum extends AltosEepromRecord {  				gps.alt = altitude_low();  			break;  		case AltosLib.AO_LOG_GPS_TIME: -			gps = cal_data.make_temp_gps(tick(), false); +			gps = listener.make_temp_gps(false);  			gps.hour = hour();  			gps.minute = minute(); @@ -119,7 +119,7 @@ public class AltosEepromRecordMetrum extends AltosEepromRecord {  			gps.pdop = pdop() / 10.0;  			break;  		case AltosLib.AO_LOG_GPS_SAT: -			gps = cal_data.make_temp_gps(tick(), true); +			gps = listener.make_temp_gps(true);  			int n = nsat();  			for (int i = 0; i < n; i++) diff --git a/altoslib/AltosFlightListener.java b/altoslib/AltosFlightListener.java deleted file mode 100644 index d61831a9..00000000 --- a/altoslib/AltosFlightListener.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright © 2017 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, either version 2 of the License, or - * (at your option) any later version. - * - * 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. - */ - -package org.altusmetrum.altoslib_12; - -public abstract class AltosFlightListener { - -	public int	flight; -	public int	serial; -	public int	tick; -	public int	boost_tick; -	public int	state; - -	public double	accel_plus_g; -	public double	accel_minus_g; -	public double	accel; - -	public double	ground_pressure; -	public double	ground_altitude; - -	AltosGPS	temp_gps; -	int		temp_gps_sat_tick; -	int		gps_sequence; - -	/* AltosEepromRecord */ -	public void set_boost_tick(int boost_tick) { -		if (boost_tick != AltosLib.MISSING) -			this.boost_tick = boost_tick; -	} - -	public void set_tick(int tick) { -		if (tick != AltosLib.MISSING) -			this.tick = tick; -	} - -	public double time() { -		if (tick == AltosLib.MISSING) -			return AltosLib.MISSING; -		if (boost_tick != AltosLib.MISSING) -			return (tick - boost_tick) / 100.0; -		else -			return tick / 100.0; -	} - -	public double boost_time() { -		if (boost_tick == AltosLib.MISSING) -			return AltosLib.MISSING; -		return boost_tick / 100.0; -	} - -	public abstract void set_rssi(int rssi, int status); -	public abstract void set_received_time(long received_time); - -	/* AltosEepromRecordFull */ - -	public void set_serial(int serial) { -		if (serial != AltosLib.MISSING) -			this.serial = serial; -	} - -	public void set_state(int state) { -		if (state != AltosLib.MISSING) -			this.state = state; -	} - -	public int state() { return state; } - -	public abstract void set_ground_accel(double ground_accel); -	public void set_flight(int flight) { -		if (flight != AltosLib.MISSING) -			this.flight = flight; -	} -	public int flight() { -		return flight; -	} - -	public abstract void set_accel(double accel); -	public abstract void set_acceleration(double accel); -	public abstract void set_accel_g(double accel_plus_g, double accel_minus_g); -	public abstract void set_pressure(double pa); -	public abstract void set_thrust(double N); - -	public abstract void set_temperature(double deg_c); -	public abstract void set_battery_voltage(double volts); - -	public abstract void set_apogee_voltage(double volts); -	public abstract void set_main_voltage(double volts); - -	public void set_temp_gps() { -		temp_gps = null; -	} - -	public boolean gps_pending() { -		return temp_gps != null; -	} - -	public AltosGPS make_temp_gps(boolean sats) { -		if (temp_gps == null) { -			temp_gps = new AltosGPS(); -		} -		if (sats) { -			if (tick != temp_gps_sat_tick) -				temp_gps.cc_gps_sat = null; -			temp_gps_sat_tick = tick; -		} -		return temp_gps; -	} - -	public void set_ground_pressure(double ground_pressure) { -		if (ground_pressure != AltosLib.MISSING) { -			this.ground_pressure = ground_pressure; -			this.ground_altitude = AltosConvert.pressure_to_altitude(ground_pressure); -		} -	} - -	public abstract void set_accel_ground(double along, double across, double through); -	public abstract void set_gyro_zero(double roll, double pitch, double yaw); -	public abstract void check_imu_wrap(AltosIMU imu); -	public abstract void set_imu(AltosIMU imu); -	public abstract void set_mag(AltosMag mag); -	public abstract void set_pyro_voltage(double volts); -	public abstract void set_igniter_voltage(double[] voltage); -	public abstract void set_pyro_fired(int pyro_mask); - -	public void copy(AltosFlightListener old) { -		flight = old.flight; -		serial = old.serial; -		tick = old.tick; -		boost_tick = old.boost_tick; -		accel_plus_g = old.accel_plus_g; -		accel_minus_g = old.accel_minus_g; -		ground_pressure = old.ground_pressure; -		ground_altitude = old.ground_altitude; -		temp_gps = old.temp_gps; -		temp_gps_sat_tick = old.temp_gps_sat_tick; -	} - -	public void init() { -		flight = AltosLib.MISSING; -		serial = AltosLib.MISSING; -		tick = AltosLib.MISSING; -		boost_tick = AltosLib.MISSING; -		accel_plus_g = AltosLib.MISSING; -		accel_minus_g = AltosLib.MISSING; -		accel = AltosLib.MISSING; -		ground_pressure = AltosLib.MISSING; -		ground_altitude = AltosLib.MISSING; -		temp_gps = null; -		temp_gps_sat_tick = AltosLib.MISSING; -	} -} diff --git a/altoslib/AltosFlightSeries.java b/altoslib/AltosFlightSeries.java index 2eaf8033..d130d3ad 100644 --- a/altoslib/AltosFlightSeries.java +++ b/altoslib/AltosFlightSeries.java @@ -532,6 +532,7 @@ public class AltosFlightSeries extends AltosDataListener {  	public static final String gps_hdop_name = "GPS Horizontal Dilution of Precision";  	public void set_gps(AltosGPS gps) { +		super.set_gps(gps);  		if (gps_series == null)  			gps_series = new ArrayList<AltosGPSTimeValue>();  		gps_series.add(new AltosGPSTimeValue(time(), gps)); diff --git a/altoslib/AltosReplayReader.java b/altoslib/AltosReplayReader.java index 24b425b7..7ce4197b 100644 --- a/altoslib/AltosReplayReader.java +++ b/altoslib/AltosReplayReader.java @@ -70,7 +70,7 @@ class AltosReplay extends AltosDataListener implements Runnable {  	public void set_apogee_voltage(double volts) { state.set_apogee_voltage(volts); }  	public void set_main_voltage(double volts) { state.set_main_voltage(volts); } -	public void set_gps(AltosGPS gps) { state.set_gps(gps); } +	public void set_gps(AltosGPS gps) { super.set_gps(gps); state.set_gps(gps); }  	public void set_orient(double orient) { state.set_orient(orient); }  	public void set_gyro(double roll, double pitch, double yaw) { state.set_gyro(roll, pitch, yaw); } diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 54c70094..68097faf 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -887,6 +887,7 @@ public class AltosState extends AltosDataListener {  	}  	public void set_gps(AltosGPS gps) { +		super.set_gps(gps);  		if (gps != null) {  			this.gps = gps;  			update_gps(); diff --git a/altoslib/AltosTelemetryLocation.java b/altoslib/AltosTelemetryLocation.java index f4366e33..e2925a58 100644 --- a/altoslib/AltosTelemetryLocation.java +++ b/altoslib/AltosTelemetryLocation.java @@ -54,7 +54,7 @@ public class AltosTelemetryLocation extends AltosTelemetryStandard {  		AltosCalData	cal_data = listener.cal_data(); -		AltosGPS	gps = cal_data.make_temp_gps(tick(), false); +		AltosGPS	gps = listener.make_temp_gps(false);  		int flags = flags();  		gps.nsat = flags & 0xf; @@ -77,12 +77,7 @@ public class AltosTelemetryLocation extends AltosTelemetryStandard {  			gps.ground_speed = ground_speed() * 1.0e-2;  			gps.course = course() * 2;  			gps.climb_rate = climb_rate() * 1.0e-2; - -			if (gps.nsat >= 4) -				cal_data.set_gps(gps);  		}  		listener.set_gps(gps); -		cal_data.set_gps(gps); -		cal_data.reset_temp_gps();  	}  } diff --git a/altoslib/AltosTelemetrySatellite.java b/altoslib/AltosTelemetrySatellite.java index 60bc4a51..0965df9f 100644 --- a/altoslib/AltosTelemetrySatellite.java +++ b/altoslib/AltosTelemetrySatellite.java @@ -49,10 +49,9 @@ public class AltosTelemetrySatellite extends AltosTelemetryStandard {  		AltosCalData	cal_data = listener.cal_data(); -		AltosGPS	gps = cal_data.make_temp_gps(tick(), true); +		AltosGPS	gps = listener.make_temp_gps(true);  		gps.cc_gps_sat = sats();  		listener.set_gps(gps); -		cal_data.reset_temp_gps();  	}  } | 
