X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosEepromRecordMega.java;h=57de0a4137406a38b9ca54f9fedd10d8ecc27b1f;hb=HEAD;hp=371810aba4ba8873be7b6719ef8b41df0327bec7;hpb=f26cfe417c6977cf1e7e75a4f050e25f64d41859;p=fw%2Faltos diff --git a/altoslib/AltosEepromRecordMega.java b/altoslib/AltosEepromRecordMega.java index 371810ab..bf94b676 100644 --- a/altoslib/AltosEepromRecordMega.java +++ b/altoslib/AltosEepromRecordMega.java @@ -12,7 +12,7 @@ * General Public License for more details. */ -package org.altusmetrum.altoslib_11; +package org.altusmetrum.altoslib_14; public class AltosEepromRecordMega extends AltosEepromRecord { public static final int record_length = 32; @@ -31,6 +31,11 @@ public class AltosEepromRecordMega extends AltosEepromRecord { private int ground_roll() { switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: + 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); @@ -41,6 +46,11 @@ public class AltosEepromRecordMega extends AltosEepromRecord { private int ground_pitch() { switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: + 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); @@ -51,6 +61,11 @@ public class AltosEepromRecordMega extends AltosEepromRecord { private int ground_yaw() { switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA: + 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); @@ -73,8 +88,199 @@ 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); } + + /* 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return AltosIMU.imu_type_telemega_v1_v2; + case AltosLib.AO_LOG_FORMAT_TELEMEGA_3: + return AltosIMU.imu_type_telemega_v3; + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + return AltosIMU.imu_type_easymega_v2; + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return AltosIMU.imu_type_telemega_v4; + default: + return AltosLib.MISSING; + } + } + + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return accel_x(); + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return -accel_y(); + default: + return AltosLib.MISSING; + } + } + + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return accel_y(); + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return accel_x(); + default: + return AltosLib.MISSING; + } + } + + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return gyro_x(); + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + return -gyro_y(); + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return -gyro_y(); + default: + return AltosLib.MISSING; + } + } + + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return gyro_y(); + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return gyro_x(); + default: + return AltosLib.MISSING; + } + } + + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return mag_x(); + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + return -mag_y(); + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return mag_y(); + default: + return AltosLib.MISSING; + } + } + + 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: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: + return mag_y(); + case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: + return mag_x(); + default: + return AltosLib.MISSING; + } + } + + private int mag_through() { + if (sensor_normalized()) { + return norm_mag_through(); + } + + return mag_z(); + } + + private int accel() { return data16(26); } /* AO_LOG_TEMP_VOLT elements */ @@ -114,30 +320,18 @@ public class AltosEepromRecordMega extends AltosEepromRecord { AltosGPS gps; - /* Flush any pending GPS changes */ - if (cal_data.gps_pending()) { - switch (cmd()) { - case AltosLib.AO_LOG_GPS_LAT: - case AltosLib.AO_LOG_GPS_LON: - case AltosLib.AO_LOG_GPS_ALT: - case AltosLib.AO_LOG_GPS_SAT: - case AltosLib.AO_LOG_GPS_DATE: - break; - default: - listener.set_gps(cal_data.temp_gps()); - cal_data.reset_temp_gps(); - break; - } - } + 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: cal_data.set_flight(flight()); cal_data.set_ground_accel(ground_accel()); cal_data.set_ground_pressure(ground_pres()); - listener.set_accel_ground(ground_accel_along(), - ground_accel_across(), - ground_accel_through()); + listener.set_accel_ground(cal_data.accel_along(ground_accel_along()), + cal_data.accel_across(ground_accel_across()), + cal_data.accel_through(ground_accel_through())); cal_data.set_gyro_zero(ground_roll() / 512.0, ground_pitch() / 512.0, ground_yaw() / 512.0); @@ -151,16 +345,16 @@ public class AltosEepromRecordMega extends AltosEepromRecord { listener.set_pressure(pt.pres); listener.set_temperature(pt.temp); - int accel_along = accel_y(); - int accel_across = accel_x(); - int accel_through = accel_z(); - int gyro_roll = gyro_y(); - int gyro_pitch = gyro_x(); - int gyro_yaw = gyro_z(); + int accel_along = accel_along(); + int accel_across = accel_across(); + int accel_through = accel_through(); + int gyro_roll = gyro_roll(); + int gyro_pitch = gyro_pitch(); + int gyro_yaw = gyro_yaw(); - int mag_along = mag_x(); - int mag_across = mag_y(); - int mag_through = mag_z(); + int mag_along = mag_along(); + int mag_across = mag_across(); + int mag_through = mag_through(); if (log_format == AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD) cal_data.check_imu_wrap(gyro_roll, gyro_pitch, gyro_yaw); @@ -176,14 +370,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { cal_data.mag_across(mag_across), cal_data.mag_through(mag_through)); - - double acceleration = AltosConvert.acceleration_from_sensor( - accel(), - config_data.accel_cal_plus, - config_data.accel_cal_minus, - AltosLib.MISSING); - - 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())); @@ -198,11 +385,11 @@ public class AltosEepromRecordMega extends AltosEepromRecord { for (int i = 0; i < nsense-2; i++) voltages[i] = AltosConvert.mega_pyro_voltage(sense(i)); - listener.set_ignitor_voltage(voltages); + listener.set_igniter_voltage(voltages); listener.set_pyro_fired(pyro()); break; case AltosLib.AO_LOG_GPS_TIME: - gps = cal_data.make_temp_gps(tick(), false); + gps = listener.make_temp_gps(false); gps.lat = latitude() / 1e7; gps.lon = longitude() / 1e7; @@ -245,7 +432,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { } break; case AltosLib.AO_LOG_GPS_SAT: - gps = cal_data.make_temp_gps(tick(), true); + gps = listener.make_temp_gps(true); int n = nsat(); if (n > max_sat) @@ -263,12 +450,12 @@ public class AltosEepromRecordMega extends AltosEepromRecord { return new AltosEepromRecordMega(eeprom, s); } - public AltosEepromRecordMega(AltosEepromNew eeprom, int start) { + public AltosEepromRecordMega(AltosEeprom eeprom, int start) { super(eeprom, start, record_length); log_format = eeprom.config_data().log_format; } - public AltosEepromRecordMega(AltosEepromNew eeprom) { + public AltosEepromRecordMega(AltosEeprom eeprom) { this(eeprom, 0); } }