Eliminate SiRF state values from ao-view.
[fw/altos] / ao-tools / lib / cc.h
index 3975cf1b46d8c470cc4debe3670f78bc441278e4..46b16a8e90d45c81b45938c13870f0324e33e6b8 100644 (file)
@@ -19,6 +19,7 @@
 #define _CC_H_
 
 #include <stdio.h>
+#include <stdint.h>
 
 char *
 cc_fullname (char *dir, char *file);
@@ -75,6 +76,7 @@ struct cc_timedata {
        int                     num;
        int                     size;
        struct cc_timedataelt   *data;
+       double                  time_offset;
 };
 
 
@@ -84,16 +86,43 @@ struct cc_timedata {
 
 struct cc_gpselt {
        double          time;
+       int             hour;
+       int             minute;
+       int             second;
+       int             flags;
        double          lat;
        double          lon;
        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         c_n;
+};
+
+struct cc_gpssats {
+       int                     nsat;
+       struct cc_gpssat        sat[12];
+};
+
 struct cc_gpsdata {
        int                     num;
        int                     size;
-       double                  time_offset;
        struct cc_gpselt        *data;
+       double                  time_offset;
+       int                     numsats;
+       int                     sizesats;
+       struct cc_gpssats       *sats;
 };
 
 /*
@@ -124,6 +153,7 @@ struct cc_flightraw {
        int                     serial;
        double                  ground_accel;
        double                  ground_pres;
+       int                     year, month, day;
        struct cc_timedata      accel;
        struct cc_timedata      pres;
        struct cc_timedata      temp;
@@ -141,6 +171,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;
@@ -150,6 +183,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;
 };
 
@@ -159,6 +196,9 @@ struct cc_flightcooked {
 
 
 struct cc_gps_time {
+       int year;
+       int month;
+       int day;
        int hour;
        int minute;
        int second;
@@ -193,7 +233,6 @@ struct cc_gps {
 
 struct cc_gps_sat {
        int     svid;
-       int     state;
        int     c_n0;
 };
 
@@ -205,6 +244,7 @@ struct cc_gps_tracking {
 struct cc_telem {
        char    callsign[16];
        int     serial;
+       int     flight;
        int     rssi;
        char    state[16];
        int     tick;
@@ -219,6 +259,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;
 };
@@ -261,10 +303,70 @@ 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);
 
+int
+cc_timedata_min_mag(struct cc_timedata *d, double min_time, double max_time);
+
 int
 cc_timedata_max(struct cc_timedata *d, double min_time, double max_time);
 
+int
+cc_timedata_max_mag(struct cc_timedata *d, double min_time, double max_time);
+
+double
+cc_timedata_average(struct cc_timedata *d, double min_time, double max_time);
+
+double
+cc_timedata_average_mag(struct cc_timedata *d, double min_time, double max_time);
+
+int
+cc_perioddata_limits(struct cc_perioddata *d, double min_time, double max_time, int *start, int *stop);
+
+int
+cc_perioddata_min(struct cc_perioddata *d, double min_time, double max_time);
+
+int
+cc_perioddata_min_mag(struct cc_perioddata *d, double min_time, double max_time);
+
+int
+cc_perioddata_max(struct cc_perioddata *d, double min_time, double max_time);
+
+int
+cc_perioddata_max_mag(struct cc_perioddata *d, double min_time, double max_time);
+
+double
+cc_perioddata_average(struct cc_perioddata *d, double min_time, double max_time);
+
+double
+cc_perioddata_average_mag(struct cc_perioddata *d, double min_time, double max_time);
+
+double *
+cc_low_pass(double *data, int data_len, double omega_pass, double omega_stop, double error);
+
+struct cc_perioddata *
+cc_period_make(struct cc_timedata *td, double start_time, double stop_time);
+
+struct cc_perioddata *
+cc_period_low_pass(struct cc_perioddata *raw, double omega_pass, double omega_stop, double error);
+
+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, double min_time, double max_time);
+
+struct cc_perioddata *
+cc_perioddata_differentiate(struct cc_perioddata *i);
+
+struct cc_flightcooked *
+cc_flight_cook(struct cc_flightraw *raw);
+
+void
+cc_flightcooked_free(struct cc_flightcooked *cooked);
+
 #endif /* _CC_H_ */