+ 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;
+ }
+ return AltosLib.MISSING;
+ }
+
+ private boolean sensor_normalized() {
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_5:
+ return true;
+ }
+ return false;
+ }
+
+ private int mag_model() {
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_5:
+ 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();
+ }
+
+