altoslib: Deal with new Mega log format that has 32-bit gyro cal
authorKeith Packard <keithp@keithp.com>
Sat, 4 Oct 2014 07:07:39 +0000 (00:07 -0700)
committerKeith Packard <keithp@keithp.com>
Sat, 4 Oct 2014 07:07:39 +0000 (00:07 -0700)
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>
altoslib/AltosEepromChunk.java
altoslib/AltosEepromFile.java
altoslib/AltosEepromMega.java
altoslib/AltosLib.java

index 4d12f564057bc92e35ed21ec712269e6bb18f55c..73a45717da7c6c5decbf17ac03796736b06563ef 100644 (file)
@@ -75,7 +75,8 @@ public class AltosEepromChunk {
                case AltosLib.AO_LOG_FORMAT_TELESCIENCE:
                        break;
                case AltosLib.AO_LOG_FORMAT_TELEMEGA:
                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);
                        break;
                case AltosLib.AO_LOG_FORMAT_TELEMETRUM:
                        eeprom = new AltosEepromMetrum2(this, offset);
index a1579b550d86a0e0ce3c925cff7815d3505d7eaa..c1dc10b596e1cd2335613ae8aa9efb5fd65390d7 100644 (file)
@@ -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:
                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));
                        break;
                case AltosLib.AO_LOG_FORMAT_TELEMETRUM:
                        body = new AltosEepromIterable(AltosEepromMetrum2.read(input));
index adaa7f3197f84a1a0d1a5a9b99518fed9bcfa53d..aaff2410ff527588686c723e1efdac26007e7566 100644 (file)
@@ -26,6 +26,8 @@ public class AltosEepromMega extends AltosEeprom {
 
        public static final int max_sat = 12;
 
 
        public static final int max_sat = 12;
 
+       private int log_format;
+
        public int record_length() { return record_length; }
 
        /* AO_LOG_FLIGHT elements */
        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_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); }
 
        /* 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 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);
        }
 
                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);
        }
 
                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 (;;) {
                LinkedList<AltosEeprom> megas = new LinkedList<AltosEeprom>();
 
                for (;;) {
@@ -234,7 +265,7 @@ public class AltosEepromMega extends AltosEeprom {
                                if (line == null)
                                        break;
                                try {
                                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) {
                                        if (mega.cmd != AltosLib.AO_LOG_INVALID)
                                                megas.add(mega);
                                } catch (Exception e) {
index 2e9dc6486a1907f2dc7027de20f3157adba84556..92a22ec77e8a4944856e90313336dac743ad9c1f 100644 (file)
@@ -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_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_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) {
        public static final int AO_LOG_FORMAT_NONE = 127;
 
        public static boolean isspace(int c) {