1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/* gps.h -- interface of the libgps library */
#include <sys/types.h>
#include <time.h>
#define MAXCHANNELS 12 /* maximum GPS channels (*not* satellites!) */
struct life_t
/* lifetime structure to be associated with some piece of data */
{
time_t last_refresh;
int changed;
};
#define INIT(stamp, now) stamp.last_refresh=now
#define REFRESH(stamp) stamp.last_refresh = time(NULL)
#define SEEN(stamp) stamp.last_refresh
struct gps_data_t {
int online; /* 1 if GPS is on line, 0 if not.
*
* Note: gpsd clears this flag when sentences
* fail to show up within the GPS's normal
* send cycle time. If the host-to-GPS
* link is lossy enough to drop entire
* sentences, this flag will be
* prone to false negatives.
*/
struct life_t online_stamp;
char utc[28]; /* UTC date/time as "yyy-mm-ddThh:mm:ss.sssZ".
*
* Updated on every valid fix (GGA, GLL or
* GPRMC). The hhmmss.ss part is reliable to
* within one GPS send cycle time (normally one
* second). Altitude could be one send cycle
* older than the timestamp if the last
* sentence was GPRMC.
*
* Within one GPS send cycle after any
* midnight, if the last sentence was GGA or
* GLL and not GPRMC, the date could be off by
* one.
*
* The century part of the year is spliced in
* from host-machine time and could be wrong if
* the host and GPS are on opposite sides of
* the International Date Line and it's close
* to midnight of a new century.
*/
/*
* General information about location fields. They're only valid
* when the last_refresh field of the associated timestamp is nonzero,
* in which case it tells when the data was collected.
*/
double latitude; /* Latitude in degrees */
double longitude; /* Longitude in degrees */
struct life_t latlon_stamp;
double altitude; /* Altitude in meters */
struct life_t altitude_stamp;
/* velocity */
double speed; /* Speed over ground, knots */
struct life_t speed_stamp;
double track; /* Course made good (relative to true north) */
struct life_t track_stamp;
/* status of fix */
int status; /* Do we have a fix? */
#define STATUS_NO_FIX 0 /* no */
#define STATUS_FIX 1 /* yes, without DGPS */
#define STATUS_DGPS_FIX 2 /* yes, with DGPS */
struct life_t status_stamp;
int mode; /* Mode of fix */
#define MODE_NO_FIX 1 /* none */
#define MODE_2D 2 /* good for latitude/longitude */
#define MODE_3D 3 /* good for altitude too */
struct life_t mode_stamp;
/* precision of fix */
int satellites_used; /* Number of satellites used in solution */
int used[MAXCHANNELS]; /* Used in last fix? */
double pdop; /* Position dilution of precision */
double hdop; /* Horizontal dilution of precision */
double vdop; /* Vertical dilution of precision */
double separation; /* Geoidal separation [2] */
struct life_t fix_quality_stamp;
/* satellite status */
int satellites; /* # of satellites in view */
int PRN[MAXCHANNELS]; /* PRNs of satellite */
int elevation[MAXCHANNELS]; /* elevation of satellite */
int azimuth[MAXCHANNELS]; /* azimuth */
int ss[MAXCHANNELS]; /* signal strength */
int part, await; /* for tracking GSV parts */
struct life_t satellite_stamp;
/* these members are private */
int gps_fd; /* socket or file descriptor to GPS */
void (*raw_hook)(char *buf); /* raw-mode hook for GPS data */
};
struct gps_data_t *gps_open(char *host, char *port);
int gps_close(struct gps_data_t *);
int gps_query(struct gps_data_t *gpsdata, char *requests);
int gps_poll(struct gps_data_t *gpsdata);
void gps_set_raw_hook(struct gps_data_t *gpsdata, void (*hook)(char *buf));
/* gps_open() error return values */
#define NL_NOSERVICE -1 /* can't get service entry */
#define NL_NOHOST -2 /* can't get host entry */
#define NL_NOPROTO -3 /* can't get protocol entry */
#define NL_NOSOCK -4 /* can't create socket */
#define NL_NOSOCKOPT -5 /* error SETSOCKOPT SO_REUSEADDR */
#define NL_NOCONNECT -6 /* can't connect to host */
#define DEFAULT_GPSD_PORT "2947" /* IANA assignment */
/* gps.h ends here */
|