Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: third_party/gpsd/release-2.38/gps.h

Issue 8171006: Fix gps.h license issue, by deleting it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/gpsd/README.chromium ('k') | tools/checklicenses/checklicenses.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* $Id$ */
2 #ifndef _GPSD_GPS_H_
3 #define _GPSD_GPS_H_
4
5 /* gps.h -- interface of the libgps library */
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 #include <sys/types.h>
12 #include <sys/time.h>
13 #include <stdbool.h>
14 #include <inttypes.h> /* stdint.h would be smaller but not all have it */
15 #include <limits.h>
16 #include <time.h>
17 #include <signal.h>
18 #ifndef S_SPLINT_S
19 #include <pthread.h> /* pacifies OpenBSD's compiler */
20 #endif
21
22 #define MAXTAGLEN 8 /* maximum length of sentence tag name */
23 #define MAXCHANNELS 20 /* maximum GPS channels (*not* satellites!) */
24 #define SIRF_CHANNELS 12 /* max channels allowed in SiRF format */
25 #define GPS_PRNMAX 32 /* above this number are SBAS satellites */
26
27 /*
28 * The structure describing an uncertainty volume in kinematic space.
29 * This is what GPSes are meant to produce; all the other info is
30 * technical impedimenta.
31 *
32 * All double values use NAN to indicate data not available.
33 *
34 * Usually all the information in this structure was considered valid
35 * by the GPS at the time of update. This will be so if you are using
36 * a GPS chipset that speaks SiRF binary, Garmin binary, or Zodiac binary.
37 * This covers over 80% of GPS products in early 2005.
38 *
39 * If you are using a chipset that speaks NMEA, this structure is updated
40 * in bits by GPRMC (lat/lon, track, speed), GPGGA (alt, climb), GPGLL
41 * (lat/lon), and GPGSA (eph, epv). Most NMEA GPSes take a single fix
42 * at the beginning of a 1-second cycle and report the same timestamp in
43 * GPRMC, GPGGA, and GPGLL; for these, all info is guaranteed correctly
44 * synced to the time member, but you'll get different stages of the same
45 * update depending on where in the cycle you poll. A very few GPSes,
46 * like the Garmin 48, take a new fix before more than one of of
47 * GPRMC/GPGGA/GPGLL during a single cycle; thus, they may have different
48 * timestamps and some data in this structure can be up to 1 cycle (usually
49 * 1 second) older than the fix time.
50 *
51 * Error estimates are at 95% confidence.
52 */
53 struct gps_fix_t {
54 double time; /* Time of update, seconds since Unix epoch */
55 int mode; /* Mode of fix */
56 #define MODE_NOT_SEEN 0 /* mode update not seen yet */
57 #define MODE_NO_FIX 1 /* none */
58 #define MODE_2D 2 /* good for latitude/longitude */
59 #define MODE_3D 3 /* good for altitude/climb too */
60 double ept; /* Expected time uncertainty */
61 double latitude; /* Latitude in degrees (valid if mode >= 2) */
62 double longitude; /* Longitude in degrees (valid if mode >= 2) */
63 double eph; /* Horizontal position uncertainty, meters */
64 double altitude; /* Altitude in meters (valid if mode == 3) */
65 double epv; /* Vertical position uncertainty, meters */
66 double track; /* Course made good (relative to true north) */
67 double epd; /* Track uncertainty, degrees */
68 double speed; /* Speed over ground, meters/sec */
69 double eps; /* Speed uncertainty, meters/sec */
70 double climb; /* Vertical speed, meters/sec */
71 double epc; /* Vertical speed uncertainty */
72 };
73
74 /*
75 * From the RCTM104 2.x standard:
76 *
77 * "The 30 bit words (as opposed to 32 bit words) coupled with a 50 Hz
78 * transmission rate provides a convenient timing capability where the
79 * times of word boundaries are a rational multiple of 0.6 seconds."
80 *
81 * "Each frame is N+2 words long, where N is the number of message data
82 * words. For example, a filler message (type 6 or 34) with no message
83 * data will have N=0, and will consist only of two header words. The
84 * maximum number of data words allowed by the format is 31, so that
85 * the longest possible message will have a total of 33 words."
86 */
87 #define RTCM2_WORDS_MAX 33
88 #define MAXCORRECTIONS 18 /* max correction count in type 1 or 9 */
89 #define MAXSTATIONS 10 /* maximum stations in almanac, type 5 */
90 /* RTCM104 doesn't specify this, so give it the largest reasonable value */
91 #define MAXHEALTH (RTCM2_WORDS_MAX-2)
92
93 #ifndef S_SPLINT_S
94 /*
95 * A nominally 30-bit word (24 bits of data, 6 bits of parity)
96 * used both in the GPS downlink protocol described in IS-GPS-200
97 * and in the format for DGPS corrections used in RTCM-104v2.
98 */
99 typedef /*@unsignedintegraltype@*/ uint32_t isgps30bits_t;
100 #endif /* S_SPLINT_S */
101
102 typedef enum {gps, glonass, galileo, unknown} navsystem;
103
104 struct rtcm2_t {
105 /* header contents */
106 unsigned type; /* RTCM message type */
107 unsigned length; /* length (words) */
108 double zcount; /* time within hour: GPS time, no leap secs */
109 unsigned refstaid; /* reference station ID */
110 unsigned seqnum; /* message sequence number (modulo 8) */
111 unsigned stathlth; /* station health */
112
113 /* message data in decoded form */
114 union {
115 struct {
116 unsigned int nentries;
117 struct rangesat_t { /* data from messages 1 & 9 */
118 unsigned ident; /* satellite ID */
119 unsigned udre; /* user diff. range error */
120 unsigned issuedata; /* issue of data */
121 double rangerr; /* range error */
122 double rangerate; /* range error rate */
123 } sat[MAXCORRECTIONS];
124 } ranges;
125 struct { /* data for type 3 messages */
126 bool valid; /* is message well-formed? */
127 double x, y, z;
128 } ecef;
129 struct { /* data from type 4 messages */
130 bool valid; /* is message well-formed? */
131 navsystem system;
132 enum {local, global, invalid} sense;
133 char datum[6];
134 double dx, dy, dz;
135 } reference;
136 struct { /* data from type 5 messages */
137 unsigned int nentries;
138 struct consat_t {
139 unsigned ident; /* satellite ID */
140 bool iodl; /* issue of data */
141 unsigned int health; /* is satellite healthy? */
142 #define HEALTH_NORMAL (0) /* Radiobeacon operation normal */
143 #define HEALTH_UNMONITORED (1) /* No integrity monitor operating */
144 #define HEALTH_NOINFO (2) /* No information available */
145 #define HEALTH_DONOTUSE (3) /* Do not use this radiobeacon */
146 int snr; /* signal-to-noise ratio, dB */
147 #define SNR_BAD -1 /* not reported */
148 unsigned int health_en; /* health enabled */
149 bool new_data; /* new data? */
150 bool los_warning; /* line-of-sight warning */
151 unsigned int tou; /* time to unhealth, seconds */
152 } sat[MAXHEALTH];
153 } conhealth;
154 struct { /* data from type 7 messages */
155 unsigned int nentries;
156 struct station_t {
157 double latitude, longitude; /* location */
158 unsigned int range; /* range in km */
159 double frequency; /* broadcast freq */
160 unsigned int health; /* station health */
161 unsigned int station_id; /* of the transmitter */
162 unsigned int bitrate; /* of station transmissions */
163 } station[MAXSTATIONS];
164 } almanac;
165 /* data from type 16 messages */
166 char message[(RTCM2_WORDS_MAX-2) * sizeof(isgps30bits_t)];
167 /* data from messages of unknown type */
168 isgps30bits_t words[RTCM2_WORDS_MAX-2];
169 } msg_data;
170 };
171
172 /* RTCM3 report structures begin here */
173
174 #define RTCM3_MAX_SATELLITES 64
175 #define RTCM3_MAX_DESCRIPTOR 31
176 #define RTCM3_MAX_ANNOUNCEMENTS 32
177
178 struct rtcm3_rtk_hdr { /* header data from 1001, 1002, 1003, 1004 */
179 /* Used for both GPS and GLONASS, but their timebases differ */
180 unsigned int msgnum; /* Message number */
181 unsigned int station_id; /* Reference Station ID */
182 time_t tow; /* GPS Epoch Time (TOW) in ms,
183 or GLONASS Epoch Time in ms */
184 bool sync; /* Synchronous GNSS Message Flag */
185 ushort satcount; /* # Satellite Signals Processed */
186 bool smoothing; /* Divergence-free Smoothing Indicator */
187 ushort interval; /* Smoothing Interval */
188 };
189
190 struct rtcm3_basic_rtk {
191 unsigned char indicator; /* Indicator */
192 unsigned char channel; /* Satellite Frequency Channel Number
193 (GLONASS only) */
194 double pseudorange; /* Pseudorange */
195 double rangediff; /* PhaseRange – Pseudorange in meters */
196 unsigned char locktime; /* Lock time Indicator */
197 };
198
199 struct rtcm3_extended_rtk {
200 unsigned char indicator; /* Indicator */
201 unsigned char channel; /* Satellite Frequency Channel Number
202 (GLONASS only) */
203 double pseudorange; /* Pseudorange */
204 double rangediff; /* PhaseRange – L1 Pseudorange */
205 unsigned char locktime; /* Lock time Indicator */
206 unsigned char ambiguity; /* Integer Pseudorange
207 Modulus Ambiguity */
208 double CNR; /* Carrier-to-Noise Ratio */
209 };
210
211 struct rtcm3_network_rtk_header {
212 unsigned int msgnum; /* Message number */
213 unsigned int network_id; /* Network ID */
214 unsigned int subnetwork_id; /* Subnetwork ID */
215 time_t time; /* GPS Epoch Time (TOW) in ms */
216 bool multimesg; /* GPS Multiple Message Indicator */
217 unsigned master_id; /* Master Reference Station ID */
218 unsigned aux_id; /* Auxilary Reference Station ID */
219 unsigned char satcount; /* count of GPS satellites */
220 };
221
222 struct rtcm3_correction_diff {
223 unsigned char ident; /* satellite ID */
224 enum {reserved, correct, widelane, uncertain} ambiguity;
225 unsigned char nonsync;
226 double geometric_diff; /* Geometric Carrier Phase
227 Correction Difference (1016, 1017) */
228 unsigned char iode; /* GPS IODE (1016, 1017) */
229 double ionospheric_diff; /* Ionospheric Carrier Phase
230 Correction Difference (1015, 1017) */
231 };
232
233 struct rtcm3_t {
234 /* header contents */
235 unsigned type; /* RTCM 3.x message type */
236 unsigned length; /* payload length, inclusive of checksum */
237
238 union {
239 /* 1001-1013 were present in the 3.0 version */
240 struct {
241 struct rtcm3_rtk_hdr header;
242 struct {
243 unsigned ident; /* Satellite ID */
244 struct rtcm3_basic_rtk L1;
245 } rtk_data[RTCM3_MAX_SATELLITES];
246 } rtcm3_1001;
247 struct {
248 struct rtcm3_rtk_hdr header;
249 struct {
250 unsigned ident; /* Satellite ID */
251 struct rtcm3_extended_rtk L1;
252 } rtk_data[RTCM3_MAX_SATELLITES];
253 } rtcm3_1002;
254 struct {
255 struct rtcm3_rtk_hdr header;
256 struct {
257 unsigned ident; /* Satellite ID */
258 struct rtcm3_basic_rtk L1;
259 struct rtcm3_basic_rtk L2;
260 } rtk_data[RTCM3_MAX_SATELLITES];
261 } rtcm3_1003;
262 struct {
263 struct rtcm3_rtk_hdr header;
264 struct {
265 unsigned ident; /* Satellite ID */
266 struct rtcm3_extended_rtk L1;
267 struct rtcm3_extended_rtk L2;
268 } rtk_data[RTCM3_MAX_SATELLITES];
269 } rtcm3_1004;
270 struct {
271 unsigned int station_id; /* Reference Station ID */
272 navsystem system; /* Which system is it? */
273 bool reference_station; /* Reference-station indicator */
274 bool single_receiver; /* Single Receiver Oscillator */
275 double ecef_x, ecef_y, ecef_z; /* ECEF antenna location */
276 } rtcm3_1005;
277 struct {
278 unsigned int station_id; /* Reference Station ID */
279 navsystem system; /* Which system is it? */
280 bool reference_station; /* Reference-station indicator */
281 bool single_receiver; /* Single Receiver Oscillator */
282 double ecef_x, ecef_y, ecef_z; /* ECEF antenna location */
283 double height; /* Antenna height */
284 } rtcm3_1006;
285 struct {
286 unsigned int station_id; /* Reference Station ID */
287 char descriptor[RTCM3_MAX_DESCRIPTOR+1]; /* Description string */
288 unsigned char setup_id;
289 } rtcm3_1007;
290 struct {
291 unsigned int station_id; /* Reference Station ID */
292 char descriptor[RTCM3_MAX_DESCRIPTOR+1]; /* Description string */
293 unsigned char setup_id;
294 char serial[RTCM3_MAX_DESCRIPTOR+1]; /* Serial # string */
295 } rtcm3_1008;
296 struct {
297 struct rtcm3_rtk_hdr header;
298 struct {
299 unsigned ident; /* Satellite ID */
300 struct rtcm3_basic_rtk L1;
301 } rtk_data[RTCM3_MAX_SATELLITES];
302 } rtcm3_1009;
303 struct {
304 struct rtcm3_rtk_hdr header;
305 struct {
306 unsigned ident; /* Satellite ID */
307 struct rtcm3_extended_rtk L1;
308 } rtk_data[RTCM3_MAX_SATELLITES];
309 } rtcm3_1010;
310 struct {
311 struct rtcm3_rtk_hdr header;
312 struct {
313 unsigned ident; /* Satellite ID */
314 struct rtcm3_extended_rtk L1;
315 struct rtcm3_extended_rtk L2;
316 } rtk_data[RTCM3_MAX_SATELLITES];
317 } rtcm3_1011;
318 struct {
319 struct rtcm3_rtk_hdr header;
320 struct {
321 unsigned ident; /* Satellite ID */
322 struct rtcm3_extended_rtk L1;
323 struct rtcm3_extended_rtk L2;
324 } rtk_data[RTCM3_MAX_SATELLITES];
325 } rtcm3_1012;
326 struct {
327 unsigned int msgnum; /* Message number */
328 unsigned int station_id; /* Reference Station ID */
329 unsigned short mjd; /* Modified Julian Day (MJD) Number */
330 unsigned int sod; /* Seconds of Day (UTC) */
331 unsigned char leapsecs; /* Leap Seconds, GPS-UTC */
332 unsigned char ncount; /* Count of announcements to follow */
333 struct {
334 unsigned short id;
335 bool sync;
336 unsigned short interval;
337 } announcements[RTCM3_MAX_ANNOUNCEMENTS];
338 } rtcm3_1013;
339 /* 1014-1017 were added in the 3.1 version */
340 struct {
341 unsigned int msgnum; /* Message number */
342 unsigned int network_id; /* Network ID */
343 unsigned int subnetwork_id; /* Subnetwork ID */
344 unsigned char stationcount; /* # auxiliary stations transmitted */
345 unsigned int master_id; /* Master Reference Station ID */
346 unsigned int aux_id; /* Auxilary Reference Station ID */
347 double d_lat, d_lon, d_alt; /* Aux-master location delta */
348 } rtcm3_1014;
349 struct {
350 struct rtcm3_network_rtk_header header;
351 struct rtcm3_correction_diff corrections[RTCM3_MAX_SATELLITES];
352 } rtcm3_1015;
353 struct {
354 struct rtcm3_network_rtk_header header;
355 struct rtcm3_correction_diff corrections[RTCM3_MAX_SATELLITES];
356 } rtcm3_1016;
357 struct {
358 struct rtcm3_network_rtk_header header;
359 struct rtcm3_correction_diff corrections[RTCM3_MAX_SATELLITES];
360 } rtcm3_1017;
361 struct {
362 unsigned int msgnum; /* Message number */
363 unsigned int ident; /* Satellite ID */
364 unsigned int week; /* GPS Week Number */
365 unsigned char sv_accuracy; /* GPS SV ACCURACY */
366 enum {reserved_code, p, ca, l2c} code;
367 double idot;
368 unsigned char iode;
369 /* ephemeris fields, not scaled */
370 unsigned int t_sub_oc;
371 signed int a_sub_f2;
372 signed int a_sub_f1;
373 signed int a_sub_f0;
374 unsigned int iodc;
375 signed int C_sub_rs;
376 signed int delta_sub_n;
377 signed int M_sub_0;
378 signed int C_sub_uc;
379 unsigned int e;
380 signed int C_sub_us;
381 unsigned int sqrt_sub_A;
382 unsigned int t_sub_oe;
383 signed int C_sub_ic;
384 signed int OMEGA_sub_0;
385 signed int C_sub_is;
386 signed int i_sub_0;
387 signed int C_sub_rc;
388 signed int argument_of_perigee;
389 signed int omegadot;
390 signed int t_sub_GD;
391 unsigned char sv_health;
392 bool p_data;
393 bool fit_interval;
394 } rtcm3_1019;
395 struct {
396 unsigned int msgnum; /* Message number */
397 unsigned int ident; /* Satellite ID */
398 unsigned short channel; /* Satellite Frequency Channel Number */
399 /* ephemeris fields, not scaled */
400 bool C_sub_n;
401 bool health_avAilability_indicator;
402 unsigned char P1;
403 unsigned short t_sub_k;
404 bool msb_of_B_sub_n;
405 bool P2;
406 bool t_sub_b;
407 signed int x_sub_n_t_of_t_sub_b_prime;
408 signed int x_sub_n_t_of_t_sub_b;
409 signed int x_sub_n_t_of_t_sub_b_prime_prime;
410 signed int y_sub_n_t_of_t_sub_b_prime;
411 signed int y_sub_n_t_of_t_sub_b;
412 signed int y_sub_n_t_of_t_sub_b_prime_prime;
413 signed int z_sub_n_t_of_t_sub_b_prime;
414 signed int z_sub_n_t_of_t_sub_b;
415 signed int z_sub_n_t_of_t_sub_b_prime_prime;
416 bool P3;
417 signed int gamma_sub_n_of_t_sub_b;
418 unsigned char MP;
419 bool Ml_n;
420 signed int tau_n_of_t_sub_b;
421 signed int M_delta_tau_sub_n;
422 unsigned int E_sub_n;
423 bool MP4;
424 unsigned char MF_sub_T;
425 unsigned char MN_sub_T;
426 unsigned char MM;
427 bool additioinal_data_availability;
428 unsigned int N_sup_A;
429 unsigned int tau_sub_c;
430 unsigned int M_N_sub_4;
431 signed int M_tau_sub_GPS;
432 bool M_l_sub_n;
433 } rtcm3_1020;
434 struct {
435 unsigned int msgnum; /* Message number */
436 unsigned int station_id; /* Reference Station ID */
437 unsigned short mjd; /* Modified Julian Day (MJD) Number */
438 unsigned int sod; /* Seconds of Day (UTC) */
439 unsigned char len; /* # Chars to follow */
440 unsigned char unicode_units;
441 unsigned char text[128];
442 } rtcm3_1029;
443 } rtcmtypes;
444 };
445
446 typedef /*@unsignedintegraltype@*/ unsigned int gps_mask_t;
447
448 struct gps_data_t {
449 gps_mask_t set; /* has field been set since this was last cleared? */
450 #define ONLINE_SET 0x00000001u
451 #define TIME_SET 0x00000002u
452 #define TIMERR_SET 0x00000004u
453 #define LATLON_SET 0x00000008u
454 #define ALTITUDE_SET 0x00000010u
455 #define SPEED_SET 0x00000020u
456 #define TRACK_SET 0x00000040u
457 #define CLIMB_SET 0x00000080u
458 #define STATUS_SET 0x00000100u
459 #define MODE_SET 0x00000200u
460 #define HDOP_SET 0x00000400u
461 #define VDOP_SET 0x00000800u
462 #define PDOP_SET 0x00001000u
463 #define TDOP_SET 0x00002000u
464 #define GDOP_SET 0x00004000u
465 #define DOP_SET (HDOP_SET|VDOP_SET|PDOP_SET|TDOP_SET|GDOP_SET)
466 #define HERR_SET 0x00008000u
467 #define VERR_SET 0x00010000u
468 #define PERR_SET 0x00020000u
469 #define ERR_SET (HERR_SET | VERR_SET | PERR_SET)
470 #define SATELLITE_SET 0x00040000u
471 #define PSEUDORANGE_SET 0x00080000u
472 #define USED_SET 0x00100000u
473 #define SPEEDERR_SET 0x00200000u
474 #define TRACKERR_SET 0x00400000u
475 #define CLIMBERR_SET 0x00800000u
476 #define DEVICE_SET 0x01000000u
477 #define DEVICELIST_SET 0x02000000u
478 #define DEVICEID_SET 0x04000000u
479 #define ERROR_SET 0x08000000u
480 #define CYCLE_START_SET 0x10000000u
481 #define RTCM2_SET 0x20000000u
482 #define RTCM3_SET 0x40000000u
483 #define FIX_SET (TIME_SET|MODE_SET|TIMERR_SET|LATLON_SET|HERR_SET|ALTITU DE_SET|VERR_SET|TRACK_SET|TRACKERR_SET|SPEED_SET|SPEEDERR_SET|CLIMB_SET|CLIMBERR _SET)
484 double online; /* NZ if GPS is on line, 0 if not.
485 *
486 * Note: gpsd clears this flag when sentences
487 * fail to show up within the GPS's normal
488 * send cycle time. If the host-to-GPS
489 * link is lossy enough to drop entire
490 * sentences, this flag will be
491 * prone to false negatives.
492 */
493
494 struct gps_fix_t fix; /* accumulated PVT data */
495
496 double separation; /* Geoidal separation, MSL - WGS84 (Meters) */
497
498 /* GPS status -- always valid */
499 int status; /* Do we have a fix? */
500 #define STATUS_NO_FIX 0 /* no */
501 #define STATUS_FIX 1 /* yes, without DGPS */
502 #define STATUS_DGPS_FIX 2 /* yes, with DGPS */
503
504 /* precision of fix -- valid if satellites_used > 0 */
505 int satellites_used; /* Number of satellites used in solution */
506 int used[MAXCHANNELS]; /* PRNs of satellites used in solution */
507 double pdop, hdop, vdop, tdop, gdop; /* Dilution of precision */
508
509 /* redundant with the estimate elments in the fix structure */
510 double epe; /* spherical position error, 95% confidence (meters) */
511
512 /* satellite status -- valid when satellites > 0 */
513 int satellites; /* # of satellites in view */
514 int PRN[MAXCHANNELS]; /* PRNs of satellite */
515 int elevation[MAXCHANNELS]; /* elevation of satellite */
516 int azimuth[MAXCHANNELS]; /* azimuth */
517 int ss[MAXCHANNELS]; /* signal-to-noise ratio (dB) */
518
519 #if 0 /* not yet used or filled in */
520 /* measurement data */
521 double pseudorange[MAXCHANNELS]; /* meters */
522 double deltarange[MAXCHANNELS]; /* meters/sec */
523 double doppler[MAXCHANNELS]; /* Hz */
524 unsigned satstat[MAXCHANNELS]; /* tracking status */
525 #define SAT_ACQUIRED 0x01 /* satellite acquired */
526 #define SAT_CODE_TRACK 0x02 /* code-tracking loop acquired */
527 #define SAT_CARR_TRACK 0x04 /* carrier-tracking loop acquired */
528 #define SAT_DATA_SYNC 0x08 /* data-bit synchronization done */
529 #define SAT_FRAME_SYNC 0x10 /* frame synchronization done */
530 #define SAT_EPHEMERIS 0x20 /* ephemeris collected */
531 #define SAT_FIX_USED 0x40 /* used for position fix */
532 #endif
533
534 #if defined(TNT_ENABLE) || defined(OCEANSERVER_ENABLE)
535 /* compass status -- TrueNorth (and any similar) devices only */
536 char headingStatus;
537 char pitchStatus;
538 char rollStatus;
539 double horzField; /* Magnitude of horizontal magnetic field */
540 #endif
541
542 #ifdef OCEANSERVER_ENABLE
543 double magnetic_length; /* unitvector sqrt(x^2 + y^2 +z^2) */
544 double magnetic_field_x;
545 double magnetic_field_y;
546 double magnetic_field_z;
547 double acceleration_length; /* unitvector sqrt(x^2 + y^2 +z^2) */
548 double acceleration_field_x;
549 double acceleration_field_y;
550 double acceleration_field_z;
551 double gyro_output_x;
552 double gyro_output_y;
553 double temperature;
554 #endif
555
556 /* where and what gpsd thinks the device is */
557 char gps_device[PATH_MAX]; /* only valid if non-null. */
558 char *gps_id; /* only valid if non-null. */
559 unsigned int baudrate, parity, stopbits; /* RS232 link parameters */
560 unsigned int driver_mode; /* whether driver is in native mode or not */
561
562 /* RTCM-104 data */
563 struct rtcm2_t rtcm2;
564 struct rtcm3_t rtcm3;
565
566 /* device list */
567 int ndevices; /* count of available devices */
568 char **devicelist; /* list of pathnames */
569
570 /* profiling data for last sentence */
571 bool profiling; /* profiling enabled? */
572 char tag[MAXTAGLEN+1]; /* tag of last sentence processed */
573 size_t sentence_length; /* character count of last sentence */
574 double sentence_time; /* sentence timestamp */
575 double d_xmit_time; /* beginning of sentence transmission */
576 double d_recv_time; /* daemon receipt time (-> E1+T1) */
577 double d_decode_time; /* daemon end-of-decode time (-> D1) */
578 double poll_time; /* daemon poll time (-> W) */
579 double emit_time; /* emission time (-> E2) */
580 double c_recv_time; /* client receipt time (-> T2) */
581 double c_decode_time; /* client end-of-decode time (-> D2) */
582 double cycle, mincycle; /* refresh cycle time in seconds */
583
584 /* these members are private */
585 int gps_fd; /* socket or file descriptor to GPS */
586 void (*raw_hook)(struct gps_data_t *, char *, size_t len, int level);/* Raw- mode hook for GPS data. */
587 void (*thread_hook)(struct gps_data_t *, char *, size_t len, int level);/* T hread-callback hook for GPS data. */
588 };
589
590 extern /*@null@*/ struct gps_data_t *gps_open(const char *host, const char *port );
591 int gps_close(struct gps_data_t *);
592 int gps_query(struct gps_data_t *gpsdata, const char *fmt, ... );
593 int gps_poll(struct gps_data_t *gpsdata);
594 void gps_set_raw_hook(struct gps_data_t *gpsdata, void (*hook)(struct gps_data_t *sentence, char *buf, size_t len, int level));
595 int gps_set_callback(struct gps_data_t *gpsdata, void (*callback)(struct gps_dat a_t *sentence, char *buf, size_t len, int level), pthread_t *handler);
596 int gps_del_callback(struct gps_data_t *gpsdata, pthread_t *handler);
597
598 enum unit {unspecified, imperial, nautical, metric};
599 enum unit gpsd_units(void);
600 enum deg_str_type { deg_dd, deg_ddmm, deg_ddmmss };
601 extern /*@observer@*/ char *deg_to_str( enum deg_str_type type, double f);
602
603 extern void gps_clear_fix(/*@ out @*/struct gps_fix_t *);
604 extern void gps_merge_fix(/*@ out @*/struct gps_fix_t *,
605 gps_mask_t,
606 /*@ in @*/struct gps_fix_t *);
607 extern unsigned int gps_valid_fields(/*@ in @*/struct gps_fix_t *);
608 extern char *gps_show_transfer(int);
609
610 extern time_t mkgmtime(register struct tm *);
611 extern double timestamp(void);
612 extern double iso8601_to_unix(char *);
613 extern /*@observer@*/char *unix_to_iso8601(double t, /*@ out @*/char[], size_t l en);
614 extern double gpstime_to_unix(int, double);
615 extern void unix_to_gpstime(double, /*@out@*/int *, /*@out@*/double *);
616 extern double earth_distance(double, double, double, double);
617 extern double wgs84_separation(double, double);
618
619 /* some multipliers for interpreting GPS output */
620 #define METERS_TO_FEET 3.2808399 /* Meters to U.S./British feet */
621 #define METERS_TO_MILES 0.00062137119 /* Meters to miles */
622 #define KNOTS_TO_MPH 1.1507794 /* Knots to miles per hour */
623 #define KNOTS_TO_KPH 1.852 /* Knots to kilometers per hour */
624 #define KNOTS_TO_MPS 0.51444444 /* Knots to meters per second */
625 #define MPS_TO_KPH 3.6 /* Meters per second to klicks/hr */
626 #define MPS_TO_MPH 2.2369363 /* Meters/second to miles per hour */
627 #define MPS_TO_KNOTS 1.9438445 /* Meters per second to knots */
628 /* miles and knots are both the international standard versions of the units */
629
630 /* angle conversion multipliers */
631 #define GPS_PI 3.1415926535897932384626433832795029
632 #define RAD_2_DEG 57.2957795130823208767981548141051703
633 #define DEG_2_RAD 0.0174532925199432957692369076848861271
634
635 /* gps_open() errno return values */
636 #define NL_NOSERVICE -1 /* can't get service entry */
637 #define NL_NOHOST -2 /* can't get host entry */
638 #define NL_NOPROTO -3 /* can't get protocol entry */
639 #define NL_NOSOCK -4 /* can't create socket */
640 #define NL_NOSOCKOPT -5 /* error SETSOCKOPT SO_REUSEADDR */
641 #define NL_NOCONNECT -6 /* can't connect to host */
642
643 #define DEFAULT_GPSD_PORT "2947" /* IANA assignment */
644 #define DEFAULT_RTCM_PORT "2101" /* IANA assignment */
645
646 #ifdef __cplusplus
647 } /* End of the 'extern "C"' block */
648 #endif
649
650 /* gps.h ends here */
651 #endif /* _GPSD_GPS_H_ */
OLDNEW
« no previous file with comments | « third_party/gpsd/README.chromium ('k') | tools/checklicenses/checklicenses.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698