1106163Sroberto/* @(#) $Header$ (LBL) */ 254359Sroberto 354359Sroberto/* 454359Sroberto * Rockwell Jupiter GPS receiver definitions 554359Sroberto * 654359Sroberto * This is all based on the "Zodiac GPS Receiver Family Designer's 754359Sroberto * Guide" (dated 12/96) 854359Sroberto */ 954359Sroberto 1054359Sroberto#define JUPITER_SYNC 0x81ff /* sync word (book says 0xff81 !?!?) */ 1154359Sroberto#define JUPITER_ALL 0xffff /* disable all output messages */ 1254359Sroberto 1354359Sroberto/* Output messages (sent by the Jupiter board) */ 1454359Sroberto#define JUPITER_O_GPOS 1000 /* geodetic position status */ 1554359Sroberto#define JUPITER_O_EPOS 1001 /* ECEF position status */ 1654359Sroberto#define JUPITER_O_CHAN 1002 /* channel summary */ 1754359Sroberto#define JUPITER_O_VIS 1003 /* visible satellites */ 1854359Sroberto#define JUPITER_O_DGPS 1005 /* differential GPS status */ 1954359Sroberto#define JUPITER_O_MEAS 1007 /* channel measurement */ 2054359Sroberto#define JUPITER_O_ID 1011 /* receiver id */ 2154359Sroberto#define JUPITER_O_USER 1012 /* user-settings output */ 2254359Sroberto#define JUPITER_O_TEST 1100 /* built-in test results */ 2354359Sroberto#define JUPITER_O_MARK 1102 /* measurement time mark */ 2454359Sroberto#define JUPITER_O_PULSE 1108 /* UTC time mark pulse output */ 2554359Sroberto#define JUPITER_O_PORT 1130 /* serial port com parameters in use */ 2654359Sroberto#define JUPITER_O_EUP 1135 /* EEPROM update */ 2754359Sroberto#define JUPITER_O_ESTAT 1136 /* EEPROM status */ 2854359Sroberto 2954359Sroberto/* Input messages (sent to the Jupiter board) */ 3054359Sroberto#define JUPITER_I_PVTINIT 1200 /* geodetic position and velocity */ 3154359Sroberto#define JUPITER_I_USER 1210 /* user-defined datum */ 3254359Sroberto#define JUPITER_I_MAPSEL 1211 /* map datum select */ 3354359Sroberto#define JUPITER_I_ELEV 1212 /* satellite elevation mask control */ 3454359Sroberto#define JUPITER_I_CAND 1213 /* satellite candidate select */ 3554359Sroberto#define JUPITER_I_DGPS 1214 /* differential GPS control */ 3654359Sroberto#define JUPITER_I_COLD 1216 /* cold start control */ 3754359Sroberto#define JUPITER_I_VALID 1217 /* solution validity criteria */ 3854359Sroberto#define JUPITER_I_ALT 1219 /* user-entered altitude input */ 3954359Sroberto#define JUPITER_I_PLAT 1220 /* application platform control */ 4054359Sroberto#define JUPITER_I_NAV 1221 /* nav configuration */ 4154359Sroberto#define JUPITER_I_TEST 1300 /* preform built-in test command */ 4254359Sroberto#define JUPITER_I_RESTART 1303 /* restart command */ 4354359Sroberto#define JUPITER_I_PORT 1330 /* serial port com parameters */ 4454359Sroberto#define JUPITER_I_PROTO 1331 /* message protocol control */ 4554359Sroberto#define JUPITER_I_RDGPS 1351 /* raw DGPS RTCM SC-104 data */ 4654359Sroberto 4754359Srobertostruct jheader { 4854359Sroberto u_short sync; /* (JUPITER_SYNC) */ 4954359Sroberto u_short id; /* message id */ 5054359Sroberto u_short len; /* number of data short wordss (w/o cksum) */ 5154359Sroberto u_char reqid; /* JUPITER_REQID_MASK bits available as id */ 5254359Sroberto u_char flags; /* flags */ 5354359Sroberto u_short hsum; /* header cksum */ 5454359Sroberto}; 5554359Sroberto 5654359Sroberto#define JUPITER_REQID_MASK 0x3f /* bits available as id */ 5754359Sroberto#define JUPITER_FLAG_NAK 0x01 /* negative acknowledgement */ 5854359Sroberto#define JUPITER_FLAG_ACK 0x02 /* acknowledgement */ 5954359Sroberto#define JUPITER_FLAG_REQUEST 0x04 /* request ACK or NAK */ 6054359Sroberto#define JUPITER_FLAG_QUERY 0x08 /* request one shot output message */ 6154359Sroberto#define JUPITER_FLAG_LOG 0x20 /* request periodic output message */ 6254359Sroberto#define JUPITER_FLAG_CONN 0x40 /* enable periodic message */ 6354359Sroberto#define JUPITER_FLAG_DISC 0x80 /* disable periodic message */ 6454359Sroberto 6554359Sroberto#define JUPITER_H_FLAG_BITS \ 6654359Sroberto "\020\1NAK\2ACK\3REQUEST\4QUERY\5MBZ\6LOG\7CONN\10DISC" 6754359Sroberto 6854359Sroberto/* Log request messages (data payload when using JUPITER_FLAG_LOG) */ 6954359Srobertostruct jrequest { 7054359Sroberto u_short trigger; /* if 0, trigger on time trigger on 7154359Sroberto update (e.g. new almanac) */ 7254359Sroberto u_short interval; /* frequency in seconds */ 7354359Sroberto u_short offset; /* offset into minute */ 7454359Sroberto u_short dsum; /* checksum */ 7554359Sroberto}; 7654359Sroberto 7754359Sroberto/* JUPITER_O_GPOS (1000) */ 7854359Srobertostruct jgpos { 7954359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 8054359Sroberto u_short seq; /* sequence number */ 8154359Sroberto u_short sseq; /* sat measurement sequence number */ 8254359Sroberto u_short navval; /* navigation soltuion validity */ 8354359Sroberto u_short navtype; /* navigation solution type */ 8454359Sroberto u_short nmeas; /* # of measurements used in solution */ 8554359Sroberto u_short polar; /* if 1 then polar navigation */ 8654359Sroberto u_short gweek; /* GPS week number */ 8754359Sroberto u_short sweek[2]; /* GPS seconds into week */ 8854359Sroberto u_short nsweek[2]; /* GPS nanoseconds into second */ 8954359Sroberto u_short utcday; /* 1 to 31 */ 9054359Sroberto u_short utcmon; /* 1 to 12 */ 9154359Sroberto u_short utcyear; /* 1980 to 2079 */ 9254359Sroberto u_short utchour; /* 0 to 23 */ 9354359Sroberto u_short utcmin; /* 0 to 59 */ 9454359Sroberto u_short utcsec; /* 0 to 59 */ 9554359Sroberto u_short utcnsec[2]; /* 0 to 999999999 */ 9654359Sroberto u_short lat[2]; /* latitude (radians) */ 9754359Sroberto u_short lon[2]; /* longitude (radians) */ 9854359Sroberto u_short height[2]; /* height (meters) */ 9954359Sroberto u_short gsep; /* geoidal separation */ 10054359Sroberto u_short speed[2]; /* ground speed (meters/sec) */ 10154359Sroberto u_short course; /* true course (radians) */ 10254359Sroberto u_short mvar; 10354359Sroberto u_short climb; 10454359Sroberto u_short mapd; 10554359Sroberto u_short herr[2]; 10654359Sroberto u_short verr[2]; 10754359Sroberto u_short terr[2]; 10854359Sroberto u_short hverr; 10954359Sroberto u_short bias[2]; 11054359Sroberto u_short biassd[2]; 11154359Sroberto u_short drift[2]; 11254359Sroberto u_short driftsd[2]; 11354359Sroberto u_short dsum; /* checksum */ 11454359Sroberto}; 11554359Sroberto#define JUPITER_O_GPOS_NAV_NOALT 0x01 /* altitude used */ 11654359Sroberto#define JUPITER_O_GPOS_NAV_NODGPS 0x02 /* no differential GPS */ 11754359Sroberto#define JUPITER_O_GPOS_NAV_NOSAT 0x04 /* not enough satellites */ 11854359Sroberto#define JUPITER_O_GPOS_NAV_MAXH 0x08 /* exceeded max EHPE */ 11954359Sroberto#define JUPITER_O_GPOS_NAV_MAXV 0x10 /* exceeded max EVPE */ 12054359Sroberto 12154359Sroberto/* JUPITER_O_CHAN (1002) */ 12254359Srobertostruct jchan { 12354359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 12454359Sroberto u_short seq; /* sequence number */ 12554359Sroberto u_short sseq; /* sat measurement sequence number */ 12654359Sroberto u_short gweek; /* GPS week number */ 12754359Sroberto u_short sweek[2]; /* GPS seconds into week */ 12854359Sroberto u_short gpsns[2]; /* GPS nanoseconds from epoch */ 12954359Sroberto struct jchan2 { 13054359Sroberto u_short flags; /* flags */ 13154359Sroberto u_short prn; /* satellite PRN */ 13254359Sroberto u_short chan; /* channel number */ 13354359Sroberto } sat[12]; 13454359Sroberto u_short dsum; 13554359Sroberto}; 13654359Sroberto 13754359Sroberto/* JUPITER_O_VIS (1003) */ 13854359Srobertostruct jvis { 13954359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 14054359Sroberto u_short seq; /* sequence number */ 14154359Sroberto u_short gdop; /* best possible GDOP */ 14254359Sroberto u_short pdop; /* best possible PDOP */ 14354359Sroberto u_short hdop; /* best possible HDOP */ 14454359Sroberto u_short vdop; /* best possible VDOP */ 14554359Sroberto u_short tdop; /* best possible TDOP */ 14654359Sroberto u_short nvis; /* number of visible satellites */ 14754359Sroberto struct jvis2 { 14854359Sroberto u_short prn; /* satellite PRN */ 14954359Sroberto u_short azi; /* satellite azimuth (radians) */ 15054359Sroberto u_short elev; /* satellite elevation (radians) */ 15154359Sroberto } sat[12]; 15254359Sroberto u_short dsum; /* checksum */ 15354359Sroberto}; 15454359Sroberto 15554359Sroberto/* JUPITER_O_ID (1011) */ 15654359Srobertostruct jid { 15754359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 15854359Sroberto u_short seq; /* sequence number */ 15954359Sroberto char chans[20]; /* number of channels (ascii) */ 16054359Sroberto char vers[20]; /* software version (ascii) */ 16154359Sroberto char date[20]; /* software date (ascii) */ 16254359Sroberto char opts[20]; /* software options (ascii) */ 16354359Sroberto char reserved[20]; 16454359Sroberto u_short dsum; /* checksum */ 16554359Sroberto}; 16654359Sroberto 16754359Sroberto/* JUPITER_O_USER (1012) */ 16854359Srobertostruct juser { 16954359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 17054359Sroberto u_short seq; /* sequence number */ 17154359Sroberto u_short status; /* operatinoal status */ 17254359Sroberto u_short coldtmo; /* cold start time-out */ 17354359Sroberto u_short dgpstmo; /* DGPS correction time-out*/ 17454359Sroberto u_short emask; /* elevation mask */ 17554359Sroberto u_short selcand[2]; /* selected candidate */ 17654359Sroberto u_short solflags; /* solution validity criteria */ 17754359Sroberto u_short nsat; /* number of satellites in track */ 17854359Sroberto u_short herr[2]; /* minimum expected horizontal error */ 17954359Sroberto u_short verr[2]; /* minimum expected vertical error */ 18054359Sroberto u_short platform; /* application platform */ 18154359Sroberto u_short dsum; /* checksum */ 18254359Sroberto}; 18354359Sroberto 18454359Sroberto/* JUPITER_O_PULSE (1108) */ 18554359Srobertostruct jpulse { 18654359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 18754359Sroberto u_short seq; /* sequence number */ 18854359Sroberto u_short reserved[5]; 18954359Sroberto u_short sweek[2]; /* GPS seconds into week */ 19054359Sroberto short offs; /* GPS to UTC time offset (seconds) */ 19154359Sroberto u_short offns[2]; /* GPS to UTC offset (nanoseconds) */ 19254359Sroberto u_short flags; /* flags */ 19354359Sroberto u_short dsum; /* checksum */ 19454359Sroberto}; 19554359Sroberto#define JUPITER_O_PULSE_VALID 0x1 /* time mark validity */ 19654359Sroberto#define JUPITER_O_PULSE_UTC 0x2 /* GPS/UTC sync */ 19754359Sroberto 19854359Sroberto/* JUPITER_O_EUP (1135) */ 19954359Srobertostruct jeup { 20054359Sroberto u_short stime[2]; /* set time (10 ms ticks) */ 20154359Sroberto u_short seq; /* sequence number */ 20254359Sroberto u_char dataid; /* data id */ 20354359Sroberto u_char prn; /* satellite PRN */ 20454359Sroberto u_short dsum; /* checksum */ 20554359Sroberto}; 20654359Sroberto 20754359Sroberto/* JUPITER_I_RESTART (1303) */ 20854359Srobertostruct jrestart { 20954359Sroberto u_short seq; /* sequence number */ 21054359Sroberto u_short flags; 21154359Sroberto u_short dsum; /* checksum */ 21254359Sroberto}; 21354359Sroberto#define JUPITER_I_RESTART_INVRAM 0x01 21454359Sroberto#define JUPITER_I_RESTART_INVEEPROM 0x02 21554359Sroberto#define JUPITER_I_RESTART_INVRTC 0x04 21654359Sroberto#define JUPITER_I_RESTART_COLD 0x80 21754359Sroberto 21854359Sroberto/* JUPITER_I_PVTINIT (1200) */ 21954359Srobertostruct jpvtinit { 22054359Sroberto u_short flags; 22154359Sroberto u_short gweek; /* GPS week number */ 22254359Sroberto u_short sweek[2]; /* GPS seconds into week */ 22354359Sroberto u_short utcday; /* 1 to 31 */ 22454359Sroberto u_short utcmon; /* 1 to 12 */ 22554359Sroberto u_short utcyear; /* 1980 to 2079 */ 22654359Sroberto u_short utchour; /* 0 to 23 */ 22754359Sroberto u_short utcmin; /* 0 to 59 */ 22854359Sroberto u_short utcsec; /* 0 to 59 */ 22954359Sroberto u_short lat[2]; /* latitude (radians) */ 23054359Sroberto u_short lon[2]; /* longitude (radians) */ 23154359Sroberto u_short height[2]; /* height (meters) */ 23254359Sroberto u_short speed[2]; /* ground speed (meters/sec) */ 23354359Sroberto u_short course; /* true course (radians) */ 23454359Sroberto u_short climb; 23554359Sroberto u_short dsum; 23654359Sroberto}; 23754359Sroberto#define JUPITER_I_PVTINIT_FORCE 0x01 23854359Sroberto#define JUPITER_I_PVTINIT_GPSVAL 0x02 23954359Sroberto#define JUPITER_I_PVTINIT_UTCVAL 0x04 24054359Sroberto#define JUPITER_I_PVTINIT_POSVAL 0x08 24154359Sroberto#define JUPITER_I_PVTINIT_ALTVAL 0x10 24254359Sroberto#define JUPITER_I_PVTINIT_SPDVAL 0x12 24354359Sroberto#define JUPITER_I_PVTINIT_MAGVAL 0x14 24454359Sroberto#define JUPITER_I_PVTINIT_CLIMBVAL 0x18 24554359Sroberto 24654359Sroberto/* JUPITER_I_PLAT (1220) */ 24754359Srobertostruct jplat { 24854359Sroberto u_short seq; /* sequence number */ 24954359Sroberto u_short platform; /* application platform */ 25054359Sroberto u_short dsum; 25154359Sroberto}; 25254359Sroberto#define JUPITER_I_PLAT_DEFAULT 0 /* default dynamics */ 25354359Sroberto#define JUPITER_I_PLAT_LOW 2 /* pedestrian */ 25454359Sroberto#define JUPITER_I_PLAT_MED 5 /* land (e.g. automobile) */ 25554359Sroberto#define JUPITER_I_PLAT_HIGH 6 /* air */ 256