]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ntp/ntpd/jupiter.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ntp / ntpd / jupiter.h
1 /* @(#) $Header$ (LBL) */
2
3 /*
4  * Rockwell Jupiter GPS receiver definitions
5  *
6  * This is all based on the "Zodiac GPS Receiver Family Designer's
7  * Guide" (dated 12/96)
8  */
9
10 #define JUPITER_SYNC            0x81ff  /* sync word (book says 0xff81 !?!?) */
11 #define JUPITER_ALL             0xffff  /* disable all output messages */
12
13 /* Output messages (sent by the Jupiter board) */
14 #define JUPITER_O_GPOS          1000    /* geodetic position status */
15 #define JUPITER_O_EPOS          1001    /* ECEF position status */
16 #define JUPITER_O_CHAN          1002    /* channel summary */
17 #define JUPITER_O_VIS           1003    /* visible satellites */
18 #define JUPITER_O_DGPS          1005    /* differential GPS status */
19 #define JUPITER_O_MEAS          1007    /* channel measurement */
20 #define JUPITER_O_ID            1011    /* receiver id */
21 #define JUPITER_O_USER          1012    /* user-settings output */
22 #define JUPITER_O_TEST          1100    /* built-in test results */
23 #define JUPITER_O_MARK          1102    /* measurement time mark */
24 #define JUPITER_O_PULSE         1108    /* UTC time mark pulse output */
25 #define JUPITER_O_PORT          1130    /* serial port com parameters in use */
26 #define JUPITER_O_EUP           1135    /* EEPROM update */
27 #define JUPITER_O_ESTAT         1136    /* EEPROM status */
28
29 /* Input messages (sent to the Jupiter board) */
30 #define JUPITER_I_PVTINIT       1200    /* geodetic position and velocity */
31 #define JUPITER_I_USER          1210    /* user-defined datum */
32 #define JUPITER_I_MAPSEL        1211    /* map datum select */
33 #define JUPITER_I_ELEV          1212    /* satellite elevation mask control */
34 #define JUPITER_I_CAND          1213    /* satellite candidate select */
35 #define JUPITER_I_DGPS          1214    /* differential GPS control */
36 #define JUPITER_I_COLD          1216    /* cold start control */
37 #define JUPITER_I_VALID         1217    /* solution validity criteria */
38 #define JUPITER_I_ALT           1219    /* user-entered altitude input */
39 #define JUPITER_I_PLAT          1220    /* application platform control */
40 #define JUPITER_I_NAV           1221    /* nav configuration */
41 #define JUPITER_I_TEST          1300    /* preform built-in test command */
42 #define JUPITER_I_RESTART       1303    /* restart command */
43 #define JUPITER_I_PORT          1330    /* serial port com parameters */
44 #define JUPITER_I_PROTO         1331    /* message protocol control */
45 #define JUPITER_I_RDGPS         1351    /* raw DGPS RTCM SC-104 data */
46
47 struct jheader {
48         u_short sync;           /* (JUPITER_SYNC) */
49         u_short id;             /* message id */
50         u_short len;            /* number of data short wordss (w/o cksum) */
51         u_char reqid;           /* JUPITER_REQID_MASK bits available as id */
52         u_char flags;           /* flags */
53         u_short hsum;           /* header cksum */
54 };
55
56 #define JUPITER_REQID_MASK      0x3f    /* bits available as id */
57 #define JUPITER_FLAG_NAK        0x01    /* negative acknowledgement */
58 #define JUPITER_FLAG_ACK        0x02    /* acknowledgement */
59 #define JUPITER_FLAG_REQUEST    0x04    /* request ACK or NAK */
60 #define JUPITER_FLAG_QUERY      0x08    /* request one shot output message */
61 #define JUPITER_FLAG_LOG        0x20    /* request periodic output message */
62 #define JUPITER_FLAG_CONN       0x40    /* enable periodic message */
63 #define JUPITER_FLAG_DISC       0x80    /* disable periodic message */
64
65 #define JUPITER_H_FLAG_BITS \
66     "\020\1NAK\2ACK\3REQUEST\4QUERY\5MBZ\6LOG\7CONN\10DISC"
67
68 /* Log request messages (data payload when using JUPITER_FLAG_LOG) */
69 struct jrequest {
70         u_short trigger;                /* if 0, trigger on time trigger on
71                                            update (e.g. new almanac) */
72         u_short interval;               /* frequency in seconds */
73         u_short offset;                 /* offset into minute */
74         u_short dsum;                   /* checksum */
75 };
76
77 /* JUPITER_O_GPOS (1000) */
78 struct jgpos {
79         u_short stime[2];               /* set time (10 ms ticks) */
80         u_short seq;                    /* sequence number */
81         u_short sseq;                   /* sat measurement sequence number */
82         u_short navval;                 /* navigation soltuion validity */
83         u_short navtype;                /* navigation solution type */
84         u_short nmeas;                  /* # of measurements used in solution */
85         u_short polar;                  /* if 1 then polar navigation */
86         u_short gweek;                  /* GPS week number */
87         u_short sweek[2];               /* GPS seconds into week */
88         u_short nsweek[2];              /* GPS nanoseconds into second */
89         u_short utcday;                 /* 1 to 31 */
90         u_short utcmon;                 /* 1 to 12 */
91         u_short utcyear;                /* 1980 to 2079 */
92         u_short utchour;                /* 0 to 23 */
93         u_short utcmin;                 /* 0 to 59 */
94         u_short utcsec;                 /* 0 to 59 */
95         u_short utcnsec[2];             /* 0 to 999999999 */
96         u_short lat[2];                 /* latitude (radians) */
97         u_short lon[2];                 /* longitude (radians) */
98         u_short height[2];              /* height (meters) */
99         u_short gsep;                   /* geoidal separation */
100         u_short speed[2];               /* ground speed (meters/sec) */
101         u_short course;                 /* true course (radians) */
102         u_short mvar;
103         u_short climb;
104         u_short mapd;
105         u_short herr[2];
106         u_short verr[2];
107         u_short terr[2];
108         u_short hverr;
109         u_short bias[2];
110         u_short biassd[2];
111         u_short drift[2];
112         u_short driftsd[2];
113         u_short dsum;                   /* checksum */
114 };
115 #define JUPITER_O_GPOS_NAV_NOALT        0x01    /* altitude used */
116 #define JUPITER_O_GPOS_NAV_NODGPS       0x02    /* no differential GPS */
117 #define JUPITER_O_GPOS_NAV_NOSAT        0x04    /* not enough satellites */
118 #define JUPITER_O_GPOS_NAV_MAXH         0x08    /* exceeded max EHPE */
119 #define JUPITER_O_GPOS_NAV_MAXV         0x10    /* exceeded max EVPE */
120
121 /* JUPITER_O_CHAN (1002) */
122 struct jchan {
123         u_short stime[2];               /* set time (10 ms ticks) */
124         u_short seq;                    /* sequence number */
125         u_short sseq;                   /* sat measurement sequence number */
126         u_short gweek;                  /* GPS week number */
127         u_short sweek[2];               /* GPS seconds into week */
128         u_short gpsns[2];               /* GPS nanoseconds from epoch */
129         struct jchan2 {
130                 u_short flags;          /* flags */
131                 u_short prn;            /* satellite PRN */
132                 u_short chan;           /* channel number */
133         } sat[12];
134         u_short dsum;
135 };
136
137 /* JUPITER_O_VIS (1003) */
138 struct jvis {
139         u_short stime[2];               /* set time (10 ms ticks) */
140         u_short seq;                    /* sequence number */
141         u_short gdop;                   /* best possible GDOP */
142         u_short pdop;                   /* best possible PDOP */
143         u_short hdop;                   /* best possible HDOP */
144         u_short vdop;                   /* best possible VDOP */
145         u_short tdop;                   /* best possible TDOP */
146         u_short nvis;                   /* number of visible satellites */
147         struct jvis2 {
148                 u_short prn;            /* satellite PRN */
149                 u_short azi;            /* satellite azimuth (radians) */
150                 u_short elev;           /* satellite elevation (radians) */
151         } sat[12];
152         u_short dsum;                   /* checksum */
153 };
154
155 /* JUPITER_O_ID (1011) */
156 struct jid {
157         u_short stime[2];               /* set time (10 ms ticks) */
158         u_short seq;                    /* sequence number */
159         char chans[20];                 /* number of channels (ascii) */
160         char vers[20];                  /* software version (ascii) */
161         char date[20];                  /* software date (ascii) */
162         char opts[20];                  /* software options (ascii) */
163         char reserved[20];
164         u_short dsum;                   /* checksum */
165 };
166
167 /* JUPITER_O_USER (1012) */
168 struct juser {
169         u_short stime[2];               /* set time (10 ms ticks) */
170         u_short seq;                    /* sequence number */
171         u_short status;                 /* operatinoal status */
172         u_short coldtmo;                /* cold start time-out */
173         u_short dgpstmo;                /* DGPS correction time-out*/
174         u_short emask;                  /* elevation mask */
175         u_short selcand[2];             /* selected candidate */
176         u_short solflags;               /* solution validity criteria */
177         u_short nsat;                   /* number of satellites in track */
178         u_short herr[2];                /* minimum expected horizontal error */
179         u_short verr[2];                /* minimum expected vertical error */
180         u_short platform;               /* application platform */
181         u_short dsum;                   /* checksum */
182 };
183
184 /* JUPITER_O_PULSE (1108) */
185 struct jpulse {
186         u_short stime[2];               /* set time (10 ms ticks) */
187         u_short seq;                    /* sequence number */
188         u_short reserved[5];
189         u_short sweek[2];               /* GPS seconds into week */
190         short offs;                     /* GPS to UTC time offset (seconds) */
191         u_short offns[2];               /* GPS to UTC offset (nanoseconds) */
192         u_short flags;                  /* flags */
193         u_short dsum;                   /* checksum */
194 };
195 #define JUPITER_O_PULSE_VALID           0x1     /* time mark validity */
196 #define JUPITER_O_PULSE_UTC             0x2     /* GPS/UTC sync */
197
198 /* JUPITER_O_EUP (1135) */
199 struct jeup {
200         u_short stime[2];               /* set time (10 ms ticks) */
201         u_short seq;                    /* sequence number */
202         u_char dataid;                  /* data id */
203         u_char prn;                     /* satellite PRN */
204         u_short dsum;                   /* checksum */
205 };
206
207 /* JUPITER_I_RESTART (1303) */
208 struct jrestart {
209         u_short seq;                    /* sequence number */
210         u_short flags;
211         u_short dsum;                   /* checksum */
212 };
213 #define JUPITER_I_RESTART_INVRAM        0x01
214 #define JUPITER_I_RESTART_INVEEPROM     0x02
215 #define JUPITER_I_RESTART_INVRTC        0x04
216 #define JUPITER_I_RESTART_COLD          0x80
217
218 /* JUPITER_I_PVTINIT (1200) */
219 struct jpvtinit {
220         u_short flags;
221         u_short gweek;                  /* GPS week number */
222         u_short sweek[2];               /* GPS seconds into week */
223         u_short utcday;                 /* 1 to 31 */
224         u_short utcmon;                 /* 1 to 12 */
225         u_short utcyear;                /* 1980 to 2079 */
226         u_short utchour;                /* 0 to 23 */
227         u_short utcmin;                 /* 0 to 59 */
228         u_short utcsec;                 /* 0 to 59 */
229         u_short lat[2];                 /* latitude (radians) */
230         u_short lon[2];                 /* longitude (radians) */
231         u_short height[2];              /* height (meters) */
232         u_short speed[2];               /* ground speed (meters/sec) */
233         u_short course;                 /* true course (radians) */
234         u_short climb;
235         u_short dsum;
236 };
237 #define JUPITER_I_PVTINIT_FORCE         0x01
238 #define JUPITER_I_PVTINIT_GPSVAL        0x02
239 #define JUPITER_I_PVTINIT_UTCVAL        0x04
240 #define JUPITER_I_PVTINIT_POSVAL        0x08
241 #define JUPITER_I_PVTINIT_ALTVAL        0x10
242 #define JUPITER_I_PVTINIT_SPDVAL        0x12
243 #define JUPITER_I_PVTINIT_MAGVAL        0x14
244 #define JUPITER_I_PVTINIT_CLIMBVAL      0x18
245
246 /* JUPITER_I_PLAT (1220) */
247 struct jplat {
248         u_short seq;                    /* sequence number */
249         u_short platform;               /* application platform */
250         u_short dsum;
251 };
252 #define JUPITER_I_PLAT_DEFAULT          0       /* default dynamics */
253 #define JUPITER_I_PLAT_LOW              2       /* pedestrian */
254 #define JUPITER_I_PLAT_MED              5       /* land (e.g. automobile) */
255 #define JUPITER_I_PLAT_HIGH             6       /* air */