Annotation of embedaddon/ntp/include/mbg_gps166.h, revision 1.1
1.1 ! misho 1: /*
! 2: * /src/NTP/REPOSITORY/ntp4-dev/include/mbg_gps166.h,v 4.7 2006/06/22 18:41:43 kardel RELEASE_20060622_A
! 3: *
! 4: * mbg_gps166.h,v 4.7 2006/06/22 18:41:43 kardel RELEASE_20060622_A
! 5: *
! 6: * $Created: Sun Jul 20 09:20:50 1997 $
! 7: *
! 8: * File GPSSERIO.H Copyright (c) by Meinberg Funkuhren (www.meinberg.de)
! 9: *
! 10: * Linkage to PARSE:
! 11: * Copyright (c) 1997-2005 by Frank Kardel <kardel <AT> ntp.org>
! 12: *
! 13: * Redistribution and use in source and binary forms, with or without
! 14: * modification, are permitted provided that the following conditions
! 15: * are met:
! 16: * 1. Redistributions of source code must retain the above copyright
! 17: * notice, this list of conditions and the following disclaimer.
! 18: * 2. Redistributions in binary form must reproduce the above copyright
! 19: * notice, this list of conditions and the following disclaimer in the
! 20: * documentation and/or other materials provided with the distribution.
! 21: * 3. Neither the name of the author nor the names of its contributors
! 22: * may be used to endorse or promote products derived from this software
! 23: * without specific prior written permission.
! 24: *
! 25: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
! 26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 28: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
! 29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 35: * SUCH DAMAGE.
! 36: *
! 37: */
! 38: #ifndef MBG_GPS166_H
! 39: #define MBG_GPS166_H
! 40:
! 41:
! 42: /***************************************************************************/
! 43: /* */
! 44: /* File: GPSSERIO.H 4.1 */
! 45: /* */
! 46: /* Project: Common C Library */
! 47: /* */
! 48: /* Compiler: Borland C++ */
! 49: /* */
! 50: /* Author: M. Burnicki, Meinberg Funkuhren */
! 51: /* */
! 52: /* */
! 53: /* Description: */
! 54: /* This file defines structures and codes to be used to access GPS166 */
! 55: /* via its serial interface COM0. COM0 should be set to a high baud */
! 56: /* rate, default is 19200. */
! 57: /* */
! 58: /* Standard GPS166 serial operation is to send a time string that is */
! 59: /* compatible with Meinberg UA31 or PZF535 DCF77 radio remote clocks. */
! 60: /* That string can be transmitted automatically once per second, once */
! 61: /* per minute or on request per ASCII '?'. */
! 62: /* */
! 63: /* Parameter setup or parameter readout works using blocks of binary */
! 64: /* data which have to be isolated from the standard string. A block of */
! 65: /* data starts with a SOH code (ASCII Start Of Header, 0x01) followed */
! 66: /* by a message header with constant length and a data portion with */
! 67: /* variable length. The first field (cmd) of the message header holds */
! 68: /* the command code rsp. the type of data to be transmitted. The next */
! 69: /* field (len) gives the number of data bytes that are transmitted */
! 70: /* after the header. This number ranges from 0 to sizeof( MSG_DATA ). */
! 71: /* The third field (data_csum) holds a checksum of all data bytes and */
! 72: /* the last field of the header finally holds the checksum of the. */
! 73: /* header. */
! 74: /* */
! 75: /***************************************************************************/
! 76:
! 77: /* the control codes defined below are to be or'ed with a command/type code */
! 78:
! 79: #define GPS_REQACK 0x8000 /* to GPS166: request acknowledge */
! 80: #define GPS_ACK 0x4000 /* from GPS166: acknowledge a command */
! 81: #define GPS_NACK 0x2000 /* from GPS166: error receiving command */
! 82:
! 83: #define GPS_CTRL_MSK 0xF000 /* masks control code from command */
! 84:
! 85:
! 86: /* The codes below specify commands/types of data to be supplied to GPS166: */
! 87:
! 88: /* GPS166 auto-message to host */
! 89: /* þ host request, GPS166 response */
! 90: /* þ þ host download to GPS166 */
! 91: /* þ þ þ */
! 92: enum { /* þ þ þ */
! 93: /* system data */
! 94: GPS_AUTO_ON = 0x000, /* þ þ þ X þ enable auto-messages from GPS166 */
! 95: GPS_AUTO_OFF, /* þ þ þ X þ disable auto-messages from GPS166 */
! 96: GPS_SW_REV, /* þ þ X þ þ request software revision */
! 97: GPS_STAT, /* þ þ X þ þ request status of buffered variables */
! 98: GPS_TIME, /* þ X þ þ X þ current time or capture or init board time */
! 99: GPS_POS_XYZ, /* þ þ X þ X þ current position in ECEF coords */
! 100: GPS_POS_LLA, /* þ þ X þ X þ current position in geographic coords */
! 101: GPS_TZDL, /* þ þ X þ X þ time zone / daylight saving */
! 102: GPS_PORT_PARM, /* þ þ X þ X þ parameters of the serial ports */
! 103: GPS_SYNTH, /* þ þ X þ X þ synthesizer's frequency and phase */
! 104: GPS_ANT_INFO, /* þ X þ X þ þ time diff after antenna disconnect */
! 105: GPS_UCAP, /* þ X þ X þ þ user capture */
! 106:
! 107: /* GPS data */
! 108: GPS_CFGH = 0x100, /* þ þ X þ X þ SVs' configuration and health codes */
! 109: GPS_ALM, /* þ þ X þ X þ one SV's almanac */
! 110: GPS_EPH, /* þ þ X þ X þ one SV's ephemeris */
! 111: GPS_UTC, /* þ þ X þ X þ UTC correction parameters */
! 112: GPS_IONO, /* þ þ X þ X þ ionospheric correction parameters */
! 113: GPS_ASCII_MSG /* þ þ X þ þ the GPS ASCII message */
! 114: };
! 115:
! 116: /*
! 117: * modelled after GPSDEFS.H Revision 1.5
! 118: */
! 119: /***************************************************************************/
! 120: /* */
! 121: /* File: GPSDEFS.H 4.1 */
! 122: /* */
! 123: /* Project: Common C Library */
! 124: /* */
! 125: /* Compiler: Borland C++ */
! 126: /* */
! 127: /* Author: M. Burnicki, Meinberg Funkuhren */
! 128: /* */
! 129: /* */
! 130: /* Description: */
! 131: /* General definitions to be used with GPS166 */
! 132: /* GPS166 Rev. 1.23 or above */
! 133: /* */
! 134: /* Modifications: see file GPSLIB.TXT */
! 135: /* */
! 136: /***************************************************************************/
! 137: #define _GPSDEFS_H
! 138: /* the type of various checksums */
! 139:
! 140: #ifndef _CSUM_DEFINED
! 141: typedef unsigned short CSUM;
! 142: # define _CSUM_DEFINED
! 143: #endif
! 144:
! 145: /* the message header */
! 146:
! 147: typedef struct {
! 148: unsigned short gps_cmd;
! 149: unsigned short gps_len;
! 150: unsigned short gps_data_csum;
! 151: unsigned short gps_hdr_csum;
! 152: } GPS_MSG_HDR;
! 153:
! 154: /* a struct used to hold the software revision information */
! 155:
! 156: typedef struct {
! 157: unsigned short code; /* e.g. 0x0120 means rev. 1.20 */
! 158: unsigned char name[17]; /* used to identify customized versions */
! 159: } SW_REV;
! 160:
! 161: /* GPS ASCII message */
! 162:
! 163: typedef struct {
! 164: CSUM csum; /* checksum of the remaining bytes */
! 165: short valid; /* flag data are valid */
! 166: char s[23]; /* 22 chars GPS ASCII message plus trailing zero */
! 167: } ASCII_MSG;
! 168:
! 169: #define MIN_SVNO 1 /* min. SV number */
! 170: #define MAX_SVNO 32 /* max. SV number */
! 171: #define N_SVNO ( MAX_SVNO - MIN_SVNO + 1) /* number of possibly active SVs */
! 172:
! 173:
! 174: typedef short SVNO; /* the number of a SV */
! 175: typedef unsigned short HEALTH; /* a SV's health code */
! 176: typedef unsigned short CFG; /* a SV's configuration code */
! 177: typedef unsigned short IOD; /* Issue-Of-Data code */
! 178:
! 179: /* Date and time referred to the linear time scale defined by GPS. */
! 180: /* GPS time is defined by the number of weeks since midnight from */
! 181: /* January 5, 1980 to January 6, 1980 plus the number of seconds of */
! 182: /* the current week plus fractions of a second. GPS time differs from */
! 183: /* UTC because UTC is corrected with leap seconds while GPS time scale */
! 184: /* is continuous. */
! 185:
! 186: typedef struct {
! 187: unsigned short wn; /* the week number since GPS has been installed */
! 188: unsigned long sec; /* the second of that week */
! 189: unsigned long tick; /* fractions of a second; scale: 1E-7 */
! 190: } T_GPS;
! 191:
! 192:
! 193: /* Local date and time computed from GPS time. The current number */
! 194: /* of leap seconds have to be added to get UTC from GPS time. */
! 195: /* Additional corrections could have been made according to the */
! 196: /* time zone/daylight saving parameters (TZDL, see below) defined */
! 197: /* by the user. The status field can be checked to see which corrections */
! 198: /* have been applied. */
! 199:
! 200: #ifndef _TM_DEFINED
! 201: typedef struct {
! 202: short year; /* 0..9999 */
! 203: char month; /* 1..12 */
! 204: char mday; /* 1..31 */
! 205: short yday; /* 1..366 */
! 206: char wday; /* 0..6 == Sun..Sat */
! 207: char hour; /* 0..23 */
! 208: char minute; /* 0..59 */
! 209: char second; /* 0..59 */
! 210: long frac; /* fractions of a second, scale 1E-7 */
! 211: long offs_from_utc; /* local time's offset from UTC */
! 212: unsigned short status; /* flags */
! 213: } TM;
! 214:
! 215: /* status flags used with conversion from GPS time to local time */
! 216:
! 217: # define TM_UTC 0x01 /* UTC correction has been made */
! 218: # define TM_LOCAL 0x02 /* UTC has been converted to local time */
! 219: # define TM_DL_ANN 0x04 /* state of daylight saving is going to change */
! 220: # define TM_DL_ENB 0x08 /* daylight saving is enabled */
! 221: # define TM_LS_ANN 0x10 /* leap second will be inserted */
! 222: # define TM_LS_ENB 0x20 /* current second is leap second */
! 223:
! 224: # define _TM_DEFINED
! 225: #endif
! 226:
! 227:
! 228: /* the status flags below are defined starting with rev. 1.32 */
! 229:
! 230: #define TM_ANT_DISCONN 0x1000 /* antenna currently disconnected */
! 231: #define TM_SYN_FLAG 0x2000 /* TIME_SYN output is low */
! 232: #define TM_NO_SYNC 0x4000 /* not sync'ed after reset */
! 233: #define TM_NO_POS 0x8000 /* position not computed after reset, */
! 234: /* LOCK LED off */
! 235:
! 236: /* a struct used to transmit information on date and time */
! 237:
! 238: typedef struct {
! 239: short channel; /* -1: the current time; 0, 1: capture 0, 1 */
! 240: T_GPS t; /* time in GPS format */
! 241: TM tm; /* that time converted to local time */
! 242: } TTM;
! 243:
! 244:
! 245:
! 246: /* Two types of variables used to store a position. Type XYZ is */
! 247: /* used with a position in earth centered, earth fixed (ECEF) */
! 248: /* coordinates whereas type LLA holds such a position converted */
! 249: /* to geographic coordinates as defined by WGS84 (World Geodetic */
! 250: /* System from 1984). */
! 251:
! 252: #ifndef _XYZ_DEFINED
! 253: /* sequence and number of components of a cartesian position */
! 254: enum { XP, YP, ZP, N_XYZ };
! 255:
! 256: /* a type of array holding a cartesian position */
! 257: typedef l_fp XYZ[N_XYZ]; /* values are in [m] */
! 258:
! 259: # define _XYZ_DEFINED
! 260: #endif
! 261:
! 262:
! 263: #ifndef _LLA_DEFINED
! 264: /* sequence and number of components of a geographic position */
! 265: enum { LAT, LON, ALT, N_LLA }; /* latitude, longitude, altitude */
! 266:
! 267: /* a type of array holding a geographic position */
! 268: typedef l_fp LLA[N_LLA]; /* lon, lat in [rad], alt in [m] */
! 269:
! 270: # define _LLA_DEFINED
! 271: #endif
! 272:
! 273: /* Synthesizer parameters. Synthesizer frequency is expressed as a */
! 274: /* four digit decimal number (freq) to be multiplied by 0.1 Hz and an */
! 275: /* base 10 exponent (range). If the effective frequency is less than */
! 276: /* 10 kHz its phase is synchronized corresponding to the variable phase. */
! 277: /* Phase may be in a range from -360° to +360° with a resolution of 0.1°, */
! 278: /* so the resulting numbers to be stored are in a range of -3600 to +3600. */
! 279:
! 280: /* Example: */
! 281: /* Assume the value of freq is 2345 (decimal) and the value of phase is 900. */
! 282: /* If range == 0 the effective frequency is 234.5 Hz with a phase of +90°. */
! 283: /* If range == 1 the synthesizer will generate a 2345 Hz output frequency */
! 284: /* and so on. */
! 285:
! 286: /* Limitations: */
! 287: /* If freq == 0 the synthesizer is disabled. If range == 0 the least */
! 288: /* significant digit of freq is limited to 0, 3, 5 or 6. The resulting */
! 289: /* frequency is shown in the examples below: */
! 290: /* freq == 1230 --> 123.0 Hz */
! 291: /* freq == 1233 --> 123 1/3 Hz (real 1/3 Hz, NOT 123.3 Hz) */
! 292: /* freq == 1235 --> 123.5 Hz */
! 293: /* freq == 1236 --> 123 2/3 Hz (real 2/3 Hz, NOT 123.6 Hz) */
! 294:
! 295: /* If range == MAX_RANGE the value of freq must not exceed 1200, so the */
! 296: /* output frequency is limited to 12 MHz. */
! 297:
! 298: /* Phase will be ignored if the resulting frequency is greater or equal */
! 299: /* to 10 kHz. */
! 300:
! 301: #define MAX_SYNTH_FREQ 1200 /* if range == MAX_SYNTH_RANGE */
! 302: #define MIN_SYNTH_RANGE 0
! 303: #define MAX_SYNTH_RANGE 5
! 304: #define MAX_SYNTH_PHASE 3600
! 305:
! 306: typedef struct {
! 307: short freq; /* four digits used; scale: 0.1; e.g. 1234 -> 123.4 Hz */
! 308: short range; /* scale factor for freq; 0..MAX_SYNTH_RANGE */
! 309: short phase; /* -MAX_SYNTH_PHASE..+MAX_SYNTH_PHASE; >0 -> pulses later */
! 310: } SYNTH;
! 311:
! 312:
! 313:
! 314: /* Time zone/daylight saving parameters. */
! 315:
! 316: /* the name of a time zone, 5 characters plus trailing zero */
! 317: typedef char TZ_NAME[6];
! 318:
! 319: typedef struct {
! 320: long offs; /* offset from UTC to local time [sec] */
! 321: long offs_dl; /* additional offset if daylight saving enabled [sec] */
! 322: TM tm_on; /* date/time when daylight saving starts */
! 323: TM tm_off; /* date/time when daylight saving ends */
! 324: TZ_NAME name[2]; /* names without and with daylight saving enabled */
! 325: } TZDL;
! 326:
! 327: /* The constant below is defined beginning with software rev. 1.29. */
! 328: /* If the year in tzdl.tmon and tzdl.tm_off is or'ed with that constant, */
! 329: /* the receiver automatically generates daylight saving year by year. */
! 330: /* See GPSLIB.TXT for more information. */
! 331:
! 332: #define DL_AUTO_FLAG 0x8000
! 333:
! 334: /* Example: */
! 335: /* for automatic daylight saving enable/disable in Central Europe, */
! 336: /* the variables are to be set as shown below: */
! 337: /* offs = 3600L one hour from UTC */
! 338: /* offs_dl = 3600L one additional hour if daylight saving enabled */
! 339: /* tm_on = first Sunday from March 25, 02:00:00h ( year |= DL_AUTO_FLAG ) */
! 340: /* tm_off = first Sunday from Sept 24, 03:00:00h ( year |= DL_AUTO_FLAG ) */
! 341: /* name[0] == "MEZ " name if daylight saving not enabled */
! 342: /* name[1] == "MESZ " name if daylight saving is enabled */
! 343:
! 344:
! 345:
! 346:
! 347: /* the structure below was defined in rev. 1.31. It reflects the status */
! 348: /* of the antenna, the times of last disconnect/reconnect and the boards */
! 349: /* clock offset after the phase of disconnection. */
! 350:
! 351: typedef struct {
! 352: short status; /* current status of antenna */
! 353: TM tm_disconn; /* time of antenna disconnect */
! 354: TM tm_reconn; /* time of antenna reconnect */
! 355: long delta_t; /* clock offset at reconnect time, units: TICKS_PER_SEC */
! 356: } ANT_INFO;
! 357:
! 358:
! 359: /* the status field may be set to one of the values below: */
! 360:
! 361: enum {
! 362: ANT_INVALID, /* struct not set yet because ant. has not been disconn. */
! 363: ANT_DISCONN, /* ant. now disconn., tm_reconn and delta_t not set */
! 364: ANT_RECONN /* ant. has been disconn. and reconn., all fields valid */
! 365: };
! 366:
! 367:
! 368: /* Summary of configuration and health data of all SVs. */
! 369:
! 370: typedef struct {
! 371: CSUM csum; /* checksum of the remaining bytes */
! 372: short valid; /* flag data are valid */
! 373:
! 374: T_GPS tot_51; /* time of transmission, page 51 */
! 375: T_GPS tot_63; /* time of transmission, page 63 */
! 376: T_GPS t0a; /* complete reference time almanac */
! 377:
! 378: CFG cfg[N_SVNO]; /* SV configuration from page 63 */
! 379: HEALTH health[N_SVNO]; /* SV health from pages 51, 63 */
! 380: } CFGH;
! 381:
! 382:
! 383:
! 384: /* UTC correction parameters */
! 385:
! 386: typedef struct {
! 387: CSUM csum; /* checksum of the remaining bytes */
! 388: short valid; /* flag data are valid */
! 389:
! 390: T_GPS t0t; /* Reference Time UTC Parameters [sec] */
! 391: l_fp A0; /* ± Clock Correction Coefficient 0 [sec] */
! 392: l_fp A1; /* ± Clock Correction Coefficient 1 [sec/sec] */
! 393:
! 394: u_short WNlsf; /* week number of nearest leap second */
! 395: short DNt; /* the day number at the end of which LS is inserted */
! 396: char delta_tls; /* */
! 397: char delta_tlsf; /* */
! 398:
! 399: } UTC;
! 400:
! 401: /* a struct used to hold the settings of a serial port */
! 402:
! 403: #ifndef _COM_PARM_DEFINED
! 404: typedef long BAUD_RATE;
! 405:
! 406: /* indices used to identify a parameter in the framing string */
! 407: enum { F_DBITS, F_PRTY, F_STBITS };
! 408:
! 409: /* types of handshake */
! 410: enum { HS_NONE, HS_XONXOFF, HS_RTSCTS };
! 411:
! 412: typedef struct {
! 413: BAUD_RATE baud_rate; /* e.g. 19200L */
! 414: char framing[4]; /* e.g. "8N1" */
! 415: short handshake; /* a numeric value, only HS_NONE supported yet */
! 416: } COM_PARM;
! 417:
! 418: #define _COM_PARM_DEFINED
! 419: #endif
! 420:
! 421:
! 422:
! 423: /* the codes below define what has to comes out of the serial ports */
! 424:
! 425: enum { STR_ON_REQ, STR_PER_SEC,
! 426: STR_PER_MIN, N_STR_MODE_0, /* COM0 and COM1 */
! 427: STR_UCAP = N_STR_MODE_0,
! 428: STR_UCAP_REQ, N_STR_MODE_1 /* COM1 only */
! 429: };
! 430:
! 431:
! 432: #define N_COM 2 /* the number of serial ports */
! 433:
! 434: /* the structure used to store the modes of both serial ports */
! 435:
! 436: typedef struct {
! 437: COM_PARM com[N_COM]; /* COM0 and COM1 settings */
! 438: u_char mode[N_COM]; /* COM0 and COM1 output mode */
! 439: } PORT_PARM;
! 440:
! 441: /* Ephemeris parameters of one specific SV. Needed to compute the position */
! 442: /* of a satellite at a given time with high precision. Valid for an */
! 443: /* interval of 4 to 6 hours from start of transmission. */
! 444:
! 445: typedef struct {
! 446: CSUM csum; /* checksum of the remaining bytes */
! 447: short valid; /* flag data are valid */
! 448:
! 449: HEALTH health; /* health indication of transmitting SV [---] */
! 450: IOD IODC; /* Issue Of Data, Clock */
! 451: IOD IODE2; /* Issue of Data, Ephemeris (Subframe 2) */
! 452: IOD IODE3; /* Issue of Data, Ephemeris (Subframe 3) */
! 453: T_GPS tt; /* time of transmission */
! 454: T_GPS t0c; /* Reference Time Clock [---] */
! 455: T_GPS t0e; /* Reference Time Ephemeris [---] */
! 456:
! 457: l_fp sqrt_A; /* Square Root of semi-major Axis [sqrt(m)] */
! 458: l_fp e; /* Eccentricity [---] */
! 459: l_fp M0; /* ± Mean Anomaly at Ref. Time [rad] */
! 460: l_fp omega; /* ± Argument of Perigee [rad] */
! 461: l_fp OMEGA0; /* ± Longit. of Asc. Node of orbit plane [rad] */
! 462: l_fp OMEGADOT; /* ± Rate of Right Ascension [rad/sec] */
! 463: l_fp deltan; /* ± Mean Motion Diff. from computed value [rad/sec] */
! 464: l_fp i0; /* ± Inclination Angle [rad] */
! 465: l_fp idot; /* ± Rate of Inclination Angle [rad/sec] */
! 466: l_fp crc; /* ± Cosine Corr. Term to Orbit Radius [m] */
! 467: l_fp crs; /* ± Sine Corr. Term to Orbit Radius [m] */
! 468: l_fp cuc; /* ± Cosine Corr. Term to Arg. of Latitude [rad] */
! 469: l_fp cus; /* ± Sine Corr. Term to Arg. of Latitude [rad] */
! 470: l_fp cic; /* ± Cosine Corr. Term to Inclination Angle [rad] */
! 471: l_fp cis; /* ± Sine Corr. Term to Inclination Angle [rad] */
! 472:
! 473: l_fp af0; /* ± Clock Correction Coefficient 0 [sec] */
! 474: l_fp af1; /* ± Clock Correction Coefficient 1 [sec/sec] */
! 475: l_fp af2; /* ± Clock Correction Coefficient 2 [sec/sec²] */
! 476: l_fp tgd; /* ± estimated group delay differential [sec] */
! 477:
! 478: u_short URA; /* predicted User Range Accuracy */
! 479:
! 480: u_char L2code; /* code on L2 channel [---] */
! 481: u_char L2flag; /* L2 P data flag [---] */
! 482:
! 483: } EPH;
! 484:
! 485: /* Almanac parameters of one specific SV. A reduced precision set of */
! 486: /* parameters used to check if a satellite is in view at a given time. */
! 487: /* Valid for an interval of more than 7 days from start of transmission. */
! 488:
! 489: typedef struct {
! 490: CSUM csum; /* checksum of the remaining bytes */
! 491: short valid; /* flag data are valid */
! 492:
! 493: HEALTH health; /* [---] */
! 494: T_GPS t0a; /* Reference Time Almanac [sec] */
! 495:
! 496: l_fp sqrt_A; /* Square Root of semi-major Axis [sqrt(m)] */
! 497: l_fp e; /* Eccentricity [---] */
! 498:
! 499: l_fp M0; /* ± Mean Anomaly at Ref. Time [rad] */
! 500: l_fp omega; /* ± Argument of Perigee [rad] */
! 501: l_fp OMEGA0; /* ± Longit. of Asc. Node of orbit plane [rad] */
! 502: l_fp OMEGADOT; /* ± Rate of Right Ascension [rad/sec] */
! 503: l_fp deltai; /* ± [rad] */
! 504: l_fp af0; /* ± Clock Correction Coefficient 0 [sec] */
! 505: l_fp af1; /* ± Clock Correction Coefficient 1 [sec/sec] */
! 506: } ALM;
! 507:
! 508:
! 509: /* ionospheric correction parameters */
! 510:
! 511: typedef struct {
! 512: CSUM csum; /* checksum of the remaining bytes */
! 513: short valid; /* flag data are valid */
! 514:
! 515: l_fp alpha_0; /* Ionosph. Corr. Coeff. Alpha 0 [sec] */
! 516: l_fp alpha_1; /* Ionosph. Corr. Coeff. Alpha 1 [sec/deg] */
! 517: l_fp alpha_2; /* Ionosph. Corr. Coeff. Alpha 2 [sec/deg^2] */
! 518: l_fp alpha_3; /* Ionosph. Corr. Coeff. Alpha 3 [sec/deg^3] */
! 519:
! 520: l_fp beta_0; /* Ionosph. Corr. Coeff. Beta 0 [sec] */
! 521: l_fp beta_1; /* Ionosph. Corr. Coeff. Beta 1 [sec/deg] */
! 522: l_fp beta_2; /* Ionosph. Corr. Coeff. Beta 2 [sec/deg^2] */
! 523: l_fp beta_3; /* Ionosph. Corr. Coeff. Beta 3 [sec/deg^3] */
! 524:
! 525: } IONO;
! 526:
! 527: void mbg_tm_str (char **, TM *, int);
! 528: void mbg_tgps_str (char **, T_GPS *, int);
! 529: void get_mbg_header (unsigned char **, GPS_MSG_HDR *);
! 530: void put_mbg_header (unsigned char **, GPS_MSG_HDR *);
! 531: void get_mbg_sw_rev (unsigned char **, SW_REV *);
! 532: void get_mbg_ascii_msg (unsigned char **, ASCII_MSG *);
! 533: void get_mbg_svno (unsigned char **, SVNO *);
! 534: void get_mbg_health (unsigned char **, HEALTH *);
! 535: void get_mbg_cfg (unsigned char **, CFG *);
! 536: void get_mbg_tgps (unsigned char **, T_GPS *);
! 537: void get_mbg_tm (unsigned char **, TM *);
! 538: void get_mbg_ttm (unsigned char **, TTM *);
! 539: void get_mbg_synth (unsigned char **, SYNTH *);
! 540: void get_mbg_tzdl (unsigned char **, TZDL *);
! 541: void get_mbg_antinfo (unsigned char **, ANT_INFO *);
! 542: void get_mbg_cfgh (unsigned char **, CFGH *);
! 543: void get_mbg_utc (unsigned char **, UTC *);
! 544: void get_mbg_lla (unsigned char **, LLA);
! 545: void get_mbg_xyz (unsigned char **, XYZ);
! 546: void get_mbg_portparam (unsigned char **, PORT_PARM *);
! 547: void get_mbg_eph (unsigned char **, EPH *);
! 548: void get_mbg_alm (unsigned char **, ALM *);
! 549: void get_mbg_iono (unsigned char **, IONO *);
! 550:
! 551: unsigned long mbg_csum (unsigned char *, unsigned int);
! 552:
! 553: #endif
! 554: /*
! 555: * History:
! 556: *
! 557: * mbg_gps166.h,v
! 558: * Revision 4.7 2006/06/22 18:41:43 kardel
! 559: * clean up signedness (gcc 4)
! 560: *
! 561: * Revision 4.6 2005/10/07 22:11:56 kardel
! 562: * bounded buffer implementation
! 563: *
! 564: * Revision 4.5.2.1 2005/09/25 10:23:48 kardel
! 565: * support bounded buffers
! 566: *
! 567: * Revision 4.5 2005/06/25 10:58:45 kardel
! 568: * add missing log keywords
! 569: *
! 570: * Revision 4.1 1998/06/12 15:07:30 kardel
! 571: * fixed prototyping
! 572: *
! 573: * Revision 4.0 1998/04/10 19:50:42 kardel
! 574: * Start 4.0 release version numbering
! 575: *
! 576: * Revision 1.1 1998/04/10 19:27:34 kardel
! 577: * initial NTP VERSION 4 integration of PARSE with GPS166 binary support
! 578: *
! 579: * Revision 1.1 1997/10/06 20:55:38 kardel
! 580: * new parse structure
! 581: *
! 582: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>