Share telemetry parsing code in cc library.
[fw/altos] / ao-tools / lib / cc.h
index 4e9aadc4f90ea436307ba7ede76d598eb8f72669..fd461e5c6239e8ee05415cb6b6ecf837302c89ba 100644 (file)
@@ -19,6 +19,7 @@
 #define _CC_H_
 
 #include <stdio.h>
+#include <stdint.h>
 
 char *
 cc_fullname (char *dir, char *file);
@@ -90,11 +91,35 @@ struct cc_gpselt {
        double          alt;
 };
 
+#define SIRF_SAT_STATE_ACQUIRED                        (1 << 0)
+#define SIRF_SAT_STATE_CARRIER_PHASE_VALID     (1 << 1)
+#define SIRF_SAT_BIT_SYNC_COMPLETE             (1 << 2)
+#define SIRF_SAT_SUBFRAME_SYNC_COMPLETE                (1 << 3)
+#define SIRF_SAT_CARRIER_PULLIN_COMPLETE       (1 << 4)
+#define SIRF_SAT_CODE_LOCKED                   (1 << 5)
+#define SIRF_SAT_ACQUISITION_FAILED            (1 << 6)
+#define SIRF_SAT_EPHEMERIS_AVAILABLE           (1 << 7)
+
+struct cc_gpssat {
+       double          time;
+       uint16_t        svid;
+       uint8_t         state;
+       uint8_t         c_n;
+};
+
+struct cc_gpssats {
+       int                     nsat;
+       struct cc_gpssat        sat[12];
+};
+
 struct cc_gpsdata {
        int                     num;
        int                     size;
        struct cc_gpselt        *data;
        double                  time_offset;
+       int                     numsats;
+       int                     sizesats;
+       struct cc_gpssats       *sats;
 };
 
 /*
@@ -142,6 +167,9 @@ void
 cc_flightraw_free(struct cc_flightraw *raw);
 
 struct cc_flightcooked {
+       double                  flight_start;
+       double                  flight_stop;
+
        struct cc_perioddata    accel_accel;
        struct cc_perioddata    accel_speed;
        struct cc_perioddata    accel_pos;
@@ -151,6 +179,10 @@ struct cc_flightcooked {
        struct cc_perioddata    gps_lat;
        struct cc_perioddata    gps_lon;
        struct cc_perioddata    gps_alt;
+
+       /* unfiltered, but converted */
+       struct cc_timedata      pres;
+       struct cc_timedata      accel;
        struct cc_timedata      state;
 };
 
@@ -220,6 +252,8 @@ struct cc_telem {
        int     flight_vel;
        int     flight_pres;
        int     ground_pres;
+       int     accel_plus_g;
+       int     accel_minus_g;
        struct cc_gps   gps;
        struct cc_gps_tracking  gps_tracking;
 };
@@ -262,6 +296,9 @@ cc_great_circle (double start_lat, double start_lon,
                 double end_lat, double end_lon,
                 double *dist, double *bearing);
 
+void
+cc_timedata_limits(struct cc_timedata *d, double min_time, double max_time, int *start, int *stop);
+
 int
 cc_timedata_min(struct cc_timedata *d, double min_time, double max_time);
 
@@ -314,7 +351,7 @@ struct cc_timedata *
 cc_timedata_convert(struct cc_timedata *d, double (*f)(double v, double a), double a);
 
 struct cc_timedata *
-cc_timedata_integrate(struct cc_timedata *d);
+cc_timedata_integrate(struct cc_timedata *d, double min_time, double max_time);
 
 struct cc_perioddata *
 cc_perioddata_differentiate(struct cc_perioddata *i);