diff options
| author | Keith Packard <keithp@keithp.com> | 2014-10-04 00:07:39 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-10-04 00:07:39 -0700 | 
| commit | 656d8fe17532ca6c7d1d43996f187df2f14f5395 (patch) | |
| tree | 513d24594df0d409883a4ddbe60e2acf634e93f5 /altoslib | |
| parent | 9521dc63671b69065d27fc1ccba6d20cc90643cb (diff) | |
altoslib: Deal with new Mega log format that has 32-bit gyro cal
This adds parsing for the new log format type to get all 32 bits of
the gyro calibration data.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosEepromChunk.java | 3 | ||||
| -rw-r--r-- | altoslib/AltosEepromFile.java | 3 | ||||
| -rw-r--r-- | altoslib/AltosEepromMega.java | 45 | ||||
| -rw-r--r-- | altoslib/AltosLib.java | 3 | 
4 files changed, 44 insertions, 10 deletions
diff --git a/altoslib/AltosEepromChunk.java b/altoslib/AltosEepromChunk.java index 4d12f564..73a45717 100644 --- a/altoslib/AltosEepromChunk.java +++ b/altoslib/AltosEepromChunk.java @@ -75,7 +75,8 @@ public class AltosEepromChunk {  		case AltosLib.AO_LOG_FORMAT_TELESCIENCE:  			break;  		case AltosLib.AO_LOG_FORMAT_TELEMEGA: -			eeprom = new AltosEepromMega(this, offset); +		case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: +			eeprom = new AltosEepromMega(this, offset, log_format);  			break;  		case AltosLib.AO_LOG_FORMAT_TELEMETRUM:  			eeprom = new AltosEepromMetrum2(this, offset); diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java index a1579b55..c1dc10b5 100644 --- a/altoslib/AltosEepromFile.java +++ b/altoslib/AltosEepromFile.java @@ -94,7 +94,8 @@ public class AltosEepromFile extends AltosStateIterable {  		case AltosLib.AO_LOG_FORMAT_TELEMETRY:  		case AltosLib.AO_LOG_FORMAT_TELESCIENCE:  		case AltosLib.AO_LOG_FORMAT_TELEMEGA: -			body = new AltosEepromIterable(AltosEepromMega.read(input)); +		case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: +			body = new AltosEepromIterable(AltosEepromMega.read(input, start.log_format));  			break;  		case AltosLib.AO_LOG_FORMAT_TELEMETRUM:  			body = new AltosEepromIterable(AltosEepromMetrum2.read(input)); diff --git a/altoslib/AltosEepromMega.java b/altoslib/AltosEepromMega.java index adaa7f31..aaff2410 100644 --- a/altoslib/AltosEepromMega.java +++ b/altoslib/AltosEepromMega.java @@ -26,6 +26,8 @@ public class AltosEepromMega extends AltosEeprom {  	public static final int max_sat = 12; +	private int log_format; +  	public int record_length() { return record_length; }  	/* AO_LOG_FLIGHT elements */ @@ -35,9 +37,36 @@ public class AltosEepromMega extends AltosEeprom {  	public int ground_accel_along() { return data16(8); }  	public int ground_accel_across() { return data16(10); }  	public int ground_accel_through() { return data16(12); } -	public int ground_roll() { return data16(14); } -	public int ground_pitch() { return data16(16); } -	public int ground_yaw() { return data16(18); } +	public int ground_roll() { +		switch (log_format) { +		case AltosLib.AO_LOG_FORMAT_TELEMEGA: +			return data32(16); +		case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: +			return data16(14); +		default: +			return AltosLib.MISSING; +		} +	} +	public int ground_pitch() { +		switch (log_format) { +		case AltosLib.AO_LOG_FORMAT_TELEMEGA: +			return data32(20); +		case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: +			return data16(16); +		default: +			return AltosLib.MISSING; +		} +	} +	public int ground_yaw() { +		switch (log_format) { +		case AltosLib.AO_LOG_FORMAT_TELEMEGA: +			return data32(24); +		case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: +			return data16(18); +		default: +			return AltosLib.MISSING; +		} +	}  	/* AO_LOG_STATE elements */  	public int state() { return data16(0); } @@ -89,7 +118,8 @@ public class AltosEepromMega extends AltosEeprom {  	public int svid(int n) { return data8(2 + n * 2); }  	public int c_n(int n) { return data8(2 + n * 2 + 1); } -	public AltosEepromMega (AltosEepromChunk chunk, int start) throws ParseException { +	public AltosEepromMega (AltosEepromChunk chunk, int start, int log_format) throws ParseException { +		this.log_format = log_format;  		parse_chunk(chunk, start);  	} @@ -221,11 +251,12 @@ public class AltosEepromMega extends AltosEeprom {  		}  	} -	public AltosEepromMega (String line) { +	public AltosEepromMega (String line, int log_format) { +		this.log_format = log_format;  		parse_string(line);  	} -	static public LinkedList<AltosEeprom> read(FileInputStream input) { +	static public LinkedList<AltosEeprom> read(FileInputStream input, int log_format) {  		LinkedList<AltosEeprom> megas = new LinkedList<AltosEeprom>();  		for (;;) { @@ -234,7 +265,7 @@ public class AltosEepromMega extends AltosEeprom {  				if (line == null)  					break;  				try { -					AltosEepromMega mega = new AltosEepromMega(line); +					AltosEepromMega mega = new AltosEepromMega(line, log_format);  					if (mega.cmd != AltosLib.AO_LOG_INVALID)  						megas.add(mega);  				} catch (Exception e) { diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 2e9dc648..92a22ec7 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -315,11 +315,12 @@ public class AltosLib {  	public static final int AO_LOG_FORMAT_TINY = 2;  	public static final int AO_LOG_FORMAT_TELEMETRY = 3;  	public static final int AO_LOG_FORMAT_TELESCIENCE = 4; -	public static final int AO_LOG_FORMAT_TELEMEGA = 5; +	public static final int AO_LOG_FORMAT_TELEMEGA_OLD = 5;  	public static final int AO_LOG_FORMAT_EASYMINI = 6;  	public static final int AO_LOG_FORMAT_TELEMETRUM = 7;  	public static final int AO_LOG_FORMAT_TELEMINI = 8;  	public static final int AO_LOG_FORMAT_TELEGPS = 9; +	public static final int AO_LOG_FORMAT_TELEMEGA = 10;  	public static final int AO_LOG_FORMAT_NONE = 127;  	public static boolean isspace(int c) {  | 
