*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
#define AO_GPS_MODE_MANUAL 'M'
#define AO_GPS_MODE_SIMULATED 'S'
-#define AO_GPS_STATE_VALID 0x80
+#define AO_GPS_MODE_ALTITUDE_24 (1 << 0) /* reports 24-bits of altitude */
struct ao_telemetry_location {
uint16_t serial; /* 0 */
uint8_t type; /* 4 */
uint8_t flags; /* 5 Number of sats and other flags */
- int16_t altitude; /* 6 GPS reported altitude (m) */
+ int16_t altitude_low; /* 6 GPS reported altitude (m) */
int32_t latitude; /* 8 latitude (degrees * 10⁷) */
int32_t longitude; /* 12 longitude (degrees * 10⁷) */
uint8_t year; /* 16 (- 2000) */
uint16_t ground_speed; /* 26 cm/s */
int16_t climb_rate; /* 28 cm/s */
uint8_t course; /* 30 degrees / 2 */
- uint8_t state; /* 31 */
+ int8_t altitude_high; /* 31 */
/* 32 */
};
+typedef int32_t gps_alt_t;
+#define AO_TELEMETRY_LOCATION_ALTITUDE(l) \
+ ((l)->altitude_low | (((l)->mode & AO_GPS_MODE_ALTITUDE_24) ? \
+ ((gps_alt_t) (l)->altitude_high << 16) : 0))
+
#define AO_TELEMETRY_SATELLITE 0x06
struct ao_telemetry_satellite_info {
uint8_t c_n_1;
};
+#define AO_TELEMETRY_SATELLITE_MAX_SAT 12
+
+
struct ao_telemetry_satellite {
uint16_t serial; /* 0 */
uint16_t tick; /* 2 */
uint8_t type; /* 4 */
uint8_t channels; /* 5 number of reported sats */
- struct ao_telemetry_satellite_info sats[12]; /* 6 */
+ struct ao_telemetry_satellite_info sats[AO_TELEMETRY_SATELLITE_MAX_SAT]; /* 6 */
uint8_t unused[2]; /* 30 */
/* 32 */
};
uint16_t companion_data[AO_COMPANION_MAX_CHANNELS]; /* 8 */
/* 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 */
int16_t gyro_z; /* 24 */
int16_t mag_x; /* 26 */
- int16_t mag_y; /* 28 */
int16_t mag_z; /* 30 */
+ int16_t mag_y; /* 28 */
/* 32 */
};
uint16_t serial; /* 0 */
uint16_t tick; /* 2 */
uint8_t type; /* 4 */
+ uint8_t pad5[3]; /* 5 */
int32_t ground_pres; /* 8 average pres on pad */
int16_t ground_accel; /* 12 average accel on pad */
int16_t accel_plus_g; /* 14 accel calibration at +1g */
int16_t accel_minus_g; /* 16 accel calibration at -1g */
- uint8_t pad[14]; /* 18 */
+ uint8_t pad18[14]; /* 18 */
/* 32 */
};
#define AO_TELEMETRY_MINI 0x10
+#define AO_TELEMETRY_MINI3 0x11
struct ao_telemetry_mini {
uint16_t serial; /* 0 */