first cut at turnon scripts for EasyTimer v2
[fw/altos] / ao-tools / lib / cc-telemetry.h
index 9a5be49f9a76d2e9cd2122e951838cf9d5e2eed7..25576fca59252488384a12ecc8c70caacd669829 100644 (file)
@@ -3,7 +3,8 @@
  *
  * 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
@@ -90,13 +91,15 @@ struct ao_telemetry_configuration {
 #define AO_GPS_MODE_MANUAL             'M'
 #define AO_GPS_MODE_SIMULATED          'S'
 
+#define AO_GPS_MODE_ALTITUDE_24                (1 << 0)        /* reports 24-bits of altitude */
+
 struct ao_telemetry_location {
        uint16_t        serial;         /*  0 */
        uint16_t        tick;           /*  2 */
        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) */
@@ -112,10 +115,15 @@ struct ao_telemetry_location {
        uint16_t        ground_speed;   /* 26 cm/s */
        int16_t         climb_rate;     /* 28 cm/s */
        uint8_t         course;         /* 30 degrees / 2 */
-       uint8_t         unused[1];      /* 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 {
@@ -123,13 +131,16 @@ 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 */
 };
@@ -149,15 +160,16 @@ struct ao_telemetry_companion {
        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 */
        uint16_t        tick;           /*  2 */
        uint8_t         type;           /*  4 */
 
-       uint8_t         pad5;           /*  5 */
+       uint8_t         orient;         /*  5 angle from vertical */
        int16_t         accel;          /*  6 Z axis */
 
        int32_t         pres;           /*  8 Pa * 10 */
@@ -172,8 +184,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_y;          /* 28 */
        /* 32 */
 };
        
@@ -201,6 +213,74 @@ struct ao_telemetry_mega_data {
        /* 32 */
 };
 
+#define AO_TELEMETRY_METRUM_SENSOR     0x0A
+
+struct ao_telemetry_metrum_sensor {
+       uint16_t        serial;         /*  0 */
+       uint16_t        tick;           /*  2 */
+       uint8_t         type;           /*  4 */
+
+       uint8_t         state;          /*  5 flight state */
+       int16_t         accel;          /*  6 Z axis */
+
+       int32_t         pres;           /*  8 Pa * 10 */
+       int16_t         temp;           /* 12 °C * 100 */
+
+       int16_t         acceleration;   /* 14 m/s² * 16 */
+       int16_t         speed;          /* 16 m/s * 16 */
+       int16_t         height;         /* 18 m */
+
+       int16_t         v_batt;         /* 20 battery voltage */
+       int16_t         sense_a;        /* 22 apogee continuity sense */
+       int16_t         sense_m;        /* 24 main continuity sense */
+
+       uint8_t         pad[6];         /* 26 */
+       /* 32 */
+};
+       
+#define AO_TELEMETRY_METRUM_DATA       0x0B
+
+struct ao_telemetry_metrum_data {
+       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         pad18[14];      /* 18 */
+       /* 32 */
+};
+
+#define AO_TELEMETRY_MINI              0x10
+#define AO_TELEMETRY_MINI3             0x11
+
+struct ao_telemetry_mini {
+       uint16_t        serial;         /*  0 */
+       uint16_t        tick;           /*  2 */
+       uint8_t         type;           /*  4 */
+
+       uint8_t         state;          /*  5 flight state */
+       int16_t         v_batt;         /*  6 battery voltage */
+       int16_t         sense_a;        /*  8 apogee continuity */
+       int16_t         sense_m;        /* 10 main continuity */
+
+       int32_t         pres;           /* 12 Pa * 10 */
+       int16_t         temp;           /* 16 °C * 100 */
+
+       int16_t         acceleration;   /* 18 m/s² * 16 */
+       int16_t         speed;          /* 20 m/s * 16 */
+       int16_t         height;         /* 22 m */
+
+       int32_t         ground_pres;    /* 24 average pres on pad */
+
+       int32_t         pad28;          /* 28 */
+       /* 32 */
+};
+
 /* #define AO_SEND_ALL_BARO */
 
 #define AO_TELEMETRY_BARO              0x80
@@ -234,6 +314,9 @@ union ao_telemetry_all {
        struct ao_telemetry_companion           companion;
        struct ao_telemetry_mega_sensor         mega_sensor;
        struct ao_telemetry_mega_data           mega_data;
+       struct ao_telemetry_metrum_sensor       metrum_sensor;
+       struct ao_telemetry_metrum_data         metrum_data;
+       struct ao_telemetry_mini                mini;
        struct ao_telemetry_baro                baro;
 };