/contrib/ntp/ntpd/jupiter.h

https://bitbucket.org/freebsd/freebsd-head/ · C++ Header · 255 lines · 216 code · 18 blank · 21 comment · 0 complexity · de4be677a0fa4862a40f6f14bb17a9af MD5 · raw file

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