From 8da38e5217f366a7da24a8af4a5ca620fad35df3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 11 Jun 2017 22:39:53 -0700 Subject: [PATCH] altoslib: Adapt to Mag sensor value ordering changes 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 --- altoslib/AltosEepromRecordMega.java | 8 +++--- altoslib/AltosMag.java | 40 ++++++++++---------------- altoslib/AltosTelemetryMegaSensor.java | 8 +++--- 3 files changed, 23 insertions(+), 33 deletions(-) diff --git a/altoslib/AltosEepromRecordMega.java b/altoslib/AltosEepromRecordMega.java index 18d435af..d0da1b7c 100644 --- a/altoslib/AltosEepromRecordMega.java +++ b/altoslib/AltosEepromRecordMega.java @@ -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) diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java index 523a31a5..e24fa11d 100644 --- a/altoslib/AltosMag.java +++ b/altoslib/AltosMag.java @@ -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) { } } diff --git a/altoslib/AltosTelemetryMegaSensor.java b/altoslib/AltosTelemetryMegaSensor.java index 396bdb16..b5e9d13c 100644 --- a/altoslib/AltosTelemetryMegaSensor.java +++ b/altoslib/AltosTelemetryMegaSensor.java @@ -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), -- 2.30.2