Home | History | Annotate | Line # | Download | only in ntpd
jupiter.h revision 1.1
      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