From: Keith Packard Date: Sun, 19 Sep 2021 21:53:47 +0000 (-0700) Subject: altos: Add normalized telemetry support X-Git-Tag: 1.9.8~1^2~20 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=876a0f9d2a3324e2591e21bcf2dafcfb6009c081 altos: Add normalized telemetry support Just like logs Signed-off-by: Keith Packard --- diff --git a/src/kernel/ao_telemetry.c b/src/kernel/ao_telemetry.c index c2b2eb5a..3074e479 100644 --- a/src/kernel/ao_telemetry.c +++ b/src/kernel/ao_telemetry.c @@ -136,9 +136,41 @@ ao_send_sensor(void) static void ao_send_mega_sensor(void) { - struct ao_data *packet = (struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; + struct ao_data *packet = (struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; telemetry.generic.tick = packet->tick; +#if AO_LOG_NORMALIZED +#if AO_LOG_FORMAT == AO_LOG_FORMAT_TELEMEGA_5 + telemetry.generic.type = AO_TELEMETRY_MEGA_NORM_MPU6000_MMC5983; +#else +#error unknown normalized log type +#endif + +#if HAS_GYRO + telemetry.mega_norm.orient = ao_sample_orient; +#endif + telemetry.mega_norm.accel = ao_data_accel(packet); + telemetry.mega_norm.pres = ao_data_pres(packet); + telemetry.mega_norm.temp = ao_data_temp(packet); + +#if HAS_MPU6000 + telemetry.mega_norm.accel_along = ao_data_along(packet); + telemetry.mega_norm.accel_across = ao_data_across(packet); + telemetry.mega_norm.accel_through = ao_data_through(packet); + + telemetry.mega_norm.gyro_roll = ao_data_roll(packet); + telemetry.mega_norm.gyro_pitch = ao_data_pitch(packet); + telemetry.mega_norm.gyro_yaw = ao_data_yaw(packet); +#endif + +#if HAS_MMC5983 + telemetry.mega_norm.mag_along = ao_data_mag_along(packet); + telemetry.mega_norm.mag_across = ao_data_mag_across(packet); + telemetry.mega_norm.mag_through = ao_data_mag_through(packet); +#endif + +#else + #if HAS_BMX160 telemetry.generic.type = AO_TELEMETRY_MEGA_SENSOR_BMX160; #else @@ -199,7 +231,7 @@ ao_send_mega_sensor(void) telemetry.mega_sensor.mag_z = packet->bmx160.mag_z; telemetry.mega_sensor.mag_y = packet->bmx160.mag_y; #endif - +#endif ao_telemetry_send(); } diff --git a/src/kernel/ao_telemetry.h b/src/kernel/ao_telemetry.h index c7aebe59..b718085f 100644 --- a/src/kernel/ao_telemetry.h +++ b/src/kernel/ao_telemetry.h @@ -297,6 +297,33 @@ struct ao_telemetry_mini { /* 32 */ }; +#define AO_TELEMETRY_MEGA_NORM_MPU6000_MMC5983 0x13 + +struct ao_telemetry_mega_norm { + uint16_t serial; /* 0 */ + uint16_t tick; /* 2 */ + uint8_t type; /* 4 */ + + uint8_t orient; /* 5 angle from vertical */ + int16_t accel; /* 6 Z axis */ + + int32_t pres; /* 8 Pa * 10 */ + int16_t temp; /* 12 °C * 100 */ + + int16_t accel_along; /* 14 */ + int16_t accel_across; /* 16 */ + int16_t accel_through; /* 18 */ + + int16_t gyro_roll; /* 20 */ + int16_t gyro_pitch; /* 22 */ + int16_t gyro_yaw; /* 24 */ + + int16_t mag_along; /* 26 */ + int16_t mag_across; /* 28 */ + int16_t mag_through; /* 30 */ + /* 32 */ +}; + /* #define AO_SEND_ALL_BARO */ #define AO_TELEMETRY_BARO 0x80 @@ -334,6 +361,7 @@ union ao_telemetry_all { struct ao_telemetry_metrum_data metrum_data; struct ao_telemetry_mini mini; struct ao_telemetry_baro baro; + struct ao_telemetry_mega_norm mega_norm; }; typedef char ao_check_telemetry_size[sizeof(union ao_telemetry_all) == 32 ? 1 : -1];