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..b9dcea58 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,9 @@ 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return data32(16); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(14); @@ -47,6 +50,9 @@ 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return data32(20); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(16); @@ -60,6 +66,9 @@ 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return data32(24); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(18); @@ -85,6 +94,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 +121,42 @@ 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: + 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 +171,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 +189,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 +216,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 +234,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 +261,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 +279,10 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } private int mag_through() { + if (sensor_normalized()) { + return norm_mag_through(); + } + return mag_z(); } @@ -209,6 +296,15 @@ public class AltosEepromRecordMega extends AltosEepromRecord { private int sense(int i) { return data16(6 + i * 2); } private int pyro() { return data16(26); } + private double pyro_voltage(int sense) { + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: + return AltosConvert.mega_pyro_voltage_30v(sense); + default: + return AltosConvert.mega_pyro_voltage_15v(sense); + } + } + /* AO_LOG_GPS_TIME elements */ private int latitude() { return data32(0); } private int longitude() { return data32(4); } @@ -240,6 +336,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,29 +385,20 @@ 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())); - listener.set_pyro_voltage(AltosConvert.mega_pyro_voltage(v_pbatt())); + listener.set_pyro_voltage(pyro_voltage(v_pbatt())); int nsense = nsense(); - listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-2))); - listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-1))); + listener.set_apogee_voltage(pyro_voltage(sense(nsense-2))); + listener.set_main_voltage(pyro_voltage(sense(nsense-1))); double voltages[] = new double[nsense-2]; for (int i = 0; i < nsense-2; i++) - voltages[i] = AltosConvert.mega_pyro_voltage(sense(i)); + voltages[i] = pyro_voltage(sense(i)); listener.set_igniter_voltage(voltages); listener.set_pyro_fired(pyro());