X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosEepromRecordMega.java;h=57de0a4137406a38b9ca54f9fedd10d8ecc27b1f;hb=HEAD;hp=168b352c652a8a67707a45bb5bb6c516568ea7c4;hpb=a4039a60bbe972fd022699d62ab06a8f1bc4af69;p=fw%2Faltos diff --git a/altoslib/AltosEepromRecordMega.java b/altoslib/AltosEepromRecordMega.java index 168b352c..bf94b676 100644 --- a/altoslib/AltosEepromRecordMega.java +++ b/altoslib/AltosEepromRecordMega.java @@ -12,7 +12,7 @@ * General Public License for more details. */ -package org.altusmetrum.altoslib_13; +package org.altusmetrum.altoslib_14; public class AltosEepromRecordMega extends AltosEepromRecord { public static final int record_length = 32; @@ -34,6 +34,8 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: return data32(16); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(14); @@ -47,6 +49,8 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: return data32(20); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(16); @@ -60,6 +64,8 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: return data32(24); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(18); @@ -85,6 +91,17 @@ public class AltosEepromRecordMega extends AltosEepromRecord { private int mag_z() { return data16(22); } private int mag_y() { return data16(24); } + /* normalized log data */ + private int norm_accel_along() { return data16(8); } + private int norm_accel_across() { return data16(10); } + private int norm_accel_through() { return data16(12); } + private int norm_gyro_roll() { return data16(14); } + private int norm_gyro_pitch() { return data16(16); } + private int norm_gyro_yaw() { return data16(18); } + private int norm_mag_along() { return data16(20); } + private int norm_mag_across() { return data16(22); } + private int norm_mag_through() { return data16(24); } + private int imu_type() { switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: @@ -101,7 +118,39 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } } + private int imu_model() { + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: + return AltosLib.model_mpu6000; + case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + return AltosLib.model_bmi088; + } + return AltosLib.MISSING; + } + + private boolean sensor_normalized() { + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + return true; + } + return false; + } + + private int mag_model() { + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + return AltosLib.model_mmc5983; + } + return AltosLib.MISSING; + } + private int accel_across() { + if (sensor_normalized()) { + return norm_accel_across(); + } + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: @@ -116,6 +165,10 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int accel_along(){ + if (sensor_normalized()) { + return norm_accel_along(); + } + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: @@ -130,10 +183,18 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int accel_through() { + if (sensor_normalized()) { + return norm_accel_through(); + } + return accel_z(); } private int gyro_pitch() { + if (sensor_normalized()) { + return norm_gyro_pitch(); + } + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: @@ -149,6 +210,10 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int gyro_roll() { + if (sensor_normalized()) { + return norm_gyro_roll(); + } + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: @@ -163,10 +228,18 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int gyro_yaw() { + if (sensor_normalized()) { + return norm_gyro_yaw(); + } + return gyro_z(); } private int mag_across() { + if (sensor_normalized()) { + return norm_mag_across(); + } + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: @@ -182,6 +255,10 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int mag_along() { + if (sensor_normalized()) { + return norm_mag_along(); + } + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: @@ -196,6 +273,10 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int mag_through() { + if (sensor_normalized()) { + return norm_mag_through(); + } + return mag_z(); } @@ -240,6 +321,8 @@ public class AltosEepromRecordMega extends AltosEepromRecord { AltosGPS gps; cal_data.set_imu_type(imu_type()); + cal_data.set_imu_model(imu_model()); + cal_data.set_mag_model(mag_model()); switch (cmd()) { case AltosLib.AO_LOG_FLIGHT: @@ -287,16 +370,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { cal_data.mag_across(mag_across), cal_data.mag_through(mag_through)); - - final double lsb_per_g = 1920.0/105.5; - - double acceleration = AltosConvert.acceleration_from_sensor( - accel(), - cal_data.ground_accel, - cal_data.ground_accel + 2 * lsb_per_g, - cal_data.ground_accel); - - listener.set_acceleration(acceleration); + listener.set_acceleration(cal_data.acceleration(accel())); break; case AltosLib.AO_LOG_TEMP_VOLT: listener.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt()));