2 * Copyright © 2009 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
24 cc_fullname (char *dir, char *file);
27 cc_basename(char *file);
37 int serial; /* AltOS always uses simple integer serial numbers */
43 struct cc_usbdev **dev;
48 cc_usbdevs_free(struct cc_usbdevs *usbdevs);
51 cc_usbdevs_scan(void);
54 cc_usbdevs_find_by_arg(char *arg, char *default_product);
57 cc_set_log_dir(char *dir);
63 cc_make_filename(int serial, char *ext);
66 * For sequential data which are not evenly spaced
69 struct cc_timedataelt {
77 struct cc_timedataelt *data;
96 struct cc_gpselt *data;
100 * For sequential data which are evenly spaced
102 struct cc_perioddata {
109 enum ao_flight_state {
110 ao_flight_startup = 0,
116 ao_flight_drogue = 6,
118 ao_flight_landed = 8,
119 ao_flight_invalid = 9
122 struct cc_flightraw {
127 struct cc_timedata accel;
128 struct cc_timedata pres;
129 struct cc_timedata temp;
130 struct cc_timedata volt;
131 struct cc_timedata main;
132 struct cc_timedata drogue;
133 struct cc_timedata state;
134 struct cc_gpsdata gps;
137 struct cc_flightraw *
138 cc_log_read(FILE *file);
141 cc_flightraw_free(struct cc_flightraw *raw);
143 struct cc_flightcooked {
144 struct cc_perioddata accel_accel;
145 struct cc_perioddata accel_speed;
146 struct cc_perioddata accel_pos;
147 struct cc_perioddata pres_pos;
148 struct cc_perioddata pres_speed;
149 struct cc_perioddata pres_accel;
150 struct cc_perioddata gps_lat;
151 struct cc_perioddata gps_lon;
152 struct cc_perioddata gps_alt;
153 struct cc_timedata state;
157 * Telemetry data contents
171 struct cc_gps_time gps_time;
172 double lat; /* degrees (+N -S) */
173 double lon; /* degrees (+E -W) */
176 int gps_extended; /* has extra data */
177 double ground_speed; /* m/s */
178 int course; /* degrees */
179 double climb_rate; /* m/s */
180 double hdop; /* unitless? */
185 #define SIRF_SAT_STATE_ACQUIRED (1 << 0)
186 #define SIRF_SAT_STATE_CARRIER_PHASE_VALID (1 << 1)
187 #define SIRF_SAT_BIT_SYNC_COMPLETE (1 << 2)
188 #define SIRF_SAT_SUBFRAME_SYNC_COMPLETE (1 << 3)
189 #define SIRF_SAT_CARRIER_PULLIN_COMPLETE (1 << 4)
190 #define SIRF_SAT_CODE_LOCKED (1 << 5)
191 #define SIRF_SAT_ACQUISITION_FAILED (1 << 6)
192 #define SIRF_SAT_EPHEMERIS_AVAILABLE (1 << 7)
200 struct cc_gps_tracking {
202 struct cc_gps_sat sats[12];
223 struct cc_gps_tracking gps_tracking;
227 cc_telem_parse(const char *input_line, struct cc_telem *telem);
234 /* Conversion functions */
236 cc_pressure_to_altitude(double pressure);
239 cc_altitude_to_pressure(double altitude);
242 cc_barometer_to_pressure(double baro);
245 cc_barometer_to_altitude(double baro);
248 cc_accelerometer_to_acceleration(double accel, double ground_accel);
251 cc_thermometer_to_temperature(double thermo);
254 cc_battery_to_voltage(double battery);
257 cc_ignitor_to_voltage(double ignite);
260 cc_great_circle (double start_lat, double start_lon,
261 double end_lat, double end_lon,
262 double *dist, double *bearing);
265 cc_timedata_min(struct cc_timedata *d, double min_time, double max_time);
268 cc_timedata_max(struct cc_timedata *d, double min_time, double max_time);