ao-tools/ao-telem: Parse new TM v2 packets
authorKeith Packard <keithp@keithp.com>
Fri, 6 Sep 2013 05:56:57 +0000 (22:56 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 6 Sep 2013 05:56:57 +0000 (22:56 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
ao-tools/ao-telem/ao-telem.c
ao-tools/lib/cc-telemetry.h

index d2dae5a7a14068cbdcc5e21552bc64e61f79b31e..893e2340342bb3b2cfa7781fee121c83f58d63a1 100644 (file)
@@ -194,6 +194,26 @@ main (int argc, char **argv)
                                                telem.mega_data.height);
 
                                        break;
+                               case AO_TELEMETRY_METRUM_SENSOR:
+                                       printf ("state %1d accel %5d pres %9d temp %6.2f acceleration %6.2f speed %6.2f height %5d v_batt %5d sense_a %5d sense_m %5d\n",
+                                               telem.metrum_sensor.state,
+                                               telem.metrum_sensor.accel,
+                                               telem.metrum_sensor.pres,
+                                               telem.metrum_sensor.temp / 100.0,
+                                               telem.metrum_sensor.acceleration / 16.0,
+                                               telem.metrum_sensor.speed / 16.0,
+                                               telem.metrum_sensor.height,
+                                               telem.metrum_sensor.v_batt,
+                                               telem.metrum_sensor.sense_a,
+                                               telem.metrum_sensor.sense_m);
+                                       break;
+                               case AO_TELEMETRY_METRUM_DATA:
+                                       printf ("ground_pres %9d ground_accel %5d accel_plus %5d accel_minus %5d\n",
+                                               telem.metrum_data.ground_pres,
+                                               telem.metrum_data.ground_accel,
+                                               telem.metrum_data.accel_plus_g,
+                                               telem.metrum_data.accel_minus_g);
+                                       break;
                                default:
                                        printf("\n");
                                }
index 9a5be49f9a76d2e9cd2122e951838cf9d5e2eed7..c28aceb895d2385eef28bceb8a0ae1514398a2d3 100644 (file)
@@ -201,6 +201,72 @@ 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 */
+
+       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 */
+       /* 32 */
+};
+
+#define AO_TELEMETRY_MINI              0x10
+
+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 +300,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;
 };