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