From 656d8fe17532ca6c7d1d43996f187df2f14f5395 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 4 Oct 2014 00:07:39 -0700 Subject: [PATCH 1/1] 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 --- altoslib/AltosEepromChunk.java | 3 ++- altoslib/AltosEepromFile.java | 3 ++- altoslib/AltosEepromMega.java | 45 ++++++++++++++++++++++++++++------ 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 read(FileInputStream input) { + static public LinkedList read(FileInputStream input, int log_format) { LinkedList megas = new LinkedList(); 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) { -- 2.30.2