diff options
| author | Keith Packard <keithp@keithp.com> | 2013-05-14 00:24:53 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-05-14 00:24:53 -0700 | 
| commit | 43f94e923a6a87520edcbb8fb4829e6ddf708908 (patch) | |
| tree | 418a5faf0b502845450f092961aa78235d5d22ea /altoslib | |
| parent | c88aa32b979f379e3cf316dcb651e264c32a5283 (diff) | |
altoslib: Use sequence numbers to track GPS updates to AltosRecord
State objects now record what GPS sequence ID they have to know when
the GPS data has been updated. Record objects bump the GPS sequence
each time new GPS data is recorded. This way, record objects aren't
modified as they're iterated over to generate the list of state
objects which makes it possible to iterate multiple times and get the
same resulting set of states.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosEepromIterable.java | 2 | ||||
| -rw-r--r-- | altoslib/AltosEepromMegaIterable.java | 2 | ||||
| -rw-r--r-- | altoslib/AltosIdleMonitor.java | 2 | ||||
| -rw-r--r-- | altoslib/AltosRecord.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosState.java | 7 | ||||
| -rw-r--r-- | altoslib/AltosTelemetryRecordLegacy.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosTelemetryRecordLocation.java | 2 | 
7 files changed, 15 insertions, 12 deletions
| diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 7a8bbdea..b84574ef 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -125,7 +125,7 @@ public class AltosEepromIterable extends AltosRecordIterable {  			state.gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0;  			state.gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >>  				AltosLib.AO_GPS_NUM_SAT_SHIFT; -			state.new_gps = true; +			state.gps_sequence++;  			has_gps = true;  			break;  		case AltosLib.AO_LOG_GPS_LAT: diff --git a/altoslib/AltosEepromMegaIterable.java b/altoslib/AltosEepromMegaIterable.java index a127f435..5736f937 100644 --- a/altoslib/AltosEepromMegaIterable.java +++ b/altoslib/AltosEepromMegaIterable.java @@ -136,7 +136,7 @@ public class AltosEepromMegaIterable extends AltosRecordIterable {  			state.gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0;  			state.gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >>  				AltosLib.AO_GPS_NUM_SAT_SHIFT; -			state.new_gps = true; +			state.gps_sequence++;  			has_gps = true;  			eeprom.seen |= seen_gps_time | seen_gps_lat | seen_gps_lon;  			break; diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index 2e4ddef2..b3ce5b20 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -112,7 +112,7 @@ public class AltosIdleMonitor extends Thread {  			record.status = 0;  			record.state = AltosLib.ao_flight_idle;  			record.gps = gps; -			record.new_gps = true; +			record.gps_sequence++;  			state = new AltosState (record, state);  		} finally {  			if (remote) { diff --git a/altoslib/AltosRecord.java b/altoslib/AltosRecord.java index 07e910eb..5e4ed927 100644 --- a/altoslib/AltosRecord.java +++ b/altoslib/AltosRecord.java @@ -44,7 +44,7 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {  	public int	tick;  	public AltosGPS	gps; -	public boolean	new_gps; +	public int	gps_sequence;  	public double	time;	/* seconds since boost */ @@ -143,7 +143,7 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {  		state = old.state;  		tick = old.tick;  		gps = new AltosGPS(old.gps); -		new_gps = old.new_gps; +		gps_sequence = old.gps_sequence;  		companion = old.companion;  		kalman_acceleration = old.kalman_acceleration;  		kalman_speed = old.kalman_speed; @@ -161,7 +161,7 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {  		state = AltosLib.ao_flight_startup;  		tick = 0;  		gps = null; -		new_gps = false; +		gps_sequence = 0;  		companion = null;  		kalman_acceleration = MISSING; diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index ccbe498d..825306be 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -54,6 +54,7 @@ public class AltosState {  	public double	max_baro_speed;  	public AltosGPS	gps; +	public int gps_sequence;  	public AltosIMU	imu;  	public AltosMag	mag; @@ -133,6 +134,7 @@ public class AltosState {  			npad = prev_state.npad;  			ngps = prev_state.ngps;  			gps = prev_state.gps; +			gps_sequence = prev_state.gps_sequence;  			pad_lat = prev_state.pad_lat;  			pad_lon = prev_state.pad_lon;  			pad_alt = prev_state.pad_alt; @@ -187,6 +189,7 @@ public class AltosState {  			npad = 0;  			ngps = 0;  			gps = null; +			gps_sequence = 0;  			baro_speed = AltosRecord.MISSING;  			accel_speed = AltosRecord.MISSING;  			pad_alt = AltosRecord.MISSING; @@ -199,7 +202,7 @@ public class AltosState {  		time = tick / 100.0; -		if (cur.new_gps && (state < AltosLib.ao_flight_boost)) { +		if (data.gps != null && data.gps_sequence != gps_sequence && (state < AltosLib.ao_flight_boost)) {  			/* Track consecutive 'good' gps reports, waiting for 10 of them */  			if (data.gps != null && data.gps.locked && data.gps.nsat >= 4) @@ -226,7 +229,7 @@ public class AltosState {  				pad_alt = ground_altitude;  		} -		data.new_gps = false; +		gps_sequence = data.gps_sequence;  		gps_waiting = MIN_PAD_SAMPLES - npad;  		if (gps_waiting < 0) diff --git a/altoslib/AltosTelemetryRecordLegacy.java b/altoslib/AltosTelemetryRecordLegacy.java index a734b188..f2d3f868 100644 --- a/altoslib/AltosTelemetryRecordLegacy.java +++ b/altoslib/AltosTelemetryRecordLegacy.java @@ -267,7 +267,7 @@ public class AltosTelemetryRecordLegacy extends AltosTelemetryRecord {  		if (map.has(AO_TELEM_GPS_STATE)) {  		record.gps = new AltosGPS(map); -		record.new_gps = true; +		record.gps_sequence++;  		}  		else  		record.gps = null; @@ -357,7 +357,7 @@ public class AltosTelemetryRecordLegacy extends AltosTelemetryRecord {  		}  		record.gps = new AltosGPS(words, i, record.version); -		record.new_gps = true; +		record.gps_sequence++;  	}  	public AltosTelemetryRecordLegacy(String line) throws ParseException, AltosCRCException { @@ -476,7 +476,7 @@ public class AltosTelemetryRecordLegacy extends AltosTelemetryRecord {  		if ((gps_flags & (AO_GPS_VALID|AO_GPS_RUNNING)) != 0) {  			record.gps = new AltosGPS(); -			record.new_gps = true; +			record.gps_sequence++;  			record.seen |= AltosRecord.seen_gps_time | AltosRecord.seen_gps_lat | AltosRecord.seen_gps_lon;  			record.gps.nsat = (gps_flags & AO_GPS_NUM_SAT_MASK); diff --git a/altoslib/AltosTelemetryRecordLocation.java b/altoslib/AltosTelemetryRecordLocation.java index 02999696..0236d291 100644 --- a/altoslib/AltosTelemetryRecordLocation.java +++ b/altoslib/AltosTelemetryRecordLocation.java @@ -85,7 +85,7 @@ public class AltosTelemetryRecordLocation extends AltosTelemetryRecordRaw {  			next.gps.hdop = hdop;  			next.gps.vdop = vdop;  			next.seen |= AltosRecord.seen_gps_time | AltosRecord.seen_gps_lat | AltosRecord.seen_gps_lon; -			next.new_gps = true; +			next.gps_sequence++;  		}  		return next; | 
