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