X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_telemetry.h;h=23e3ed7db7c4a5309f4b76bc7d5db6da424a0a86;hb=HEAD;hp=45aaeb075c2f6d7deb9b0ddda379d37a5feb30b9;hpb=59ac667c4ae14e0fa699fb0f398d31763a237646;p=fw%2Faltos diff --git a/src/kernel/ao_telemetry.h b/src/kernel/ao_telemetry.h index 45aaeb07..983a99b8 100644 --- a/src/kernel/ao_telemetry.h +++ b/src/kernel/ao_telemetry.h @@ -131,8 +131,8 @@ struct ao_telemetry_location { typedef int32_t gps_alt_t; #define AO_TELEMETRY_LOCATION_ALTITUDE(l) (((gps_alt_t) (l)->altitude_high << 16) | ((l)->altitude_low)) #define AO_TELEMETRY_LOCATION_SET_ALTITUDE(l,a) (((l)->mode |= AO_GPS_MODE_ALTITUDE_24), \ - ((l)->altitude_high = (a) >> 16), \ - ((l)->altitude_low = (a))) + ((l)->altitude_high = (int8_t) ((a) >> 16)), \ + ((l)->altitude_low = (uint16_t) (a))) #else typedef int16_t gps_alt_t; #define AO_TELEMETRY_LOCATION_ALTITUDE(l) ((gps_alt_t) (l)->altitude_low) @@ -176,7 +176,8 @@ struct ao_telemetry_companion { /* 32 */ }; -#define AO_TELEMETRY_MEGA_SENSOR 0x08 +#define AO_TELEMETRY_MEGA_SENSOR_MPU 0x08 /* Invensense IMU */ +#define AO_TELEMETRY_MEGA_SENSOR_BMX160 0x12 /* BMX160 IMU */ struct ao_telemetry_mega_sensor { uint16_t serial; /* 0 */ @@ -198,8 +199,8 @@ struct ao_telemetry_mega_sensor { int16_t gyro_z; /* 24 */ int16_t mag_x; /* 26 */ - int16_t mag_y; /* 28 */ - int16_t mag_z; /* 30 */ + int16_t mag_z; /* 28 */ + int16_t mag_y; /* 30 */ /* 32 */ }; @@ -296,6 +297,34 @@ struct ao_telemetry_mini { /* 32 */ }; +#define AO_TELEMETRY_MEGA_NORM_MPU6000_MMC5983 0x13 +#define AO_TELEMETRY_MEGA_NORM_BMI088_MMC5983 0x14 + +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 @@ -333,6 +362,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];