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) { |