* 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;
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:
return data32(16);
case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD:
return data16(14);
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:
return data32(20);
case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD:
return data16(16);
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:
return data32(24);
case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD:
return data16(18);
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;
+ }
+ 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();
+ }
+
+
private int accel() { return data16(26); }
/* AO_LOG_TEMP_VOLT elements */
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);
break;
case AltosLib.AO_LOG_STATE:
- System.out.printf("log state %s\n", AltosLib.state_name(state()));
listener.set_state(state());
break;
case AltosLib.AO_LOG_SENSOR:
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);
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()));
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;
}
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)
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);
}
}