altoslib: Adapt to Mag sensor value ordering changes
authorKeith Packard <keithp@keithp.com>
Mon, 12 Jun 2017 05:39:53 +0000 (22:39 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 12 Jun 2017 05:54:22 +0000 (22:54 -0700)
The HMC5883 sensor data is ordered x, z, y. Relabel everything to
match that to preserve compatibility with existing firmware. With the
data correctly ordered, fix the labling of the axes along, across and
through.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosEepromRecordMega.java
altoslib/AltosMag.java
altoslib/AltosTelemetryMegaSensor.java

index 18d435afd7f582c73658c1f7cb2619dcc239188a..d0da1b7ccf4b48f31f10b4ab9626c036fad08804 100644 (file)
@@ -73,8 +73,8 @@ public class AltosEepromRecordMega extends AltosEepromRecord {
        private int gyro_y() { return data16(16); }
        private int gyro_z() { return data16(18); }
        private int mag_x() { return data16(20); }
-       private int mag_y() { return data16(22); }
-       private int mag_z() { return data16(24); }
+       private int mag_z() { return data16(22); }
+       private int mag_y() { return data16(24); }
        private int accel() { return data16(26); }
 
        /* AO_LOG_TEMP_VOLT elements */
@@ -142,8 +142,8 @@ public class AltosEepromRecordMega extends AltosEepromRecord {
                        int     gyro_pitch = gyro_x();
                        int     gyro_yaw = gyro_z();
 
-                       int     mag_along = mag_x();
-                       int     mag_across = mag_y();
+                       int     mag_along = mag_y();
+                       int     mag_across = mag_x();
                        int     mag_through = mag_z();
 
                        if (log_format == AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD)
index 523a31a5edb90f8076a52db1863792c806fbfb4a..e24fa11dafd9031209041739aefde6ccc5e19642 100644 (file)
@@ -22,9 +22,9 @@ import java.util.concurrent.*;
 import java.io.*;
 
 public class AltosMag implements Cloneable {
-       public int              along;
-       public int              across;
-       public int              through;
+       public int              x;
+       public int              z;
+       public int              y;
 
        public static final double counts_per_gauss = 1090;
 
@@ -33,10 +33,6 @@ public class AltosMag implements Cloneable {
        }
 
        public boolean parse_string(String line) {
-//             if (line.startsWith("Syntax error")) {
-//                     along = across = through = 0;
-//                     return true;
-//             }
 
                if (!line.startsWith("X:"))
                        return false;
@@ -44,9 +40,9 @@ public class AltosMag implements Cloneable {
                String[] items = line.split("\\s+");
 
                if (items.length >= 6) {
-                       along = Integer.parseInt(items[1]);
-                       across = Integer.parseInt(items[3]);
-                       through = Integer.parseInt(items[5]);
+                       x = Integer.parseInt(items[1]);
+                       z = Integer.parseInt(items[3]);
+                       y = Integer.parseInt(items[5]);
                }
                return true;
        }
@@ -54,22 +50,16 @@ public class AltosMag implements Cloneable {
        public AltosMag clone() {
                AltosMag n = new AltosMag();
 
-               n.along = along;
-               n.across = across;
-               n.through = through;
+               n.x = x;
+               n.z = z;
+               n.y = y;
                return n;
        }
 
        public AltosMag() {
-               along = AltosLib.MISSING;
-               across = AltosLib.MISSING;
-               through = AltosLib.MISSING;
-       }
-
-       public AltosMag(int along, int across, int through) {
-               this.along = along;
-               this.across = across;
-               this.through = through;
+               x = AltosLib.MISSING;
+               z = AltosLib.MISSING;
+               y = AltosLib.MISSING;
        }
 
        static public void provide_data(AltosDataListener listener, AltosLink link, AltosCalData cal_data) throws InterruptedException {
@@ -77,9 +67,9 @@ public class AltosMag implements Cloneable {
                        AltosMag        mag = new AltosMag(link);
 
                        if (mag != null)
-                               listener.set_mag(cal_data.mag_along(mag.along),
-                                                cal_data.mag_across(mag.across),
-                                                cal_data.mag_through(mag.through));
+                               listener.set_mag(cal_data.mag_along(mag.y),
+                                                cal_data.mag_across(mag.x),
+                                                cal_data.mag_through(mag.z));
                } catch (TimeoutException te) {
                }
        }
index 396bdb16eddfe9aef965d3d6a12b1b23f7446b6f..b5e9d13c0f76ed643351c81d1d0d7e496956fb13 100644 (file)
@@ -34,8 +34,8 @@ public class AltosTelemetryMegaSensor extends AltosTelemetryStandard {
        int     gyro_z() { return int16(24); }
 
        int     mag_x() { return int16(26); }
-       int     mag_y() { return int16(28); }
-       int     mag_z() { return int16(30); }
+       int     mag_z() { return int16(28); }
+       int     mag_y() { return int16(30); }
 
        public AltosTelemetryMegaSensor(int[] bytes) throws AltosCRCException {
                super(bytes);
@@ -64,8 +64,8 @@ public class AltosTelemetryMegaSensor extends AltosTelemetryStandard {
                int     gyro_pitch = gyro_x();
                int     gyro_yaw = gyro_z();
 
-               int     mag_along = mag_x();
-               int     mag_across = mag_y();
+               int     mag_along = mag_y();
+               int     mag_across = mag_x();
                int     mag_through = mag_z();
 
                listener.set_accel(cal_data.accel_along(accel_along),