]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Removed non-ASCII characters from some copyright comments.
authorMartin Burnicki <burnicki@ntp.org>
Fri, 13 Mar 2015 09:28:32 +0000 (10:28 +0100)
committerMartin Burnicki <burnicki@ntp.org>
Fri, 13 Mar 2015 09:28:32 +0000 (10:28 +0100)
Removed trailing whitespace.
Updated definitions for Meinberg clocks from current Meinberg header files. Now use C99 fixed-width types and avoid non-ASCII characters in comments.
Account for updated definitions pulled from Meinberg header files.
Updated comments on Meinberg GPS receivers which are not only called GPS16x.
Replaced some constant numbers by defines from ntp_calendar.h
Modified creation of parse-specific variables for Meinberg devices in gps16x_message().
Reworked mk_utcinfo() to avoid printing of ambiguous leap second dates.
Modified mbg_tm_str() which now expexts an additional parameter controlling if the time status shall be printed.

bk: 5502adc0KIJlfhHuHmAGPf96wV511g

25 files changed:
ChangeLog
include/mbg_gps166.h
include/ntp_calendar.h
include/parse.h
include/parse_conf.h
kernel/sys/parsestreams.h
libparse/clk_computime.c
libparse/clk_dcf7000.c
libparse/clk_meinberg.c
libparse/clk_rawdcf.c
libparse/clk_schmid.c
libparse/clk_trimtaip.c
libparse/clk_trimtsip.c
libparse/clk_varitext.c
libparse/clk_wharton.c
libparse/data_mbg.c
libparse/gpstolfp.c
libparse/parse.c
libparse/parse_conf.c
libparse/parsesolaris.c
libparse/parsestreams.c
libparse/trim_info.c
ntpd/refclock_parse.c
parseutil/dcfd.c
parseutil/testdcf.c

index f23f90a387d253b836f637c0f48b2046320f4a5d..3587b47b7f297dad25367ca5f0cb741078164407 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,18 @@
 ---
 
 * [Bug 2777] Fixed loops and decoding of Meinberg GPS satellite info.
+  Removed non-ASCII characters from some copyright comments.
+  Removed trailing whitespace.
+  Updated definitions for Meinberg clocks from current Meinberg header files.
+  Now use C99 fixed-width types and avoid non-ASCII characters in comments.
+  Account for updated definitions pulled from Meinberg header files.
+  Updated comments on Meinberg GPS receivers which are not only called GPS16x.
+  Replaced some constant numbers by defines from ntp_calendar.h
+  Modified creation of parse-specific variables for Meinberg devices
+  in gps16x_message().
+  Reworked mk_utcinfo() to avoid printing of ambiguous leap second dates.
+  Modified mbg_tm_str() which now expexts an additional parameter controlling
+  if the time status shall be printed.
 * [Bug 2728] See if C99-style structure initialization works.
 * [Bug 2747] Upgrade libevent to 2.1.5-beta.
 * [Bug 2749] ntp/lib/NTP/Util.pm needs update for ntpq -w, IPv6, .POOL. .
index 974debafae28c2d8c27ee3201650c042c3a667c3..5bd1dadbb277cdaa466e0f3bcdb0c48d00bc11df 100644 (file)
 #define MBG_GPS166_H
 
 
-/***************************************************************************/
-/*                                                                         */
-/*   File:         GPSSERIO.H                    4.1                       */
-/*                                                                         */
-/*   Project:      Common C Library                                        */
-/*                                                                         */
-/*   Compiler:     Borland C++                                             */
-/*                                                                         */
-/*   Author:       M. Burnicki,  Meinberg Funkuhren                        */
-/*                                                                         */
-/*                                                                         */
-/*   Description:                                                          */
-/*     This file defines structures and codes to be used to access GPS166  */
-/*     via its serial interface COM0. COM0 should be set to a high baud    */
-/*     rate, default is 19200.                                             */
-/*                                                                         */
-/*     Standard GPS166 serial operation is to send a time string that is   */
-/*     compatible with Meinberg UA31 or PZF535 DCF77 radio remote clocks.  */
-/*     That string can be transmitted automatically once per second, once  */
-/*     per minute or on request per ASCII '?'.                             */
-/*                                                                         */
-/*     Parameter setup or parameter readout works using blocks of binary   */
-/*     data which have to be isolated from the standard string. A block of */
-/*     data starts with a SOH code (ASCII Start Of Header, 0x01) followed  */
-/*     by a message header with constant length and a data portion with    */
-/*     variable length. The first field (cmd) of the message header holds  */
-/*     the command code rsp. the type of data to be transmitted. The next  */
-/*     field (len) gives the number of data bytes that are transmitted     */
-/*     after the header. This number ranges from 0 to sizeof( MSG_DATA ).  */
-/*     The third field (data_csum) holds a checksum of all data bytes and  */
-/*     the last field of the header finally holds the checksum of the.     */
-/*     header.                                                             */
-/*                                                                         */
-/***************************************************************************/
-
-/* the control codes defined below are to be or'ed with a command/type code */
-
-#define GPS_REQACK    0x8000   /* to GPS166: request acknowledge */
-#define GPS_ACK       0x4000   /* from GPS166: acknowledge a command */
-#define GPS_NACK      0x2000   /* from GPS166: error receiving command */
-
-#define GPS_CTRL_MSK  0xF000   /* masks control code from command */
-
-
-/* The codes below specify commands/types of data to be supplied to GPS166: */
-
-/*                            GPS166 auto-message to host            */
-/*                            þ   host request, GPS166 response      */
-/*                            þ   þ   host download to GPS166        */
-/*                            þ   þ   þ                              */
-enum {  /*                    þ   þ   þ                              */
-  /* system data */
-  GPS_AUTO_ON = 0x000,   /* þ   þ   þ X þ enable auto-messages from GPS166 */
-  GPS_AUTO_OFF,          /* þ   þ   þ X þ disable auto-messages from GPS166 */
-  GPS_SW_REV,            /* þ   þ X þ   þ request software revision */
-  GPS_STAT,              /* þ   þ X þ   þ request status of buffered variables */
-  GPS_TIME,              /* þ X þ   þ X þ current time or capture or init board time */
-  GPS_POS_XYZ,           /* þ   þ X þ X þ current position in ECEF coords */
-  GPS_POS_LLA,           /* þ   þ X þ X þ current position in geographic coords */
-  GPS_TZDL,              /* þ   þ X þ X þ time zone / daylight saving */
-  GPS_PORT_PARM,         /* þ   þ X þ X þ parameters of the serial ports */
-  GPS_SYNTH,             /* þ   þ X þ X þ synthesizer's frequency and phase */
-  GPS_ANT_INFO,          /* þ X þ X þ   þ time diff after antenna disconnect */
-  GPS_UCAP,              /* þ X þ X þ   þ user capture */
+/***************************************************************************
+ *
+ *  Definitions taken from Meinberg's gpsserio.h and gpsdefs.h files.
+ *
+ *  Author:  Martin Burnicki, Meinberg Funkuhren
+ *
+ *  Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
+ *
+ *  Description:
+ *    Structures and codes to be used to access Meinberg GPS clocks via
+ *    their serial interface COM0. COM0 should be set to a high baud rate,
+ *    default is 19200.
+ *
+ *    Standard Meinberg GPS serial operation is to send the Meinberg
+ *    standard time string automatically once per second, once per
+ *    minute, or on request per ASCII '?'.
+ *
+ *    GPS parameter setup or parameter readout uses blocks of binary
+ *    data which have to be isolated from the standard string. A block
+ *    of data starts with a SOH code (ASCII Start Of Header, 0x01)
+ *    followed by a message header with constant length and a block of
+ *    data with variable length.
+ *
+ *    The first field (cmd) of the message header holds the command
+ *    code resp. the type of data to be transmitted. The next field (len)
+ *    gives the number of data bytes that follow the header. This number
+ *    ranges from 0 to sizeof( MSG_DATA ). The third field (data_csum)
+ *    holds a checksum of all data bytes and the last field of the header
+ *    finally holds the checksum of the header itself.
+ *
+ ***************************************************************************/
+
+/**
+ * @brief GPS epoch bias from ordinary time_t epoch
+ *
+ * The Unix time_t epoch is usually 1970-01-01 00:00 whereas
+ * the GPS epoch is 1980-01-06 00:00, so the difference is 10 years,
+ * plus 2 days due to leap years (1972 and 1976), plus the difference
+ * of the day-of-month (6 - 1), so:<br>
+ *
+ * time_t t = ( gps_week * ::SECS_PER_WEEK ) + sec_of_week + ::GPS_SEC_BIAS
+ */
+#define GPS_SEC_BIAS   315964800UL     // ( ( ( 10UL * 365UL ) + 2 + 5 ) * SECS_PER_DAY )
+
+
+#ifndef _COM_HS_DEFINED
+  /**
+   * @brief Enumeration of handshake modes
+   */
+  enum COM_HANSHAKE_MODES { HS_NONE, HS_XONXOFF, HS_RTSCTS, N_COM_HS };
+  #define _COM_HS_DEFINED
+#endif
+
+#ifndef _COM_PARM_DEFINED
+  /**
+   * @brief A data type to configure a serial port's baud rate
+   *
+   * @see ::MBG_BAUD_RATES
+   */
+  typedef int32_t BAUD_RATE;
+
+  /**
+   * @brief Indices used to identify a parameter in the framing string
+   *
+   * @see ::MBG_FRAMING_STRS
+   */
+  enum MBG_FRAMING_STR_IDXS { F_DBITS, F_PRTY, F_STBITS };
+
+  /**
+   * @brief A structure to store the configuration of a serial port
+   */
+  typedef struct
+  {
+    BAUD_RATE baud_rate;  ///< transmission speed, e.g. 19200L, see ::MBG_BAUD_RATES
+    char framing[4];      ///< ASCIIZ framing string, e.g. "8N1" or "7E2", see ::MBG_FRAMING_STRS
+    int16_t handshake;    ///< handshake mode, yet only ::HS_NONE supported
+
+  } COM_PARM;
+
+  #define _COM_PARM_DEFINED
+#endif
+
+
+/**
+ * @brief Enumeration of modes supported for time string transmission
+ *
+ * This determines e.g. at which point in time a string starts
+ * to be transmitted via the serial port.
+ * Used with ::PORT_SETTINGS::mode.
+ *
+ * @see ::STR_MODE_MASKS
+ */
+enum STR_MODES
+{
+  STR_ON_REQ,     ///< transmission on request by received '?' character only
+  STR_PER_SEC,    ///< transmission automatically if second changes
+  STR_PER_MIN,    ///< transmission automatically if minute changes
+  STR_AUTO,       ///< transmission automatically if required, e.g. on capture event
+  STR_ON_REQ_SEC, ///< transmission if second changes and a request has been received before
+  N_STR_MODE      ///< the number of known modes
+};
+
+
+/**
+ * The number of serial ports which are at least available
+ * even with very old GPS receiver models. For devices providing
+ * a ::RECEIVER_INFO structure the number of provided COM ports
+ * is available in ::RECEIVER_INFO::n_com_ports.
+ */
+#define DEFAULT_N_COM   2
+
+
+/**
+ * @brief A The structure used to store the configuration of two serial ports
+ *
+ * @deprecated This structure is deprecated, ::PORT_SETTINGS and related structures
+ * should be used instead, if supported by the device.
+ */
+typedef struct
+{
+  COM_PARM com[DEFAULT_N_COM];    ///< COM0 and COM1 settings
+  uint8_t mode[DEFAULT_N_COM];    ///< COM0 and COM1 output mode
+
+} PORT_PARM;
+
+
+/**
+ * @brief The type of a GPS command code
+ *
+ * @see ::GPS_CMD_CODES
+ */
+typedef uint16_t GPS_CMD;
+
+
+/**
+ * @brief Control codes to be or'ed with a particular command/type code
+ */
+enum GPS_CMD_CTRL_CODES
+{
+  GPS_REQACK = 0x8000,   ///< to device: request acknowledge
+  GPS_ACK    = 0x4000,   ///< from device: acknowledge a command
+  GPS_NACK   = 0x2000,   ///< from device: error evaluating a command
+};
+
+#define GPS_CTRL_MSK  0xF000   ///< bit mask of all ::GPS_CMD_CTRL_CODES
+
+
+/**
+ * @brief Command codes for the binary protocol
+ *
+ * These codes specify commands and associated data types used by Meinberg's
+ * binary protocol to exchange data with a device via serial port, direct USB,
+ * or socket I/O.
+ *
+ * Some commands and associated data structures can be read (r) from a device, others
+ * can be written (w) to the device, and some can also be sent automatically (a) by
+ * a device after a ::GPS_AUTO_ON command has been sent to the device.
+ * The individual command codes are marked with (rwa) accordingly, where '-' is used
+ * to indicate that a particular mode is not supported.
+ *
+ * @note Not all command code are supported by all devices.
+ * See the hints for a particular command.
+ *
+ * @note If ::GPS_ALM, ::GPS_EPH or a code named ..._IDX is sent to retrieve
+ * some data from a device then an uint16_t parameter must be also supplied
+ * in order to specify the index number of the data set to be returned.
+ * The valid index range depends on the command code.
+ * For ::GPS_ALM and ::GPS_EPH the index is the SV number which may be 0 or
+ * ::MIN_SVNO_GPS to ::MAX_SVNO_GPS. If the number is 0 then all ::N_SVNO_GPS
+ * almanacs or ephemeris data structures are returned.
+ *
+ * @see ::GPS_CMD_CODES_TABLE
+ */
+enum GPS_CMD_CODES
+{ /* system data */
+  GPS_AUTO_ON = 0x000,  ///< (-w-) no data, enable auto-msgs from device
+  GPS_AUTO_OFF,         ///< (-w-) no data, disable auto-msgs from device
+  GPS_SW_REV,           ///< (r--) deprecated, ::SW_REV, software revision, use only if ::GPS_RECEIVER_INFO not supp.
+  GPS_BVAR_STAT,        ///< (r--) ::BVAR_STAT, status of buffered variables, only if ::GPS_MODEL_HAS_BVAR_STAT
+  GPS_TIME,             ///< (-wa) ::TTM, current time or capture, or init board time
+  GPS_POS_XYZ,          ///< (rw-) ::XYZ, current position in ECEF coordinates, only if ::GPS_MODEL_HAS_POS_XYZ
+  GPS_POS_LLA,          ///< (rw-) ::LLA, current position in geographic coordinates, only if ::GPS_MODEL_HAS_POS_LLA
+  GPS_TZDL,             ///< (rw-) ::TZDL, time zone / daylight saving, only if ::GPS_MODEL_HAS_TZDL
+  GPS_PORT_PARM,        ///< (rw-) deprecated, ::PORT_PARM, use ::PORT_SETTINGS etc. if ::GPS_RECEIVER_INFO supported
+  GPS_SYNTH,            ///< (rw-) ::SYNTH, synthesizer settings, only if ::GPS_HAS_SYNTH
+  GPS_ANT_INFO,         ///< (r-a) ::ANT_INFO, time diff after antenna disconnect, only if ::GPS_MODEL_HAS_ANT_INFO
+  GPS_UCAP,             ///< (r-a) ::TTM, user capture events, only if ::RECEIVER_INFO::n_ucaps > 0
 
   /* GPS data */
-  GPS_CFGH = 0x100,      /* þ   þ X þ X þ SVs' configuration and health codes */
-  GPS_ALM,               /* þ   þ X þ X þ one SV's almanac */
-  GPS_EPH,               /* þ   þ X þ X þ one SV's ephemeris */
-  GPS_UTC,               /* þ   þ X þ X þ UTC correction parameters */
-  GPS_IONO,              /* þ   þ X þ X þ ionospheric correction parameters */
-  GPS_ASCII_MSG          /* þ   þ X þ   þ the GPS ASCII message */
+  GPS_CFGH = 0x100,     ///< (rw-) ::CFGH, SVs' configuration and health codes
+  GPS_ALM,              ///< (rw-) req: uint16_t SV num, ::SV_ALM, one SV's almanac
+  GPS_EPH,              ///< (rw-) req: uint16_t SV num, ::SV_EPH, one SV's ephemeris
+  GPS_UTC,              ///< (rw-) ::UTC, GPS %UTC correction parameters
+  GPS_IONO,             ///< (rw-) ::IONO, GPS ionospheric correction parameters
+  GPS_ASCII_MSG         ///< (r--) ::ASCII_MSG, the GPS ASCII message
 };
 
-/*
- * modelled after GPSDEFS.H Revision 1.5
- */
-/***************************************************************************/
-/*                                                                         */
-/*   File:         GPSDEFS.H                     4.1          */
-/*                                                                         */
-/*   Project:      Common C Library                                        */
-/*                                                                         */
-/*   Compiler:     Borland C++                                             */
-/*                                                                         */
-/*   Author:       M. Burnicki,  Meinberg Funkuhren                        */
-/*                                                                         */
-/*                                                                         */
-/*   Description:                                                          */
-/*     General definitions to be used with GPS166                          */
-/*     GPS166 Rev. 1.23 or above                                           */
-/*                                                                         */
-/*   Modifications: see file GPSLIB.TXT                                    */
-/*                                                                         */
-/***************************************************************************/
-#define _GPSDEFS_H
-/* the type of various checksums */
 
 #ifndef _CSUM_DEFINED
-  typedef unsigned short CSUM;
-#  define _CSUM_DEFINED
+  typedef uint16_t CSUM;  /* checksum used by some structures stored in non-volatile memory */
+  #define _CSUM_DEFINED
 #endif
 
-/* the message header */
 
-typedef struct {
-  unsigned short gps_cmd;
-  unsigned short gps_len;
-  unsigned short gps_data_csum;
-  unsigned short gps_hdr_csum;
+/**
+ * @brief The header of a binary message.
+ */
+typedef struct
+{
+  GPS_CMD cmd;      ///< see ::GPS_CMD_CODES
+  uint16_t len;     ///< length of the data portion appended after the header
+  CSUM data_csum;   ///< checksum of the data portion appended after the header
+  CSUM hdr_csum;    ///< checksum of the preceding header bytes
+
 } GPS_MSG_HDR;
 
-/* a struct used to hold the software revision information */
 
-typedef struct {
-  unsigned short code;       /* e.g. 0x0120 means rev. 1.20 */
-  unsigned char name[17];     /* used to identify customized versions */
+#define GPS_ID_STR_LEN      16
+#define GPS_ID_STR_SIZE     ( GPS_ID_STR_LEN + 1 )
+
+/**
+ * @brief Software revision information
+ *
+ * Contains a software revision code, plus an optional
+ * identifier for a customized version.
+ */
+typedef struct
+{
+  uint16_t code;               ///< Version number, e.g. 0x0120 means v1.20
+  char name[GPS_ID_STR_SIZE];  ///< Optional string identifying a customized version
+  uint8_t reserved;            ///< Reserved field to yield even structure size
+
 } SW_REV;
 
-/* GPS ASCII message */
 
-typedef struct {
-  CSUM csum;       /* checksum of the remaining bytes */
-  short valid;     /* flag data are valid */
-  char s[23];      /* 22 chars GPS ASCII message plus trailing zero */
-} ASCII_MSG;
+/**
+ * @brief GNSS satellite numbers
+ *
+ * @todo: Check if MAX_SVNO_GLN is 94 instead of 95, and thus
+ *        N_SVNO_GLN is 30 instead of 31, as reported by Wikipedia.
+ */
+enum GNSS_SVNOS
+{
+  MIN_SVNO_GPS = 1,       ///< min. GPS satellite PRN number
+  MAX_SVNO_GPS = 32,      ///< max. GPS satellite PRN number
+  N_SVNO_GPS = 32,        ///< max. number of active GPS satellites
+
+  MIN_SVNO_WAAS = 33,     ///< min. WAAS satellite number
+  MAX_SVNO_WAAS = 64,     ///< max. WAAS satellite number
+  N_SVNO_WAAS = 32,       ///< max. number of active WAAS satellites
+
+  MIN_SVNO_GLONASS = 65,  ///< min. Glonass satellite number (64 + sat slot ID)
+  MAX_SVNO_GLONASS = 95,  ///< max. Glonass satellite number (64 + sat slot ID)
+  N_SVNO_GLONASS = 31     ///< max. number of active Glonass satellites
+};
+
+
+typedef uint16_t SVNO;    ///< the number of an SV (Space Vehicle, i.e. satellite)
+typedef uint16_t HEALTH;  ///< an SV's 6 bit health code
+typedef uint16_t CFG;     ///< an SV's 4 bit configuration code
+typedef uint16_t IOD;     ///< Issue-Of-Data code
+
+
+/**
+ * @brief Status flags of battery buffered data
+ *
+ * Related to data received from the satellites, or data derived thereof.
+ *
+ * All '0' means OK, single bits set to '1' indicate
+ * the associated type of GPS data is not available.
+ *
+ * @see ::BVAR_FLAGS
+ */
+typedef uint16_t BVAR_STAT;
+
+#define _mbg_swab_bvar_stat( _p )  _mbg_swab16( (_p) )
 
-#define MIN_SVNO         1                  /* min. SV number */
-#define MAX_SVNO        32                  /* max. SV number */
-#define N_SVNO ( MAX_SVNO - MIN_SVNO + 1)   /* number of possibly active SVs */
 
+/**
+ * @brief Enumeration of flag bits used to define ::BVAR_FLAGS
+ *
+ * For each bit which is set this means the associated data set in
+ * non-volatile memory is not available, or incomplete.
+ * Most data sets will just be re-collected from the data streams sent
+ * by the satellites. However, the receiver position has usually been
+ * computed earlier during normal operation, and will be re-computed
+ * when a sufficient number of satellites can be received.
+ *
+ * @see ::BVAR_STAT
+ * @see ::BVAR_FLAGS
+ * @see ::BVAR_FLAG_NAMES
+ */
+enum BVAR_FLAG_BITS
+{
+  BVAR_BIT_CFGH_INVALID,      ///< Satellite configuration and health parameters incomplete
+  BVAR_BIT_ALM_NOT_COMPLETE,  ///< Almanac parameters incomplete
+  BVAR_BIT_UTC_INVALID,       ///< %UTC offset parameters incomplete
+  BVAR_BIT_IONO_INVALID,      ///< Ionospheric correction parameters incomplete
+  BVAR_BIT_RCVR_POS_INVALID,  ///< No valid receiver position available
+  N_BVAR_BIT                  ///< number of defined ::BVAR_STAT bits
+};
+
+
+/**
+ * @brief Bit masks associated with ::BVAR_FLAG_BITS
+ *
+ * Used with ::BVAR_STAT.
+ *
+ * @see ::BVAR_STAT
+ * @see ::BVAR_FLAG_BITS
+ * @see ::BVAR_FLAG_NAMES
+ */
+enum BVAR_FLAGS
+{
+  BVAR_CFGH_INVALID     = ( 1UL << BVAR_BIT_CFGH_INVALID ),      ///< see ::BVAR_BIT_CFGH_INVALID
+  BVAR_ALM_NOT_COMPLETE = ( 1UL << BVAR_BIT_ALM_NOT_COMPLETE ),  ///< see ::BVAR_BIT_ALM_NOT_COMPLETE
+  BVAR_UTC_INVALID      = ( 1UL << BVAR_BIT_UTC_INVALID ),       ///< see ::BVAR_BIT_UTC_INVALID
+  BVAR_IONO_INVALID     = ( 1UL << BVAR_BIT_IONO_INVALID ),      ///< see ::BVAR_BIT_IONO_INVALID
+  BVAR_RCVR_POS_INVALID = ( 1UL << BVAR_BIT_RCVR_POS_INVALID ),  ///< see ::BVAR_BIT_RCVR_POS_INVALID
+};
 
-typedef short          SVNO;     /* the number of a SV */
-typedef unsigned short HEALTH;  /* a SV's health code */
-typedef unsigned short CFG;     /* a SV's configuration code */
-typedef unsigned short IOD;     /* Issue-Of-Data code */
 
-/* Date and time referred to the linear time scale defined by GPS. */
-/* GPS time is defined by the number of weeks since midnight from */
-/* January 5, 1980 to January 6, 1980 plus the number of seconds of */
-/* the current week plus fractions of a second. GPS time differs from */
-/* UTC because UTC is corrected with leap seconds while GPS time scale */
-/* is continuous. */
+/**
+ * @brief A structure used to hold time in GPS format
+ *
+ * Date and time refer to the linear time scale defined by GPS, with
+ * the epoch starting at %UTC midnight at the beginning of January 6, 1980.
+ *
+ * GPS time is counted by the week numbers since the epoch, plus second
+ * of the week, plus fraction of the second. The week number transmitted
+ * by the satellites rolls over from 1023 to 0, but Meinberg devices
+ * just continue to count the weeks beyond the 1024 week limit to keep
+ * the receiver's internal time.
+ *
+ * %UTC time differs from GPS time since a number of leap seconds have
+ * been inserted in the %UTC time scale after the GPS epoche. The number
+ * of leap seconds is disseminated by the satellites using the ::UTC
+ * parameter set, which also provides info on pending leap seconds.
+ */
+typedef struct
+{
+  uint16_t wn;     ///< the week number since GPS has been installed
+  uint32_t sec;    ///< the second of that week
+  uint32_t tick;   ///< fractions of a second, 1/::RECEIVER_INFO::ticks_per_sec units
 
-typedef struct {
-  unsigned short wn;     /* the week number since GPS has been installed */
-  unsigned long sec;     /* the second of that week */
-  unsigned long tick;    /* fractions of a second; scale: 1E-7 */
 } T_GPS;
 
 
-/* Local date and time computed from GPS time. The current number */
-/* of leap seconds have to be added to get UTC from GPS time. */
-/* Additional corrections could have been made according to the */
-/* time zone/daylight saving parameters (TZDL, see below) defined */
-/* by the user. The status field can be checked to see which corrections */
-/* have been applied. */
-
-#ifndef GPS166_TM_DEFINED
-  typedef struct {
-    short year;          /* 0..9999 */
-    char month;          /* 1..12 */
-    char mday;           /* 1..31 */
-    short yday;          /* 1..366 */
-    char wday;           /* 0..6 == Sun..Sat */
-    char hour;           /* 0..23 */
-    char minute;         /* 0..59 */
-    char second;         /* 0..59 */
-    long frac;           /* fractions of a second, scale 1E-7 */
-    long offs_from_utc;  /* local time's offset from UTC */
-    unsigned short status;       /* flags */
-  } TM;
-
-  /* status flags used with conversion from GPS time to local time */
-
-#  define TM_UTC        0x01   /* UTC correction has been made */
-#  define TM_LOCAL      0x02   /* UTC has been converted to local time */
-#  define TM_DL_ANN     0x04   /* state of daylight saving is going to change */
-#  define TM_DL_ENB     0x08   /* daylight saving is enabled */
-#  define TM_LS_ANN     0x10   /* leap second will be inserted */
-#  define TM_LS_ENB     0x20   /* current second is leap second */
-
-#  define GPS166_TM_DEFINED
-#endif
+/**
+ * @brief Local date and time computed from GPS time
+ *
+ * The current number of leap seconds have to be added to get %UTC
+ * from GPS time. Additional corrections could have been made according
+ * to the time zone/daylight saving parameters ::TZDL defined by the user.
+ * The status field can be checked to see which corrections
+ * have actually been applied.
+ *
+ * @note Conversion from GPS time to %UTC and/or local time can only be
+ * done if some valid ::UTC correction parameters are available in the
+ * receiver's non-volatile memory.
+ */
+typedef struct
+{
+  int16_t year;           ///< year number, 0..9999
+  int8_t month;           ///< month, 1..12
+  int8_t mday;            ///< day of month, 1..31
+  int16_t yday;           ///< day of year, 1..365, or 366 in case of leap year
+  int8_t wday;            ///< day of week, 0..6 == Sun..Sat
+  int8_t hour;            ///< hours, 0..23
+  int8_t min;             ///< minutes, 0..59
+  int8_t sec;             ///< seconds, 0..59, or 60 in case of inserted leap second
+  int32_t frac;           ///< fractions of a second, 1/::RECEIVER_INFO::ticks_per_sec units
+  int32_t offs_from_utc;  ///< local time offset from %UTC [sec]
+  uint16_t status;        ///< status flags, see ::TM_GPS_STATUS_BIT_MASKS
+
+} TM_GPS;
+
+
+
+/**
+ * @brief Status flag bits used to define ::TM_GPS_STATUS_BIT_MASKS
+ *
+ * These bits report info on the time conversion from GPS time to %UTC
+ * and/or local time as well as device status info.
+ *
+ * @see ::TM_GPS_STATUS_BIT_MASKS
+ */
+enum TM_GPS_STATUS_BITS
+{
+  TM_BIT_UTC,          ///< %UTC correction has been made
+  TM_BIT_LOCAL,        ///< %UTC has been converted to local time according to ::TZDL settings
+  TM_BIT_DL_ANN,       ///< state of daylight saving is going to change
+  TM_BIT_DL_ENB,       ///< daylight saving is in effect
+  TM_BIT_LS_ANN,       ///< leap second pending
+  TM_BIT_LS_ENB,       ///< current second is leap second
+  TM_BIT_LS_ANN_NEG,   ///< set in addition to ::TM_BIT_LS_ANN if leap sec is negative
+  TM_BIT_INVT,         ///< invalid time, e.g. if RTC battery bas been empty
+
+  TM_BIT_EXT_SYNC,     ///< synchronized externally
+  TM_BIT_HOLDOVER,     ///< in holdover mode after previous synchronization
+  TM_BIT_ANT_SHORT,    ///< antenna cable short circuited
+  TM_BIT_NO_WARM,      ///< OCXO has not warmed up
+  TM_BIT_ANT_DISCONN,  ///< antenna currently disconnected
+  TM_BIT_SYN_FLAG,     ///< TIME_SYN output is low
+  TM_BIT_NO_SYNC,      ///< time sync actually not verified
+  TM_BIT_NO_POS        ///< position actually not verified, LOCK LED off
+};
 
 
-/* the status flags below are defined starting with rev. 1.32 */
+/**
+ * @brief Status flag masks used with ::TM_GPS::status
+ *
+ * These bits report info on the time conversion from GPS time to %UTC
+ * and/or local time as well as device status info.
+ *
+ * @see ::TM_GPS_STATUS_BITS
+ */
+enum TM_GPS_STATUS_BIT_MASKS
+{
+  TM_UTC         = ( 1UL << TM_BIT_UTC ),          ///< see ::TM_BIT_UTC
+  TM_LOCAL       = ( 1UL << TM_BIT_LOCAL ),        ///< see ::TM_BIT_LOCAL
+  TM_DL_ANN      = ( 1UL << TM_BIT_DL_ANN ),       ///< see ::TM_BIT_DL_ANN
+  TM_DL_ENB      = ( 1UL << TM_BIT_DL_ENB ),       ///< see ::TM_BIT_DL_ENB
+  TM_LS_ANN      = ( 1UL << TM_BIT_LS_ANN ),       ///< see ::TM_BIT_LS_ANN
+  TM_LS_ENB      = ( 1UL << TM_BIT_LS_ENB ),       ///< see ::TM_BIT_LS_ENB
+  TM_LS_ANN_NEG  = ( 1UL << TM_BIT_LS_ANN_NEG ),   ///< see ::TM_BIT_LS_ANN_NEG
+  TM_INVT        = ( 1UL << TM_BIT_INVT ),         ///< see ::TM_BIT_INVT
+
+  TM_EXT_SYNC    = ( 1UL << TM_BIT_EXT_SYNC ),     ///< see ::TM_BIT_EXT_SYNC
+  TM_HOLDOVER    = ( 1UL << TM_BIT_HOLDOVER ),     ///< see ::TM_BIT_HOLDOVER
+  TM_ANT_SHORT   = ( 1UL << TM_BIT_ANT_SHORT ),    ///< see ::TM_BIT_ANT_SHORT
+  TM_NO_WARM     = ( 1UL << TM_BIT_NO_WARM ),      ///< see ::TM_BIT_NO_WARM
+  TM_ANT_DISCONN = ( 1UL << TM_BIT_ANT_DISCONN ),  ///< see ::TM_BIT_ANT_DISCONN
+  TM_SYN_FLAG    = ( 1UL << TM_BIT_SYN_FLAG ),     ///< see ::TM_BIT_SYN_FLAG
+  TM_NO_SYNC     = ( 1UL << TM_BIT_NO_SYNC ),      ///< see ::TM_BIT_NO_SYNC
+  TM_NO_POS      = ( 1UL << TM_BIT_NO_POS )        ///< see ::TM_BIT_NO_POS
+};
 
-#define TM_ANT_DISCONN  0x1000  /* antenna currently disconnected */
-#define TM_SYN_FLAG     0x2000  /* TIME_SYN output is low */
-#define TM_NO_SYNC      0x4000  /* not sync'ed after reset */
-#define TM_NO_POS       0x8000  /* position not computed after reset, */
-                                /*   LOCK LED off */
 
-/* a struct used to transmit information on date and time */
+/**
+ * @brief A structure used to transmit information on date and time
+ *
+ * This structure can be used to transfer the current time, in which
+ * case the channel field has to be set to -1, or an event capture time
+ * retrieved from the on-board FIFO, in which case the channel field
+ * contains the index of the time capture input, e.g. 0 or 1.
+ */
+typedef struct
+{
+  int16_t channel;  ///< -1: the current on-board time; >= 0 the capture channel number
+  T_GPS t;          ///< time in GPS scale and format
+  TM_GPS tm;        ///< time converted to %UTC and/or local time according to ::TZDL settings
 
-typedef struct {
-  short channel;        /* -1: the current time; 0, 1: capture 0, 1 */
-  T_GPS t;              /* time in GPS format */
-  TM tm;                /* that time converted to local time */
 } TTM;
 
 
@@ -249,282 +502,462 @@ typedef struct {
 /* to geographic coordinates as defined by WGS84 (World Geodetic */
 /* System from 1984). */
 
-#ifndef _XYZ_DEFINED
-  /* sequence and number of components of a cartesian position */
-  enum { XP, YP, ZP, N_XYZ };
+/**
+ * @brief Sequence and number of components of a cartesian position
+ */
+enum XYZ_FIELDS { XP, YP, ZP, N_XYZ };  // x, y, z
+
+/**
+ * @brief A position in cartesian coordinates
+ *
+ * Usually earth centered, earth fixed (ECEF) coordinates,
+ * in [m].
+ *
+ * @note In the original code this is an array of double.
+ *
+ * @see ::XYZ_FIELDS
+ */
+typedef l_fp XYZ[N_XYZ];
 
-  /* a type of array holding a cartesian position */
-  typedef l_fp XYZ[N_XYZ];      /* values are in [m] */
 
-#  define _XYZ_DEFINED
-#endif
+/**
+ * @brief Sequence and number of components of a geographic position
+ */
+enum LLA_FIELDS { LAT, LON, ALT, N_LLA };  /* latitude, longitude, altitude */
 
+/**
+ * @brief A geographic position based on latitude, longitude, and altitude
+ *
+ * The geographic position associated to specific cartesian coordinates
+ * depends on the characteristics of the ellipsoid used for the computation,
+ * the so-called geographic datum. GPS uses the WGS84 (World Geodetic System
+ * from 1984) ellipsoid by default.
+ *
+ * lon, lat in [rad], alt in [m]
+ *
+ * @note In the original code this is an array of double.
+ *
+ * @see ::LLA_FIELDS
+ */
+typedef l_fp LLA[N_LLA];
 
-#ifndef _LLA_DEFINED
-  /* sequence and number of components of a geographic position */
-  enum { LAT, LON, ALT, N_LLA };  /* latitude, longitude, altitude */
 
-  /* a type of array holding a geographic position */
-  typedef l_fp LLA[N_LLA];      /* lon, lat in [rad], alt in [m] */
+/**
+ * @defgroup group_synth Synthesizer parameters
+ *
+ * Synthesizer frequency is expressed as a
+ * four digit decimal number (freq) to be multiplied by 0.1 Hz and an
+ * base 10 exponent (range). If the effective frequency is less than
+ * 10 kHz its phase is synchronized corresponding to the variable phase.
+ * Phase may be in a range from -360 deg to +360 deg with a resolution
+ * of 0.1 deg, so the resulting numbers to be stored are in a range of
+ * -3600 to +3600.
+ *
+ * Example:<br>
+ * Assume the value of freq is 2345 (decimal) and the value of phase is 900.
+ * If range == 0 the effective frequency is 234.5 Hz with a phase of +90 deg.
+ * If range == 1 the synthesizer will generate a 2345 Hz output frequency
+ * and so on.
+ *
+ * Limitations:<br>
+ * If freq == 0 the synthesizer is disabled. If range == 0 the least
+ * significant digit of freq is limited to 0, 3, 5 or 6. The resulting
+ * frequency is shown in the examples below:
+ *    - freq == 1230  -->  123.0 Hz
+ *    - freq == 1233  -->  123 1/3 Hz (real 1/3 Hz, NOT 123.3 Hz)
+ *    - freq == 1235  -->  123.5 Hz
+ *    - freq == 1236  -->  123 2/3 Hz (real 2/3 Hz, NOT 123.6 Hz)
+ *
+ * If range == ::MAX_SYNTH_RANGE the value of freq must not exceed 1000, so
+ * the output frequency is limited to 10 MHz (see ::MAX_SYNTH_FREQ_VAL).
+ *
+ * @{ */
 
-#  define _LLA_DEFINED
-#endif
+#define N_SYNTH_FREQ_DIGIT  4    ///< number of digits to edit
+#define MAX_SYNTH_FREQ   1000    ///< if range == ::MAX_SYNTH_RANGE
 
-/* Synthesizer parameters. Synthesizer frequency is expressed as a */
-/* four digit decimal number (freq) to be multiplied by 0.1 Hz and an */
-/* base 10 exponent (range). If the effective frequency is less than */
-/* 10 kHz its phase is synchronized corresponding to the variable phase. */
-/* Phase may be in a range from -360° to +360° with a resolution of 0.1°, */
-/* so the resulting numbers to be stored are in a range of -3600 to +3600. */
-
-/* Example: */
-/* Assume the value of freq is 2345 (decimal) and the value of phase is 900. */
-/* If range == 0 the effective frequency is 234.5 Hz with a phase of +90°. */
-/* If range == 1 the synthesizer will generate a 2345 Hz output frequency */
-/* and so on. */
-
-/* Limitations: */
-/* If freq == 0 the synthesizer is disabled. If range == 0 the least */
-/* significant digit of freq is limited to 0, 3, 5 or 6. The resulting */
-/* frequency is shown in the examples below: */
-/*     freq == 1230  -->  123.0 Hz */
-/*     freq == 1233  -->  123 1/3 Hz (real 1/3 Hz, NOT 123.3 Hz) */
-/*     freq == 1235  -->  123.5 Hz */
-/*     freq == 1236  -->  123 2/3 Hz (real 2/3 Hz, NOT 123.6 Hz) */
-
-/* If range == MAX_RANGE the value of freq must not exceed 1200, so the */
-/* output frequency is limited to 12 MHz. */
-
-/* Phase will be ignored if the resulting frequency is greater or equal */
-/* to 10 kHz. */
-
-#define MAX_SYNTH_FREQ   1200    /* if range == MAX_SYNTH_RANGE */
 #define MIN_SYNTH_RANGE     0
 #define MAX_SYNTH_RANGE     5
-#define MAX_SYNTH_PHASE  3600
+#define N_SYNTH_RANGE       ( MAX_SYNTH_RANGE - MIN_SYNTH_RANGE + 1 )
 
-typedef struct {
-  short freq;      /* four digits used; scale: 0.1; e.g. 1234 -> 123.4 Hz */
-  short range;     /* scale factor for freq; 0..MAX_SYNTH_RANGE */
-  short phase;     /* -MAX_SYNTH_PHASE..+MAX_SYNTH_PHASE; >0 -> pulses later */
-} SYNTH;
+#define N_SYNTH_PHASE_DIGIT  4
+#define MAX_SYNTH_PHASE      3600
 
 
+#define MAX_SYNTH_FREQ_EDIT  9999  ///< max sequence of digits when editing
 
-/* Time zone/daylight saving parameters. */
 
-/* the name of a time zone, 5 characters plus trailing zero */
-typedef char TZ_NAME[6];
+/**
+ * @brief The maximum frequency that can be configured for the synthesizer
+ */
+#define MAX_SYNTH_FREQ_VAL   10000000UL     ///< 10 MHz
+/*   == MAX_SYNTH_FREQ * 10^(MAX_SYNTH_RANGE-1) */
 
-typedef struct {
-  long offs;         /* offset from UTC to local time [sec] */
-  long offs_dl;      /* additional offset if daylight saving enabled [sec] */
-  TM tm_on;          /* date/time when daylight saving starts */
-  TM tm_off;         /* date/time when daylight saving ends */
-  TZ_NAME name[2];   /* names without and with daylight saving enabled */
-} TZDL;
+/**
+ * @brief The synthesizer's phase is only be synchronized if the frequency is below this limit
+ */
+#define SYNTH_PHASE_SYNC_LIMIT   10000UL    ///< 10 kHz
 
-/* The constant below is defined beginning with software rev. 1.29. */
-/* If the year in tzdl.tmon and tzdl.tm_off is or'ed with that constant, */
-/* the receiver automatically generates daylight saving year by year. */
-/* See GPSLIB.TXT for more information. */
+/**
+ * A Macro used to determine the position of the decimal point
+ * when printing the synthesizer frequency as 4 digit value
+ */
+#define _synth_dp_pos_from_range( _r ) \
+  ( ( ( N_SYNTH_RANGE - (_r) ) % ( N_SYNTH_FREQ_DIGIT - 1 ) ) + 1 )
+
+/**
+ * @brief Synthesizer frequency units
+ *
+ * An initializer for commonly displayed synthesizer frequency units
+ * (::N_SYNTH_RANGE strings)
+ */
+#define DEFAULT_FREQ_RANGES \
+{                           \
+  "Hz",                     \
+  "kHz",                    \
+  "kHz",                    \
+  "kHz",                    \
+  "MHz",                    \
+  "MHz",                    \
+}
 
-#define DL_AUTO_FLAG  0x8000
 
-/* Example: */
-/* for automatic daylight saving enable/disable in Central Europe, */
-/* the variables are to be set as shown below: */
-/*   offs = 3600L           one hour from UTC */
-/*   offs_dl = 3600L        one additional hour if daylight saving enabled */
-/*   tm_on = first Sunday from March 25, 02:00:00h ( year |= DL_AUTO_FLAG ) */
-/*   tm_off = first Sunday from Sept 24, 03:00:00h ( year |= DL_AUTO_FLAG ) */
-/*   name[0] == "MEZ  "     name if daylight saving not enabled */
-/*   name[1] == "MESZ "     name if daylight saving is enabled */
 
+/**
+ * @brief Synthesizer configuration parameters
+ */
+typedef struct
+{
+  int16_t freq;    ///< four digits used; scale: 0.1 Hz; e.g. 1234 -> 123.4 Hz
+  int16_t range;   ///< scale factor for freq; 0..::MAX_SYNTH_RANGE
+  int16_t phase;   ///< -::MAX_SYNTH_PHASE..+::MAX_SYNTH_PHASE; >0 -> pulses later
 
+} SYNTH;
 
+#define _mbg_swab_synth( _p )   \
+{                               \
+  _mbg_swab16( &(_p)->freq );   \
+  _mbg_swab16( &(_p)->range );  \
+  _mbg_swab16( &(_p)->phase );  \
+}
 
-/* the structure below was defined in rev. 1.31. It reflects the status */
-/* of the antenna, the times of last disconnect/reconnect and the boards */
-/* clock offset after the phase of disconnection. */
 
-typedef struct {
-  short status;    /* current status of antenna */
-  TM tm_disconn;   /* time of antenna disconnect */
-  TM tm_reconn;    /* time of antenna reconnect */
-  long delta_t;    /* clock offset at reconnect time, units: TICKS_PER_SEC */
-} ANT_INFO;
+/**
+ * @brief Enumeration of synthesizer states
+ */
+enum SYNTH_STATES
+{
+  SYNTH_DISABLED,   ///< disbled by cfg, i.e. freq == 0.0
+  SYNTH_OFF,        ///< not enabled after power-up
+  SYNTH_FREE,       ///< enabled, but not synchronized
+  SYNTH_DRIFTING,   ///< has initially been sync'd, but now running free
+  SYNTH_SYNC,       ///< fully synchronized
+  N_SYNTH_STATE     ///< the number of known states
+};
+
 
+/**
+ * @brief A structure used to report the synthesizer state
+ */
+typedef struct
+{
+  uint8_t state;     ///< state code as enumerated in ::SYNTH_STATES
+  uint8_t flags;     ///< reserved, currently always 0
 
-/* the status field may be set to one of the values below: */
+} SYNTH_STATE;
 
-enum {
-  ANT_INVALID,   /* struct not set yet because ant. has not been disconn. */
-  ANT_DISCONN,   /* ant. now disconn., tm_reconn and delta_t not set */
-  ANT_RECONN     /* ant. has been disconn. and reconn., all fields valid */
-};
+#define _mbg_swab_synth_state( _p )  _nop_macro_fnc()
 
+#define SYNTH_FLAG_PHASE_IGNORED  0x01
 
-/* Summary of configuration and health data of all SVs. */
+/** @} defgroup group_synth */
 
-typedef struct {
-  CSUM csum;               /* checksum of the remaining bytes */
-  short valid;             /* flag data are valid */
 
-  T_GPS tot_51;            /* time of transmission, page 51 */
-  T_GPS tot_63;            /* time of transmission, page 63 */
-  T_GPS t0a;               /* complete reference time almanac */
 
-  CFG cfg[N_SVNO];         /* SV configuration from page 63 */
-  HEALTH health[N_SVNO];   /* SV health from pages 51, 63 */
-} CFGH;
+/**
+ * @defgroup group_tzdl Time zone / daylight saving parameters
+ *
+ * Example: <br>
+ * For automatic daylight saving enable/disable in Central Europe,
+ * the variables are to be set as shown below: <br>
+ *   - offs = 3600L           one hour from %UTC
+ *   - offs_dl = 3600L        one additional hour if daylight saving enabled
+ *   - tm_on = first Sunday from March 25, 02:00:00h ( year |= ::DL_AUTO_FLAG )
+ *   - tm_off = first Sunday from October 25, 03:00:00h ( year |= ::DL_AUTO_FLAG )
+ *   - name[0] == "CET  "     name if daylight saving not enabled
+ *   - name[1] == "CEST "     name if daylight saving is enabled
+ *
+ * @{ */
+
+/**
+ * @brief The name of a time zone
+ *
+ * @note Up to 5 printable characters, plus trailing zero
+ */
+typedef char TZ_NAME[6];
 
+/**
+ * @brief Time zone / daylight saving parameters
+ *
+ * This structure is used to specify how a device converts on-board %UTC
+ * to local time, including computation of beginning and end of daylight
+ * saving time (DST), if required.
+ *
+ * @note The ::TZDL structure contains members of type ::TM_GPS to specify
+ * the times for beginning and end of DST. However, the ::TM_GPS::frac,
+ * ::TM_GPS::offs_from_utc, and ::TM_GPS::status fields of these ::TZDL::tm_on
+ * and ::TZDL::tm_off members are ignored for the conversion to local time,
+ * and thus should be 0.
+ */
+typedef struct
+{
+  int32_t offs;      ///< standard offset from %UTC to local time [sec]
+  int32_t offs_dl;   ///< additional offset if daylight saving enabled [sec]
+  TM_GPS tm_on;      ///< date/time when daylight saving starts
+  TM_GPS tm_off;     ///< date/time when daylight saving ends
+  TZ_NAME name[2];   ///< names without and with daylight saving enabled
 
+} TZDL;
+
+/**
+ * @brief A flag indicating automatic computation of DST
+ *
+ * If this flag is or'ed to the year numbers in ::TZDL::tm_on and ::TZDL::tm_off
+ * then daylight saving is computed automatically year by year.
+ */
+#define DL_AUTO_FLAG  0x8000
 
-/* UTC correction parameters */
+/** @} defgroup group_tzdl */
 
-typedef struct {
-  CSUM csum;       /*    checksum of the remaining bytes                  */
-  short valid;     /*    flag data are valid                              */
 
-  T_GPS t0t;       /*    Reference Time UTC Parameters              [sec] */
-  l_fp A0;         /*  ± Clock Correction Coefficient 0             [sec] */
-  l_fp A1;         /*  ± Clock Correction Coefficient 1         [sec/sec] */
 
-  u_short WNlsf;   /*  week number of nearest leap second                 */
-  short DNt;       /*  the day number at the end of which LS is inserted  */
-  char delta_tls;  /*                                                     */
-  char delta_tlsf; /*                                                     */
+/**
+ * @brief Antenna status and error at reconnect information
+ *
+ * The structure below reflects the status of the antenna,
+ * the times of last disconnect/reconnect, and the board's
+ * clock offset when it has synchronized again after the
+ * disconnection interval.
+ *
+ * @note ::ANT_INFO::status changes back to ::ANT_RECONN only
+ * after the antenna has been reconnected <b>and</b> the
+ * receiver has re-synchronized to the satellite signal.
+ * In this case ::ANT_INFO::delta_t reports the time offset
+ * before resynchronization, i.e. how much the internal
+ * time has drifted while the antenna was disconnected.
+ */
+typedef struct
+{
+  int16_t status;      ///< current status of antenna, see ::ANT_STATUS_CODES
+  TM_GPS tm_disconn;   ///< time of antenna disconnect
+  TM_GPS tm_reconn;    ///< time of antenna reconnect
+  int32_t delta_t;     ///< clock offs at reconn. time in 1/::RECEIVER_INFO::ticks_per_sec units
 
-} UTC;
+} ANT_INFO;
 
-/* a struct used to hold the settings of a serial port */
 
-#ifndef _COM_PARM_DEFINED
-  typedef long BAUD_RATE;
+/**
+ * @brief Status code used with ::ANT_INFO::status
+ */
+enum ANT_STATUS_CODES
+{
+  ANT_INVALID,   ///< No other fields valid since antenna has not yet been disconnected
+  ANT_DISCONN,   ///< Antenna is disconnected, tm_reconn and delta_t not yet set
+  ANT_RECONN,    ///< Antenna has been disconnect, and receiver sync. after reconnect, so all fields valid
+  N_ANT_STATUS_CODES  ///< the number of known status codes
+};
 
-  /* indices used to identify a parameter in the framing string */
-  enum { F_DBITS, F_PRTY, F_STBITS };
 
-  /* types of handshake */
-  enum { HS_NONE, HS_XONXOFF, HS_RTSCTS };
 
-  typedef struct {
-    BAUD_RATE baud_rate;    /* e.g. 19200L */
-    char framing[4];        /* e.g. "8N1" */
-    short handshake;        /* a numeric value, only HS_NONE supported yet */
-  } COM_PARM;
+/**
+ * @brief Summary of configuration and health data of all satellites
+ */
+typedef struct
+{
+  CSUM csum;                  ///< checksum of the remaining bytes
+  int16_t valid;              ///< flag data are valid
+
+  T_GPS tot_51;               ///< time of transmission, page 51
+  T_GPS tot_63;               ///< time of transmission, page 63
+  T_GPS t0a;                  ///< complete reference time almanac
+
+  CFG cfg[N_SVNO_GPS];        ///< 4 bit SV configuration code from page 63
+  HEALTH health[N_SVNO_GPS];  ///< 6 bit SV health codes from pages 51, 63
+
+} CFGH;
+
 
-#define _COM_PARM_DEFINED
-#endif
 
+/**
+ * @brief GPS %UTC correction parameters
+ *
+ * %UTC correction parameters basically as sent by the GPS satellites.
+ *
+ * The csum field is only used by the card's firmware to check the
+ * consistency of the structure in non-volatile memory.
+ *
+ * The field labeled valid indicates if the parameter set is valid, i.e.
+ * if it contains data received from the satellites.
+ *
+ * t0t, A0 and A1 contain fractional correction parameters for the current
+ * GPS-%UTC time offset in addition to the whole seconds. This is evaluated
+ * by the receivers' firmware to convert GPS time to %UTC time.
+ *
+ * The delta_tls field contains the current full seconds offset between
+ * GPS time and %UTC, which corresponds to the number of leap seconds inserted
+ * into the %UTC time scale since GPS was put into operation in January 1980.
+ *
+ * delta_tlfs holds the number of "future" leap seconds, i.e. the %UTC offset
+ * after the next leap second event defined by WNlsf and DNt.
+ *
+ * The fields WNlsf and DNt specify the GPS week number and the day number
+ * in that week for the end of which a leap second has been scheduled.
+ *
+ * @note: The satellites transmit WNlsf only as a signed 8 bit value, so it
+ * can only define a point in time which is +/- 127 weeks off the current time.
+ * The firmware tries to expand this based on the current week number, but
+ * the result is ambiguous if the leap second occurs or occurred more
+ * than 127 weeks in the future or past.
+ *
+ * So the leap second date should <b>only</b> be evaluated and displayed
+ * in a user interface if the fields delta_tls and delta_tlsf have
+ * different values, in which case there is indeed a leap second announcement
+ * inside the +/- 127 week range.
+ *
+ * @note In the original code the type of A0 and A1 is double.
+ */
+typedef struct
+{
+  CSUM csum;          ///<  Checksum of the remaining bytes
+  int16_t valid;      ///<  Flag indicating %UTC parameters are valid
 
+  T_GPS t0t;          ///<  Reference Time %UTC Parameters [wn|sec]
+  l_fp A0;            ///<  +- Clock Correction Coefficient 0 [sec]
+  l_fp A1;            ///<  +- Clock Correction Coefficient 1 [sec/sec]
 
-/* the codes below define what has to comes out of the serial ports */
+  uint16_t WNlsf;     ///<  Week number of nearest leap second
+  int16_t DNt;        ///<  The day number at the end of which a leap second occurs
+  int8_t delta_tls;   ///<  Current %UTC offset to GPS system time [sec]
+  int8_t delta_tlsf;  ///<  Future %UTC offset to GPS system time after next leap second transition [sec]
 
-enum { STR_ON_REQ, STR_PER_SEC,
-       STR_PER_MIN, N_STR_MODE_0,      /* COM0 and COM1 */
-       STR_UCAP = N_STR_MODE_0,
-       STR_UCAP_REQ, N_STR_MODE_1      /* COM1 only */
-     };
+} UTC;
 
 
-#define N_COM   2  /* the number of serial ports */
+/**
+ * @brief GPS ASCII message
+ */
+typedef struct
+{
+  CSUM csum;       ///< checksum of the remaining bytes */
+  int16_t valid;   ///< flag data are valid
+  char s[23];      ///< 22 chars GPS ASCII message plus trailing zero
 
-/* the structure used to store the modes of both serial ports */
+} ASCII_MSG;
 
-typedef struct {
-  COM_PARM com[N_COM];    /* COM0 and COM1 settings */
-  u_char mode[N_COM];      /* COM0 and COM1 output mode */
-} PORT_PARM;
 
-/* Ephemeris parameters of one specific SV. Needed to compute the position */
-/* of a satellite at a given time with high precision. Valid for an */
-/* interval of 4 to 6 hours from start of transmission. */
-
-typedef struct {
-  CSUM csum;       /*    checksum of the remaining bytes                  */
-  short valid;     /*    flag data are valid                              */
-
-  HEALTH health;   /*    health indication of transmitting SV      [---]  */
-  IOD IODC;        /*    Issue Of Data, Clock                             */
-  IOD IODE2;       /*    Issue of Data, Ephemeris (Subframe 2)            */
-  IOD IODE3;       /*    Issue of Data, Ephemeris (Subframe 3)            */
-  T_GPS tt;        /*    time of transmission                             */
-  T_GPS t0c;       /*    Reference Time Clock                      [---]  */
-  T_GPS t0e;       /*    Reference Time Ephemeris                  [---]  */
-
-  l_fp   sqrt_A;   /*    Square Root of semi-major Axis        [sqrt(m)]  */
-  l_fp   e;        /*    Eccentricity                              [---]  */
-  l_fp   M0;       /*  ± Mean Anomaly at Ref. Time                 [rad]  */
-  l_fp   omega;    /*  ± Argument of Perigee                       [rad]  */
-  l_fp   OMEGA0;   /*  ± Longit. of Asc. Node of orbit plane       [rad]  */
-  l_fp   OMEGADOT; /*  ± Rate of Right Ascension               [rad/sec]  */
-  l_fp   deltan;   /*  ± Mean Motion Diff. from computed value [rad/sec]  */
-  l_fp   i0;       /*  ± Inclination Angle                         [rad]  */
-  l_fp   idot;     /*  ± Rate of Inclination Angle             [rad/sec]  */
-  l_fp   crc;      /*  ± Cosine Corr. Term to Orbit Radius           [m]  */
-  l_fp   crs;      /*  ± Sine Corr. Term to Orbit Radius             [m]  */
-  l_fp   cuc;      /*  ± Cosine Corr. Term to Arg. of Latitude     [rad]  */
-  l_fp   cus;      /*  ± Sine Corr. Term to Arg. of Latitude       [rad]  */
-  l_fp   cic;      /*  ± Cosine Corr. Term to Inclination Angle    [rad]  */
-  l_fp   cis;      /*  ± Sine Corr. Term to Inclination Angle      [rad]  */
-
-  l_fp   af0;      /*  ± Clock Correction Coefficient 0            [sec]  */
-  l_fp   af1;      /*  ± Clock Correction Coefficient 1        [sec/sec]  */
-  l_fp   af2;      /*  ± Clock Correction Coefficient 2       [sec/sec²]  */
-  l_fp   tgd;      /*  ± estimated group delay differential        [sec]  */
-
-  u_short URA;      /*    predicted User Range Accuracy                    */
-
-  u_char L2code;    /*    code on L2 channel                         [---] */
-  u_char L2flag;    /*    L2 P data flag                             [---] */
+/**
+ * @brief Ephemeris parameters of one specific satellite
+ *
+ * Needed to compute the position of a satellite at a given time with
+ * high precision. Valid for an interval of 4 to 6 hours from start
+ * of transmission.
+ */
+typedef struct
+{
+  CSUM csum;       ///<    checksum of the remaining bytes
+  int16_t valid;   ///<    flag data are valid
+
+  HEALTH health;   ///<    health indication of transmitting SV      [---]
+  IOD IODC;        ///<    Issue Of Data, Clock
+  IOD IODE2;       ///<    Issue of Data, Ephemeris (Subframe 2)
+  IOD IODE3;       ///<    Issue of Data, Ephemeris (Subframe 3)
+  T_GPS tt;        ///<    time of transmission
+  T_GPS t0c;       ///<    Reference Time Clock                      [---]
+  T_GPS t0e;       ///<    Reference Time Ephemeris                  [---]
+
+  l_fp sqrt_A;     ///<    Square Root of semi-major Axis        [sqrt(m)]
+  l_fp e;          ///<    Eccentricity                              [---]
+  l_fp M0;         ///< +- Mean Anomaly at Ref. Time                 [rad]
+  l_fp omega;      ///< +- Argument of Perigee                       [rad]
+  l_fp OMEGA0;     ///< +- Longit. of Asc. Node of orbit plane       [rad]
+  l_fp OMEGADOT;   ///< +- Rate of Right Ascension               [rad/sec]
+  l_fp deltan;     ///< +- Mean Motion Diff. from computed value [rad/sec]
+  l_fp i0;         ///< +- Inclination Angle                         [rad]
+  l_fp idot;       ///< +- Rate of Inclination Angle             [rad/sec]
+  l_fp crc;        ///< +- Cosine Corr. Term to Orbit Radius           [m]
+  l_fp crs;        ///< +- Sine Corr. Term to Orbit Radius             [m]
+  l_fp cuc;        ///< +- Cosine Corr. Term to Arg. of Latitude     [rad]
+  l_fp cus;        ///< +- Sine Corr. Term to Arg. of Latitude       [rad]
+  l_fp cic;        ///< +- Cosine Corr. Term to Inclination Angle    [rad]
+  l_fp cis;        ///< +- Sine Corr. Term to Inclination Angle      [rad]
+
+  l_fp af0;        ///< +- Clock Correction Coefficient 0            [sec]
+  l_fp af1;        ///< +- Clock Correction Coefficient 1        [sec/sec]
+  l_fp af2;        ///< +- Clock Correction Coefficient 2      [sec/sec^2]
+  l_fp tgd;        ///< +- estimated group delay differential        [sec]
+
+  uint16_t URA;    ///<    predicted User Range Accuracy
+
+  uint8_t L2code;  ///<    code on L2 channel                         [---]
+  uint8_t L2flag;  ///<    L2 P data flag                             [---]
 
 } EPH;
 
-/* Almanac parameters of one specific SV. A reduced precision set of */
-/* parameters used to check if a satellite is in view at a given time. */
-/* Valid for an interval of more than 7 days from start of transmission. */
 
-typedef struct {
-  CSUM csum;       /*    checksum of the remaining bytes                  */
-  short valid;     /*    flag data are valid                              */
 
-  HEALTH health;   /*                                               [---] */
-  T_GPS t0a;       /*    Reference Time Almanac                     [sec] */
+/**
+ * @brief Almanac parameters of one specific satellite
+ *
+ * A reduced precision set of parameters used to check if a satellite
+ * is in view at a given time. Valid for an interval of more than 7 days
+ * from start of transmission.
+ */
+typedef struct
+{
+  CSUM csum;       ///<    checksum of the remaining bytes
+  int16_t valid;   ///<    flag data are valid
+
+  HEALTH health;   ///<                                               [---]
+  T_GPS t0a;       ///<    Reference Time Almanac                     [sec]
+
+  l_fp sqrt_A;     ///<    Square Root of semi-major Axis         [sqrt(m)]
+  l_fp e;          ///<    Eccentricity                               [---]
 
-  l_fp   sqrt_A;   /*    Square Root of semi-major Axis         [sqrt(m)] */
-  l_fp   e;        /*    Eccentricity                               [---] */
+  l_fp M0;         ///< +- Mean Anomaly at Ref. Time                  [rad]
+  l_fp omega;      ///< +- Argument of Perigee                        [rad]
+  l_fp OMEGA0;     ///< +- Longit. of Asc. Node of orbit plane        [rad]
+  l_fp OMEGADOT;   ///< +- Rate of Right Ascension                [rad/sec]
+  l_fp deltai;     ///< +-                                            [rad]
+  l_fp af0;        ///< +- Clock Correction Coefficient 0             [sec]
+  l_fp af1;        ///< +- Clock Correction Coefficient 1         [sec/sec]
 
-  l_fp   M0;       /*  ± Mean Anomaly at Ref. Time                  [rad] */
-  l_fp   omega;    /*  ± Argument of Perigee                        [rad] */
-  l_fp   OMEGA0;   /*  ± Longit. of Asc. Node of orbit plane        [rad] */
-  l_fp   OMEGADOT; /*  ± Rate of Right Ascension                [rad/sec] */
-  l_fp   deltai;   /*  ±                                            [rad] */
-  l_fp   af0;      /*  ± Clock Correction Coefficient 0             [sec] */
-  l_fp   af1;      /*  ± Clock Correction Coefficient 1         [sec/sec] */
 } ALM;
 
 
-/* ionospheric correction parameters */
 
-typedef struct {
-  CSUM csum;       /*    checksum of the remaining bytes                  */
-  short valid;     /*    flag data are valid                              */
+/**
+ * @brief Ionospheric correction parameters
+ */
+typedef struct
+{
+  CSUM csum;       ///<    checksum of the remaining bytes
+  int16_t valid;   ///<    flag data are valid
 
-  l_fp   alpha_0;  /*    Ionosph. Corr. Coeff. Alpha 0              [sec] */
-  l_fp   alpha_1;  /*    Ionosph. Corr. Coeff. Alpha 1          [sec/deg] */
-  l_fp   alpha_2;  /*    Ionosph. Corr. Coeff. Alpha 2        [sec/deg^2] */
-  l_fp   alpha_3;  /*    Ionosph. Corr. Coeff. Alpha 3        [sec/deg^3] */
+  l_fp alpha_0;    ///<    Ionosph. Corr. Coeff. Alpha 0              [sec]
+  l_fp alpha_1;    ///<    Ionosph. Corr. Coeff. Alpha 1          [sec/deg]
+  l_fp alpha_2;    ///<    Ionosph. Corr. Coeff. Alpha 2        [sec/deg^2]
+  l_fp alpha_3;    ///<    Ionosph. Corr. Coeff. Alpha 3        [sec/deg^3]
 
-  l_fp   beta_0;   /*    Ionosph. Corr. Coeff. Beta 0               [sec] */
-  l_fp   beta_1;   /*    Ionosph. Corr. Coeff. Beta 1           [sec/deg] */
-  l_fp   beta_2;   /*    Ionosph. Corr. Coeff. Beta 2         [sec/deg^2] */
-  l_fp   beta_3;   /*    Ionosph. Corr. Coeff. Beta 3         [sec/deg^3] */
+  l_fp beta_0;     ///<    Ionosph. Corr. Coeff. Beta 0               [sec]
+  l_fp beta_1;     ///<    Ionosph. Corr. Coeff. Beta 1           [sec/deg]
+  l_fp beta_2;     ///<    Ionosph. Corr. Coeff. Beta 2         [sec/deg^2]
+  l_fp beta_3;     ///<    Ionosph. Corr. Coeff. Beta 3         [sec/deg^3]
 
 } IONO;
 
-void mbg_tm_str (char **, TM *, int);
+
+
+void mbg_tm_str (char **, TM_GPS *, int, int);
 void mbg_tgps_str (char **, T_GPS *, int);
 void get_mbg_header (unsigned char **, GPS_MSG_HDR *);
 void put_mbg_header (unsigned char **, GPS_MSG_HDR *);
@@ -534,7 +967,7 @@ void get_mbg_svno (unsigned char **, SVNO *);
 void get_mbg_health (unsigned char **, HEALTH *);
 void get_mbg_cfg (unsigned char **, CFG *);
 void get_mbg_tgps (unsigned char **, T_GPS *);
-void get_mbg_tm (unsigned char **, TM *);
+void get_mbg_tm (unsigned char **, TM_GPS *);
 void get_mbg_ttm (unsigned char **, TTM *);
 void get_mbg_synth (unsigned char **, SYNTH *);
 void get_mbg_tzdl (unsigned char **, TZDL *);
index 3ee1ff79c8060ee487962072a3f37ccdcb1077d3..3afb627d25944bd5999b095fbad8fc4f64638ef5 100644 (file)
@@ -83,13 +83,15 @@ extern systime_func_ptr ntpcal_set_timefunc(systime_func_ptr);
 #define        SECSPERMIN      (60)                    /* seconds per minute */
 #define        MINSPERHR       (60)                    /* minutes per hour */
 #define        HRSPERDAY       (24)                    /* hours per day */
+#define        DAYSPERWEEK     (7)                     /* days per week */
 #define        DAYSPERYEAR     (365)                   /* days per year */
 
 #define        SECSPERHR       (SECSPERMIN * MINSPERHR)
 #define        SECSPERDAY      (SECSPERHR * HRSPERDAY)
+#define        SECSPERWEEK     (DAYSPERWEEK * SECSPERDAY)
 #define        SECSPERYEAR     (365 * SECSPERDAY)      /* regular year */
 #define        SECSPERLEAPYEAR (366 * SECSPERDAY)      /* leap year */
-#define SECSPERAVGYEAR 31556952                /* mean year length over 400yrs */
+#define        SECSPERAVGYEAR  31556952                /* mean year length over 400yrs */
 
 /*
  * Gross hacks.         I have illicit knowlege that there won't be overflows
@@ -113,7 +115,7 @@ extern      uint32_t caltontp       (const struct calendar *);
  * Convert between 'time_t' and 'vint64'
  */
 extern vint64 time_to_vint64(const time_t *);
-extern time_t vint64_to_time(const vint64 *); 
+extern time_t vint64_to_time(const vint64 *);
 
 /*
  * Get the build date & time. ATTENTION: The time zone is not specified!
index 3a98408f07dea33681062d4575ca82fe75d655ad..808dea7497481db00cc12e01ef3dfb60efa9e4c0 100644 (file)
@@ -4,7 +4,7 @@
  * parse.h,v 4.12 2007/01/14 08:36:03 kardel RELEASE_20070114_A
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -104,6 +104,13 @@ extern unsigned int splclock (void);
 #define TIMES10(_X_)   (((_X_) << 3) + ((_X_) << 1))
 #endif
 
+/*
+ * some constants useful for GPS time conversion
+ */
+#define GPSORIGIN       2524953600UL                /* NTP origin - GPS origin in seconds */
+#define GPSWRAP         990                         /* assume week count less than this in the previous epoch */
+#define GPSWEEKS        1024                        /* number of weeks until the GPS epch rolls over */
+
 /*
  * state flags
  */
@@ -229,13 +236,13 @@ typedef struct parsetime parsetime_t;
 #define PARSE_IO_CSIZE 0x00000003
 #define PARSE_IO_CS5   0x00000000
 #define PARSE_IO_CS6   0x00000001
-#define PARSE_IO_CS7   0x00000002 
-#define PARSE_IO_CS8   0x00000003 
+#define PARSE_IO_CS7   0x00000002
+#define PARSE_IO_CS8   0x00000003
 
 /*
  * ioctl structure
  */
-union parsectl 
+union parsectl
 {
   struct parsegettc
     {
@@ -258,7 +265,7 @@ union parsectl
       u_long         parse_cs; /* character size (needed for stripping) */
     } parsesetcs;
 };
-  
+
 typedef union parsectl parsectl_t;
 
 /*------ for conversion routines --------*/
@@ -266,7 +273,7 @@ typedef union parsectl parsectl_t;
 struct parse                   /* parse module local data */
 {
   int            parse_flags;  /* operation and current status flags */
-  
+
   int           parse_ioflags;    /* io handling flags (5-8 Bit control currently) */
 
   /*
@@ -286,7 +293,7 @@ struct parse                        /* parse module local data */
   char          *parse_ldata;  /* last data buffer */
   unsigned short parse_ldsize; /* last data buffer length */
   u_long         parse_badformat;      /* number of unparsable pakets */
-  
+
   timestamp_t    parse_lastchar; /* last time a character was received */
   parsetime_t    parse_dtime;  /* external data prototype */
 };
index 319dd543c43c9f11d677f8777cc5c3de010aaf51..f8213879e7bdf72d28d7d15db9fd40444d3eb857 100644 (file)
@@ -4,7 +4,7 @@
  * parse_conf.h,v 4.7 2005/06/25 10:58:45 kardel RELEASE_20050625_A
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index e784f9e8b37a98a5d6944d11825da46b4f6eca4a..bd40093d362c55b9d82ce354a67d2c26fd980523 100644 (file)
@@ -4,7 +4,7 @@
  * parsestreams.h,v 4.5 2005/06/25 10:52:47 kardel RELEASE_20050625_A
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index 1068576f88aa9be18d0dab6a25fc4de3dd10f0c0..2f7c787cbb2a3e2addb589fb776ef90469663d96 100644 (file)
@@ -7,15 +7,15 @@
  * /src/NTP/ntp4-dev/libparse/clk_computime.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * clk_computime.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
- * 
+ *
  * Supports Diem's Computime Radio Clock
- * 
+ *
  * Used the Meinberg clock as a template for Diem's Computime Radio Clock
  *
  * adapted by Alois Camenzind <alois.camenzind@ubs.ch>
- * 
+ *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -59,22 +59,22 @@ extern int printf (const char *, ...);
 
 /*
  * The Computime receiver sends a datagram in the following format every minute
- * 
- * Timestamp   T:YY:MM:MD:WD:HH:MM:SSCRLF 
+ *
+ * Timestamp   T:YY:MM:MD:WD:HH:MM:SSCRLF
  * Pos          0123456789012345678901 2 3
  *              0000000000111111111122 2 2
  * Parse        T:  :  :  :  :  :  :  rn
- * 
- * T   Startcharacter "T" specifies start of the timestamp 
- * YY  Year MM Month 1-12 
- * MD  Day of the month 
- * WD  Day of week 
- * HH  Hour 
- * MM   Minute 
+ *
+ * T   Startcharacter "T" specifies start of the timestamp
+ * YY  Year MM Month 1-12
+ * MD  Day of the month
+ * WD  Day of week
+ * HH  Hour
+ * MM   Minute
  * SS   Second
- * CR   Carriage return 
+ * CR   Carriage return
  * LF   Linefeed
- * 
+ *
  */
 
 static struct format computime_fmt =
@@ -99,12 +99,12 @@ clockformat_t   clock_computime =
        (void *)&computime_fmt, /* conversion configuration */
        "Diem's Computime Radio Clock", /* Computime Radio Clock */
        24,                     /* string buffer */
-       0                       /* no private data (complete pakets) */
+       0                       /* no private data (complete packets) */
 };
 
 /*
  * cvt_computime
- * 
+ *
  * convert simple type format
  */
 static          u_long
@@ -117,7 +117,7 @@ cvt_computime(
        )
 {
 
-       if (!Strok(buffer, format->fixed_string)) { 
+       if (!Strok(buffer, format->fixed_string)) {
                return CVT_NONE;
        } else {
                if (Stoi(&buffer[format->field_offsets[O_DAY].offset], &clock_time->day,
@@ -131,7 +131,7 @@ cvt_computime(
                    Stoi(&buffer[format->field_offsets[O_MIN].offset], &clock_time->minute,
                         format->field_offsets[O_MIN].length) ||
                    Stoi(&buffer[format->field_offsets[O_SEC].offset], &clock_time->second,
-                        format->field_offsets[O_SEC].length)) { 
+                        format->field_offsets[O_SEC].length)) {
                        return CVT_FAIL | CVT_BADFMT;
                } else {
 
@@ -156,19 +156,19 @@ inp_computime(
              )
 {
        unsigned int rtc;
-       
+
        parseprintf(DD_PARSE, ("inp_computime(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
-       
+
        switch (ch)
        {
        case 'T':
                parseprintf(DD_PARSE, ("inp_computime: START seen\n"));
-               
+
                parseio->parse_index = 1;
                parseio->parse_data[0] = ch;
                parseio->parse_dtime.parse_stime = *tstamp; /* collect timestamp */
                return PARSE_INP_SKIP;
-         
+
        case '\n':
                parseprintf(DD_PARSE, ("inp_computime: END seen\n"));
                if ((rtc = parse_addchar(parseio, ch)) == PARSE_INP_SKIP)
index bfd9a744acb36a97cda5acb2618066f9d4e02511..6b0692da29728f77f424ae315cc48694d47d6297 100644 (file)
@@ -1,12 +1,12 @@
 /*
  * /src/NTP/ntp4-dev/libparse/clk_dcf7000.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
- *  
+ *
  * clk_dcf7000.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * ELV DCF7000 module
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -63,7 +63,7 @@ static struct format dcf7000_fmt =
        },
        (const unsigned char *)"  -  -  -  -  -  -  -  \r",
        0
-};    
+};
 static u_long cvt_dcf7000 (unsigned char *, int, struct format *, clocktime_t *, void *);
 static unsigned long inp_dcf7000 (parse_t *, unsigned int, timestamp_t *);
 
@@ -75,7 +75,7 @@ clockformat_t clock_dcf7000 =
   (void *)&dcf7000_fmt,                /* conversion configuration */
   "ELV DCF7000",               /* ELV clock */
   24,                          /* string buffer */
-  0                            /* no private data (complete pakets) */
+  0                            /* no private data (complete packets) */
 };
 
 /*
@@ -117,7 +117,7 @@ cvt_dcf7000(
                {
                        unsigned char *f = &buffer[format->field_offsets[O_FLAGS].offset];
                        long flags;
-         
+
                        clock_time->flags = 0;
                        clock_time->usecond = 0;
 
@@ -156,9 +156,9 @@ inp_dcf7000(
          )
 {
        unsigned int rtc;
-       
+
        parseprintf(DD_PARSE, ("inp_dcf7000(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
-       
+
        switch (ch)
        {
        case '\r':
index a94c3f7a2edd0ffed6cdacdddb76ef53b1b2babf..e42677c14f4b08d0b7c702e83651ecbe74f786e8 100644 (file)
@@ -1,12 +1,12 @@
 /*
  * /src/NTP/REPOSITORY/ntp4-dev/libparse/clk_meinberg.c,v 4.12.2.1 2005/09/25 10:22:35 kardel RELEASE_20050925_A
- *  
+ *
  * clk_meinberg.c,v 4.12.2.1 2005/09/25 10:22:35 kardel RELEASE_20050925_A
  *
  * Meinberg clock support
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -65,7 +65,7 @@
 /*
  * The Meinberg receiver every second sends a datagram of the following form
  * (Standard Format)
- * 
+ *
  *     <STX>D:<dd>.<mm>.<yy>;T:<w>;U:<hh>:<mm>:<ss>;<S><F><D><A><ETX>
  * pos:  0  00 00 0 00 0 11 111 1 111 12 2 22 2 22 2 2  2  3  3   3
  *       1  23 45 6 78 9 01 234 5 678 90 1 23 4 56 7 8  9  0  1   2
  * <L>             = 'A' LEAP second announcement
  * <R>             = 'R' alternate antenna
  *
- * Meinberg GPS166 receiver
+ * Meinberg GPS receivers
  *
- * You must get the Uni-Erlangen firmware for the GPS receiver support
+ * For very old devices you must get the Uni-Erlangen firmware for the GPS receiver support
  * to work to full satisfaction !
+ * With newer GPS receiver types the Uni Erlangen string format can be configured at the device.
  *
  *     <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <+/-><00:00>; <U><S><F><D><A><L><R><L>; <position...><ETX>
  *
  *        123456789012345678901234567890123456789012345678901234567890123456
  *     \x0209.07.93; 5; 08:48:26; +00:00; #*S!A L; 49.5736N  11.0280E  373m\x03
  *
- * 
+ *
  * <STX>           = '\002' ASCII start of text
  * <ETX>           = '\003' ASCII end of text
  * <dd>,<mm>,<yy>  = day, month, year(2 digits!!)
@@ -158,10 +159,10 @@ mbg_csum(
 {
   unsigned long sum = 0;
   unsigned int i;
-  
+
   for ( i = 0; i < n; i++ )
     sum += *p++;
-  
+
   return( sum );
 }  /* csum */
 
@@ -171,10 +172,10 @@ get_mbg_header(
               GPS_MSG_HDR *headerp
               )
 {
-  headerp->gps_cmd = get_lsb_short(bufpp);
-  headerp->gps_len = get_lsb_short(bufpp);
-  headerp->gps_data_csum = get_lsb_short(bufpp);
-  headerp->gps_hdr_csum  = get_lsb_short(bufpp);
+  headerp->cmd = get_lsb_short(bufpp);
+  headerp->len = get_lsb_short(bufpp);
+  headerp->data_csum = get_lsb_short(bufpp);
+  headerp->hdr_csum  = get_lsb_short(bufpp);
 }
 
 static struct format meinberg_fmt[] =
@@ -224,7 +225,7 @@ struct msg_buf
 #define MBG_HEADER     1       /* receiving header */
 #define MBG_DATA       2       /* receiving data */
 #define MBG_STRING      3      /* receiving standard data message */
-  
+
 clockformat_t clock_meinberg[] =
 {
        {
@@ -234,7 +235,7 @@ clockformat_t clock_meinberg[] =
                0,              /* conversion configuration */
                "Meinberg Standard", /* Meinberg simple format - beware */
                32,                             /* string buffer */
-               0               /* no private data (complete pakets) */
+               0               /* no private data (complete packets) */
        },
        {
                mbg_input,      /* normal input handling */
@@ -243,16 +244,16 @@ clockformat_t clock_meinberg[] =
                0,              /* conversion configuration */
                "Meinberg Extended", /* Meinberg enhanced format */
                32,             /* string buffer */
-               0               /* no private data (complete pakets) */
+               0               /* no private data (complete packets) */
        },
        {
                gps_input,      /* no input handling */
-               cvt_mgps,       /* Meinberg GPS166 conversion */
+               cvt_mgps,       /* Meinberg GPS receiver conversion */
                pps_one,        /* easy PPS monitoring */
                (void *)&meinberg_fmt[2], /* conversion configuration */
-               "Meinberg GPS Extended", /* Meinberg FAU GPS format */
+               "Meinberg GPS Extended",  /* Meinberg FAU GPS format */
                512,            /* string buffer */
-               sizeof(struct msg_buf)  /* no private data (complete pakets) */
+               sizeof(struct msg_buf)  /* no private data (complete packets) */
        }
 };
 
@@ -271,7 +272,7 @@ cvt_meinberg(
             )
 {
        struct format *format;
-       
+
        /*
         * select automagically correct data format
         */
@@ -312,7 +313,7 @@ cvt_meinberg(
        else
        {
                unsigned char *f = &buffer[format->field_offsets[O_FLAGS].offset];
-               
+
                clock_time->usecond = 0;
                clock_time->flags   = PARSEB_S_LEAP;
 
@@ -348,7 +349,7 @@ cvt_meinberg(
                        case ' ':
                                clock_time->utcoffset = -1*60*60; /* MET */
                                break;
-                               
+
                        case 'S':
                                clock_time->utcoffset = -2*60*60; /* MED */
                                break;
@@ -360,27 +361,27 @@ cvt_meinberg(
                                clock_time->utcoffset = 0;        /* UTC */
                                clock_time->flags    |= PARSEB_UTC;
                                break;
-                               
+
                        default:
                                return CVT_FAIL|CVT_BADFMT;
                        }
                }
-               
+
                /*
                 * gather status flags
                 */
                if (buffer[format->field_offsets[O_ZONE].offset] == 'S')
                        clock_time->flags    |= PARSEB_DST;
-               
+
                if (f[0] == '#')
                        clock_time->flags |= PARSEB_POWERUP;
-               
+
                if (f[1] == '*')
                        clock_time->flags |= PARSEB_NOSYNC;
-               
+
                if (f[3] == '!')
                        clock_time->flags |= PARSEB_ANNOUNCE;
-               
+
                /*
                 * oncoming leap second
                 * 'a' code not confirmed - earth is not
@@ -388,25 +389,25 @@ cvt_meinberg(
                 */
                if (f[3] == 'A')
                        clock_time->flags |= PARSEB_LEAPADD;
-               
+
                if (f[3] == 'a')
                        clock_time->flags |= PARSEB_LEAPDEL;
-               
-               
+
+
                if (format->flags & MBG_EXTENDED)
                {
                        clock_time->flags |= PARSEB_S_ANTENNA;
-                       
+
                        /*
                         * DCF77 does not encode the direction -
                         * so we take the current default -
                         * earth slowing down
                         */
                        clock_time->flags &= ~PARSEB_LEAPDEL;
-                       
+
                        if (f[4] == 'A')
                                clock_time->flags |= PARSEB_LEAPADD;
-                       
+
                        if (f[5] == 'R')
                                clock_time->flags |= PARSEB_ALTERNATE;
                }
@@ -428,19 +429,19 @@ mbg_input(
          )
 {
        unsigned int rtc;
-       
+
        parseprintf(DD_PARSE, ("mbg_input(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
-       
+
        switch (ch)
        {
        case STX:
                parseprintf(DD_PARSE, ("mbg_input: STX seen\n"));
-               
+
                parseio->parse_index = 1;
                parseio->parse_data[0] = ch;
                parseio->parse_dtime.parse_stime = *tstamp; /* collect timestamp */
                return PARSE_INP_SKIP;
-         
+
        case ETX:
                parseprintf(DD_PARSE, ("mbg_input: ETX seen\n"));
                if ((rtc = parse_addchar(parseio, ch)) == PARSE_INP_SKIP)
@@ -493,9 +494,9 @@ cvt_mgps(
                {
                        long h;
                        unsigned char *f = &buffer[format->field_offsets[O_FLAGS].offset];
-         
+
                        clock_time->flags = PARSEB_S_LEAP|PARSEB_S_POSITION;
-             
+
                        clock_time->usecond = 0;
 
                        /*
@@ -522,22 +523,22 @@ cvt_mgps(
                                        clock_time->utcoffset = -clock_time->utcoffset;
                                }
                        }
-         
+
                        /*
                         * gather status flags
                         */
                        if (buffer[format->field_offsets[O_ZONE].offset] == 'S')
                            clock_time->flags    |= PARSEB_DST;
-         
+
                        if (clock_time->utcoffset == 0)
                            clock_time->flags |= PARSEB_UTC;
-         
+
                        /*
                         * no sv's seen - no time & position
                         */
                        if (f[0] == '#')
                            clock_time->flags |= PARSEB_POWERUP;
-         
+
                        /*
                         * at least one sv seen - time (for last position)
                         */
@@ -546,13 +547,13 @@ cvt_mgps(
                        else
                            if (!(clock_time->flags & PARSEB_POWERUP))
                                clock_time->flags |= PARSEB_POSITION;
-         
+
                        /*
                         * oncoming zone switch
                         */
                        if (f[3] == '!')
                            clock_time->flags |= PARSEB_ANNOUNCE;
-         
+
                        /*
                         * oncoming leap second
                         * 'a' code not confirmed - earth is not
@@ -560,14 +561,14 @@ cvt_mgps(
                         */
                        if (f[4] == 'A')
                            clock_time->flags |= PARSEB_LEAPADD;
-         
+
                        if (f[4] == 'a')
                            clock_time->flags |= PARSEB_LEAPDEL;
 
                        /*
                         * f[5] == ' '
                         */
-         
+
                        /*
                         * this is the leap second
                         */
@@ -594,21 +595,21 @@ gps_input(
   CSUM calc_csum;                    /* used to compare the incoming csums */
   GPS_MSG_HDR header;
   struct msg_buf *msg_buf;
-  
+
   msg_buf = (struct msg_buf *)parseio->parse_pdata;
 
   parseprintf(DD_PARSE, ("gps_input(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
 
   if (!msg_buf)
     return PARSE_INP_SKIP;
-  
+
   if ( msg_buf->phase == MBG_NONE )
     {                  /* not receiving yet */
       switch (ch)
        {
        case SOH:
          parseprintf(DD_PARSE, ("gps_input: SOH seen\n"));
-         
+
          msg_buf->len = sizeof( header ); /* prepare to receive msg header */
          msg_buf->phase = MBG_HEADER; /* receiving header */
          break;
@@ -621,7 +622,7 @@ gps_input(
          parseio->parse_index = 1;
          parseio->parse_data[0] = ch;
          break;
-         
+
        default:
          return PARSE_INP_SKIP;        /* keep searching */
        }
@@ -638,7 +639,7 @@ gps_input(
   if ((msg_buf->phase == MBG_STRING) &&
       (parseio->parse_index < parseio->parse_dsize))
     parseio->parse_data[parseio->parse_index++] = ch;
-  
+
   parseio->parse_dtime.parse_msg[parseio->parse_dtime.parse_msglen++] = ch;
 
   if (parseio->parse_dtime.parse_msglen > sizeof(parseio->parse_dtime.parse_msg))
@@ -649,7 +650,7 @@ gps_input(
       parseio->parse_ldsize = parseio->parse_index;
       return PARSE_INP_DATA;
     }
-  
+
   switch (msg_buf->phase)
     {
     case MBG_HEADER:
@@ -685,41 +686,41 @@ gps_input(
   if ( msg_buf->phase == MBG_HEADER )
     {         /* header complete now */
       unsigned char *datap = parseio->parse_dtime.parse_msg + 1;
-      
+
       get_mbg_header(&datap, &header);
-      
+
       parseprintf(DD_PARSE, ("gps_input: header: cmd 0x%x, len %d, dcsum 0x%x, hcsum 0x%x\n",
-                            (int)header.gps_cmd, (int)header.gps_len, (int)header.gps_data_csum,
-                            (int)header.gps_hdr_csum));
-      
+                            (int)header.cmd, (int)header.len, (int)header.data_csum,
+                            (int)header.hdr_csum));
+
 
       calc_csum = mbg_csum( (unsigned char *) parseio->parse_dtime.parse_msg + 1, (unsigned short)6 );
 
-      if ( calc_csum != header.gps_hdr_csum )
+      if ( calc_csum != header.hdr_csum )
        {
          parseprintf(DD_PARSE, ("gps_input: header checksum mismatch expected 0x%x, got 0x%x\n",
                                 (int)calc_csum, (int)mbg_csum( (unsigned char *) parseio->parse_dtime.parse_msg, (unsigned short)6 )));
-         
+
          msg_buf->phase = MBG_NONE;  /* back to hunting mode */
          return PARSE_INP_DATA;      /* invalid header checksum received - pass up for detection */
        }
 
-      if ((header.gps_len == 0)  ||       /* no data to wait for */
-         (header.gps_len >= (sizeof (parseio->parse_dtime.parse_msg) - sizeof(header) - 1)))   /* blows anything we have space for */
+      if ((header.len == 0)  ||       /* no data to wait for */
+         (header.len >= (sizeof (parseio->parse_dtime.parse_msg) - sizeof(header) - 1)))       /* blows anything we have space for */
        {
          msg_buf->phase = MBG_NONE;  /* back to hunting mode */
-         return (header.gps_len == 0) ? PARSE_INP_DATA : PARSE_INP_SKIP; /* message complete/throwaway */
+         return (header.len == 0) ? PARSE_INP_DATA : PARSE_INP_SKIP; /* message complete/throwaway */
        }
-    
-      parseprintf(DD_PARSE, ("gps_input: expecting %d bytes of data message\n", (int)header.gps_len));
-      
-      msg_buf->len   = header.gps_len;/* save number of bytes to wait for */
+
+      parseprintf(DD_PARSE, ("gps_input: expecting %d bytes of data message\n", (int)header.len));
+
+      msg_buf->len   = header.len;/* save number of bytes to wait for */
       msg_buf->phase = MBG_DATA;      /* flag header already complete */
       return PARSE_INP_SKIP;
     }
 
   parseprintf(DD_PARSE, ("gps_input: message data complete\n"));
-  
+
   /* Header and data have been received. The header checksum has been */
   /* checked */
 
index d6e4b184c05022663f2e6f2b7de859a1373823a8..a821cc536f5fcfc629f2a4fbddb8a1e5897819df 100644 (file)
@@ -1,12 +1,12 @@
 /*
  * /src/NTP/REPOSITORY/ntp4-dev/libparse/clk_rawdcf.c,v 4.18 2006/06/22 18:40:01 kardel RELEASE_20060622_A
- *  
+ *
  * clk_rawdcf.c,v 4.18 2006/06/22 18:40:01 kardel RELEASE_20060622_A
  *
  * Raw DCF77 pulse clock support
  *
  * Copyright (c) 1995-2006 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -127,13 +127,13 @@ static struct dcfparam
 {
        const unsigned char *onebits;
        const unsigned char *zerobits;
-} dcfparameter = 
+} dcfparameter =
 {
        (const unsigned char *)"###############RADMLS1248124P124812P1248121241248112481248P??", /* 'ONE' representation */
        (const unsigned char *)"--------------------s-------p------p----------------------p__"  /* 'ZERO' representation */
 };
 
-static struct rawdcfcode 
+static struct rawdcfcode
 {
        char offset;                    /* start bit */
 } rawdcfcode[] =
@@ -189,7 +189,7 @@ ext_bf(
        int i, first;
 
        first = rawdcfcode[idx].offset;
-  
+
        for (i = rawdcfcode[idx+1].offset - 1; i >= first; i--)
        {
                sum <<= 1;
@@ -238,7 +238,7 @@ convert_rawdcf(
 #endif
                return CVT_NONE;
        }
-  
+
        for (i = 0; i < size; i++)
        {
                if ((*s != *b) && (*s != *c))
@@ -504,7 +504,7 @@ cvt_rawdcf(
                        }
               }
         }
-        
+
        return rtc;
 }
 
@@ -546,9 +546,9 @@ snt_rawdcf(
 #else
                parseio->parse_dtime.parse_time.fp.l_ui++;
 #endif
-               
+
                parseprintf(DD_RAWDCF,("parse: snt_rawdcf: time stamp synthesized offset %d seconds\n", parseio->parse_index - 1));
-               
+
                return updatetimeinfo(parseio, parseio->parse_lstate);
        }
        return CVT_NONE;
@@ -567,9 +567,9 @@ inp_rawdcf(
          )
 {
        static struct timeval timeout = { 1, 500000 }; /* 1.5 secongs denote second #60 */
-       
+
        parseprintf(DD_PARSE, ("inp_rawdcf(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
-       
+
        parseio->parse_dtime.parse_stime = *tstamp; /* collect timestamp */
 
        if (parse_timedout(parseio, tstamp, &timeout))
@@ -583,7 +583,7 @@ inp_rawdcf(
        else
        {
                unsigned int rtc;
-               
+
                rtc = parse_addchar(parseio, ch);
                if (rtc == PARSE_INP_SKIP)
                {
index 045f0fcf5a8f6671db7bfe75e0fe41ef858b8945..85320f0bed560f45dbf3c079d81700858c7c4516 100644 (file)
@@ -1,13 +1,13 @@
 /*
  * /src/NTP/ntp4-dev/libparse/clk_schmid.c,v 4.9 2005/04/16 17:32:10 kardel RELEASE_20050508_A
- *  
+ *
  * clk_schmid.c,v 4.9 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * Schmid clock support
  * based on information and testing from Adam W. Feigin et. al (Swisstime iis.ethz.ch)
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -61,7 +61,7 @@ extern int printf (const char *, ...);
  * The command to Schmid's DCF77 clock is a single byte; each bit
  * allows the user to select some part of the time string, as follows (the
  * output for the lsb is sent first).
- * 
+ *
  * Bit 0:      time in MEZ, 4 bytes *binary, not BCD*; hh.mm.ss.tenths
  * Bit 1:      date 3 bytes *binary, not BCD: dd.mm.yy
  * Bit 2:      week day, 1 byte (unused here)
@@ -155,7 +155,7 @@ cvt_schmid(
                                default:
                                    return CVT_FAIL|CVT_BADFMT;
                            }
-         
+
                            if (!(buffer[7] & WS_TIME))
                            {
                                    clock_time->flags |= PARSEB_POWERUP;
@@ -185,7 +185,7 @@ cvt_schmid(
                            }
 
                            clock_time->flags |= PARSEB_S_LEAP|PARSEB_S_ANTENNA;
-         
+
                            return CVT_OK;
                    }
        }
@@ -204,9 +204,9 @@ inp_schmid(
          )
 {
        unsigned int rtc;
-       
+
        parseprintf(DD_PARSE, ("inp_schmid(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
-       
+
        switch (ch)
        {
        case 0xFD:              /*  */
index 322d0fa08e8945e94235ba8a127bf121ade30abb..ad3c286ed2f859a096b24f19a4bbc8fc869f8936 100644 (file)
@@ -6,7 +6,7 @@
  * Trimble SV6 clock support - several collected codepieces
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -153,19 +153,19 @@ inp_trimtaip(
          )
 {
        unsigned int rtc;
-       
+
        parseprintf(DD_PARSE, ("inp_trimtaip(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
-       
+
        switch (ch)
        {
        case '>':
                parseprintf(DD_PARSE, ("inp_trimptaip: START seen\n"));
-               
+
                parseio->parse_index = 1;
                parseio->parse_data[0] = ch;
                parseio->parse_dtime.parse_stime = *tstamp; /* collect timestamp */
                return PARSE_INP_SKIP;
-         
+
        case '<':
                parseprintf(DD_PARSE, ("inp_trimtaip: END seen\n"));
                if ((rtc = parse_addchar(parseio, ch)) == PARSE_INP_SKIP)
index 743e39c3bc747071722e9ba520ce9f932d5e75e1..7f0ec2801b885835771edd782bdf5f3f4e685ec8 100644 (file)
@@ -7,7 +7,7 @@
  * Thanks to Sven Dietrich for providing test hardware
  *
  * Copyright (c) 1995-2009 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -200,7 +200,7 @@ inp_tsip(
 
   return PARSE_INP_SKIP;
 }
-     
+
 static int
 getshort(
         unsigned char *p
@@ -245,7 +245,7 @@ cvt_trimtsip(
        {
                unsigned char *bp;
                cmd = buffer[1];
-      
+
                    switch(cmd)
                    {
                    case CMD_RCURTIME:
@@ -258,7 +258,7 @@ cvt_trimtsip(
                                    bp = &mb(0);
                                    if (fetch_ieee754(&bp, IEEE_SINGLE, &secs, trim_offsets) != IEEE_OK)
                                            return CVT_FAIL|CVT_BADFMT;
-                                   
+
                                    if ((secs.l_i <= 0) ||
                                        (t->t_utcknown == 0))
                                    {
@@ -275,7 +275,7 @@ cvt_trimtsip(
                                    bp = &mb(6);
                                    if (fetch_ieee754(&bp, IEEE_SINGLE, &utcoffset, trim_offsets) != IEEE_OK)
                                            return CVT_FAIL|CVT_BADFMT;
-                                   
+
                                    L_SUB(&secs, &utcoffset); /* adjust GPS time to UTC time */
 
                                    gpstolfp((unsigned short)week, (unsigned short)0,
@@ -289,10 +289,10 @@ cvt_trimtsip(
 
                                    if (t->t_leap == ADDSECOND)
                                        clock_time->flags |= PARSEB_LEAPADD;
-                     
+
                                    if (t->t_leap == DELSECOND)
                                        clock_time->flags |= PARSEB_LEAPDEL;
-       
+
                                    switch (t->t_operable)
                                      {
                                      case STATUS_SYNC:
@@ -307,12 +307,12 @@ cvt_trimtsip(
                                        clock_time->flags |= PARSEB_NOSYNC|PARSEB_POWERUP;
                                        break;
                                      }
-                                       
+
                                    if (t->t_mode == 0)
                                            clock_time->flags |= PARSEB_POSITION;
-                                   
+
                                    clock_time->flags |= PARSEB_S_LEAP|PARSEB_S_POSITION;
-                                   
+
                                    return CVT_OK;
 
                            } /* case 0x41 */
@@ -346,7 +346,7 @@ cvt_trimtsip(
                            {
                                    l_fp t0t;
                                    unsigned char *lbp;
-                                   
+
                                    /* UTC correction data - derive a leap warning */
                                    int tls   = t->t_gpsutc     = getshort((unsigned char *)&mb(12)); /* current leap correction (GPS-UTC) */
                                    int tlsf  = t->t_gpsutcleap = getshort((unsigned char *)&mb(24)); /* new leap correction */
@@ -359,13 +359,13 @@ cvt_trimtsip(
                                    t->t_week = getshort((unsigned char *)&mb(18)); /* current week no */
                                    if (t->t_week < 990)
                                      t->t_week += 1024;
-                                   
+
                                    lbp = (unsigned char *)&mb(14); /* last update time */
                                    if (fetch_ieee754(&lbp, IEEE_SINGLE, &t0t, trim_offsets) != IEEE_OK)
                                            return CVT_FAIL|CVT_BADFMT;
 
                                    t->t_utcknown = t0t.l_ui != 0;
-                                     
+
                                    if ((t->t_utcknown) && /* got UTC information */
                                        (tlsf != tls)   && /* something will change */
                                        ((t->t_weekleap - t->t_week) < 5)) /* and close in the future */
index 295ce0af7589e8135ecb92d017616aafb74f3190..e7098a5d5d801575efbb7837bd4b3f53ea7b45fb 100644 (file)
@@ -9,14 +9,14 @@
  * clk_varitext.c,v 1.5 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * Varitext code variant by A.McConnell 1997/01/19
- * 
+ *
  * Supports Varitext's Radio Clock
- * 
+ *
  * Used the Meinberg/Computime clock as a template for Varitext Radio Clock
  *
  * Codebase:
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -67,31 +67,31 @@ static const u_char VT_LAST_TELEGRAM_OK = 0x20;
 
 /*
  * The Varitext receiver sends a datagram in the following format every minute
- * 
- * Timestamp   T:YY:MM:MD:WD:HH:MM:SSCRLFSTXXX 
+ *
+ * Timestamp   T:YY:MM:MD:WD:HH:MM:SSCRLFSTXXX
  * Pos          0123456789012345678901 2 3 4567
  *              0000000000111111111122 2 2 2222
- * Parse        T:  :  :  :  :  :  :  \r\n    
- * 
- * T   Startcharacter "T" specifies start of the timestamp 
- * YY  Year MM Month 1-12 
- * MD  Day of the month 
- * WD  Day of week 
- * HH  Hour 
- * MM   Minute 
- * SS   Second
- * CR   Carriage return 
- * LF   Linefeed
+ * Parse        T:  :  :  :  :  :  :  \r\n
+ *
+ * T   Startcharacter "T" specifies start of the timestamp
+ * YY  Year MM Month 1-12
+ * MD  Day of the month
+ * WD  Day of week
+ * HH  Hour
+ * MM  Minute
+ * SS  Second
+ * CR  Carriage return
+ * LF  Linefeed
  * ST  Status character
  *     Bit 0 - Set= Initialised; Reset=Time Invalid (DO NOT USE)
- *     Bit 1 - Set= Synchronised; Reset= Unsynchronised 
- *     Bit 2 - Set= Alarm state; Reset= No alarm
- *     Bit 3 - Set= BST; Reset= GMT
- *     Bit 4 - Set= Seasonal change in approx hour; Reset= No seasonal change expected
+ *     Bit 1 - Set= Synchronised; Reset= Unsynchronised
+ *     Bit 2 - Set= Alarm state; Reset= No alarm
+ *     Bit 3 - Set= BST; Reset= GMT
+ *     Bit 4 - Set= Seasonal change in approx hour; Reset= No seasonal change expected
  *     Bit 5 - Set= Last MSF telegram was OK; Reset= Last telegram was in error;
- *     Bit 6 - Always set
+ *     Bit 6 - Always set
  *     Bit 7 - Unused
- * XXX Checksum calculated using Fletcher's method (ignored for now). 
+ * XXX Checksum calculated using Fletcher's method (ignored for now).
  */
 
 static struct format varitext_fmt =
@@ -129,7 +129,7 @@ clockformat_t   clock_varitext =
 
 /*
  * cvt_varitext
- * 
+ *
  * convert simple type format
  */
 static          u_long
@@ -142,7 +142,7 @@ cvt_varitext(
             )
 {
 
-  if (!Strok(buffer, format->fixed_string)) { 
+  if (!Strok(buffer, format->fixed_string)) {
     return CVT_NONE;
   } else {
     if (Stoi(&buffer[format->field_offsets[O_DAY].offset], &clock_time->day,
@@ -156,7 +156,7 @@ cvt_varitext(
        Stoi(&buffer[format->field_offsets[O_MIN].offset], &clock_time->minute,
             format->field_offsets[O_MIN].length) ||
        Stoi(&buffer[format->field_offsets[O_SEC].offset], &clock_time->second,
-            format->field_offsets[O_SEC].length)) { 
+            format->field_offsets[O_SEC].length)) {
       return CVT_FAIL | CVT_BADFMT;
     } else {
       u_char *f = (u_char*) &buffer[format->field_offsets[O_FLAGS].offset];
@@ -170,21 +170,21 @@ cvt_varitext(
          clock_time->flags |= PARSEB_DST;
        }
       /*
-        if (!((*f) & VT_INITIALISED))  Clock not initialised 
+        if (!((*f) & VT_INITIALISED))  Clock not initialised
         clock_time->flags |= PARSEB_POWERUP;
-        
-        if (!((*f) & VT_SYNCHRONISED))   Clock not synchronised 
+
+        if (!((*f) & VT_SYNCHRONISED))   Clock not synchronised
         clock_time->flags |= PARSEB_NOSYNC;
-        
-        if (((*f) & VT_SEASON_CHANGE))  Seasonal change expected in the next hour 
+
+        if (((*f) & VT_SEASON_CHANGE))  Seasonal change expected in the next hour
         clock_time->flags |= PARSEB_ANNOUNCE;
         */
-      return CVT_OK; 
+      return CVT_OK;
     }
   }
 }
 
-static u_long 
+static u_long
 inp_varitext(
             parse_t     *parseio,
             unsigned int ch,
@@ -196,10 +196,10 @@ inp_varitext(
 
   parseprintf(DD_PARSE, ("inp_varitext(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
 
-  if (!t) 
+  if (!t)
     return PARSE_INP_SKIP;     /* local data not allocated - sigh! */
 
-  if (ch == 'T') 
+  if (ch == 'T')
     t->tstamp = *tstamp;
 
   if ((t->previous_ch == 'T') && (ch == ':'))
@@ -224,7 +224,7 @@ inp_varitext(
          return rtc;
        }
 
-      if (t->end_found) 
+      if (t->end_found)
        {
          if (++(t->end_count) == 4) /* Finally found the end of the message */
            {
@@ -235,16 +235,16 @@ inp_varitext(
                return parse_end(parseio);
              else
                return rtc;
-           }   
+           }
        }
 
-      if ((t->previous_ch == '\r') && (ch == '\n')) 
+      if ((t->previous_ch == '\r') && (ch == '\n'))
        {
          t->end_found = 1;
        }
 
     }
+
   t->previous_ch = ch;
 
   return PARSE_INP_SKIP;
index 55ab43a9b5746b4384dea707e86ee2b5e50a5f2a..17d63bbc0954d856841ad0b5b4e17fe7d126c778 100644 (file)
@@ -166,7 +166,7 @@ clockformat_t   clock_wharton_400a =
        0,                      /* conversion configuration */
        "WHARTON 400A Series clock Output Format 1",    /* String format name */
        15,                     /* string buffer */
-       0                       /* no private data (complete pakets) */
+       0                       /* no private data (complete packets) */
 };
 
 #else /* not (REFCLOCK && CLOCK_PARSE && CLOCK_WHARTON_400A) */
index 2f5f50e2596b3586619b87d053283e1db6f6f321..472a593bb0c541aead4296f45365b9871a696f08 100644 (file)
@@ -43,6 +43,7 @@
 #include "ntp_types.h"
 #include "ntp_stdlib.h"
 #include "ntp_fp.h"
+#include "ntp_calendar.h"
 #include "mbg_gps166.h"
 #include "binio.h"
 #include "ieee754io.h"
@@ -63,10 +64,10 @@ put_mbg_header(
        GPS_MSG_HDR *headerp
        )
 {
-  put_lsb_short(bufpp, headerp->gps_cmd);
-  put_lsb_short(bufpp, headerp->gps_len);
-  put_lsb_short(bufpp, headerp->gps_data_csum);
-  put_lsb_short(bufpp, headerp->gps_hdr_csum);
+  put_lsb_short(bufpp, headerp->cmd);
+  put_lsb_short(bufpp, headerp->len);
+  put_lsb_short(bufpp, headerp->data_csum);
+  put_lsb_short(bufpp, headerp->hdr_csum);
 }
 
 void
@@ -133,18 +134,18 @@ get_mbg_tgps(
 void
 get_mbg_tm(
        unsigned char **buffpp,
-       TM *tmp
+       TM_GPS *tmp
        )
 {
   tmp->year = get_lsb_short(buffpp);
   tmp->month = *(*buffpp)++;
-  tmp->mday  = *(*buffpp)++;
-  tmp->yday  = get_lsb_short(buffpp);
-  tmp->wday  = *(*buffpp)++;
-  tmp->hour  = *(*buffpp)++;
-  tmp->minute = *(*buffpp)++;
-  tmp->second = *(*buffpp)++;
-  tmp->frac  = get_lsb_long(buffpp);
+  tmp->mday = *(*buffpp)++;
+  tmp->yday = get_lsb_short(buffpp);
+  tmp->wday = *(*buffpp)++;
+  tmp->hour = *(*buffpp)++;
+  tmp->min = *(*buffpp)++;
+  tmp->sec = *(*buffpp)++;
+  tmp->frac = get_lsb_long(buffpp);
   tmp->offs_from_utc = get_lsb_long(buffpp);
   tmp->status= get_lsb_short(buffpp);
 }
@@ -216,8 +217,8 @@ mbg_time_status_str(
 {
        static struct state
        {
-               int         flag;               /* bit flag */
-               const char *string;     /* bit name */
+               int         flag;       /* bit flag */
+               const char *string;     /* bit name */
        } states[] =
                  {
                          { TM_UTC,    "UTC CORR" },
@@ -233,7 +234,7 @@ mbg_time_status_str(
        {
                char *start, *p;
                struct state *s;
-       
+
                start = p = *buffpp;
 
                for (s = states; s->flag; s++)
@@ -252,25 +253,27 @@ mbg_time_status_str(
                *buffpp = p;
        }
 }
-      
+
 void
 mbg_tm_str(
        char **buffpp,
-       TM *tmp,
-       int size
+       TM_GPS *tmp,
+       int size,
+       int print_status
        )
 {
        char *s = *buffpp;
 
        snprintf(*buffpp, size, "%04d-%02d-%02d %02d:%02d:%02d.%07ld (%c%02d%02d) ",
                 tmp->year, tmp->month, tmp->mday,
-                tmp->hour, tmp->minute, tmp->second, tmp->frac,
+                tmp->hour, tmp->min, tmp->sec, (long) tmp->frac,
                 (tmp->offs_from_utc < 0) ? '-' : '+',
                 abs((int)tmp->offs_from_utc) / 3600,
                 (abs((int)tmp->offs_from_utc) / 60) % 60);
        *buffpp += strlen(*buffpp);
 
-       mbg_time_status_str(buffpp, tmp->status, size - (*buffpp - s));
+       if (print_status)
+               mbg_time_status_str(buffpp, tmp->status, size - (*buffpp - s));
 }
 
 void
@@ -281,8 +284,8 @@ mbg_tgps_str(
        )
 {
        snprintf(*buffpp, size, "week %d + %ld days + %ld.%07ld sec",
-                tgpsp->wn, tgpsp->sec / 86400,
-                tgpsp->sec % 86400, tgpsp->tick);
+                tgpsp->wn, (long) tgpsp->sec / SECSPERDAY,
+                (long) tgpsp->sec % SECSPERDAY, (long) tgpsp->tick);
        *buffpp += strlen(*buffpp);
 }
 
@@ -293,19 +296,19 @@ get_mbg_cfgh(
        )
 {
   int i;
-  
+
   cfghp->csum = get_lsb_short(buffpp);
   cfghp->valid = get_lsb_short(buffpp);
   get_mbg_tgps(buffpp, &cfghp->tot_51);
   get_mbg_tgps(buffpp, &cfghp->tot_63);
   get_mbg_tgps(buffpp, &cfghp->t0a);
 
-  for (i = 0; i < N_SVNO; i++)
+  for (i = 0; i < N_SVNO_GPS; i++)
     {
       get_mbg_cfg(buffpp, &cfghp->cfg[i]);
     }
 
-  for (i = 0; i < N_SVNO; i++)
+  for (i = 0; i < N_SVNO_GPS; i++)
     {
       get_mbg_health(buffpp, &cfghp->health[i]);
     }
@@ -321,12 +324,12 @@ get_mbg_utc(
   utcp->valid = get_lsb_short(buffpp);
 
   get_mbg_tgps(buffpp, &utcp->t0t);
-  
+
   if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A0, mbg_double) != IEEE_OK)
     {
       L_CLR(&utcp->A0);
     }
-  
+
   if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A1, mbg_double) != IEEE_OK)
     {
       L_CLR(&utcp->A1);
@@ -345,7 +348,7 @@ get_mbg_lla(
        )
 {
   int i;
-  
+
   for (i = LAT; i <= ALT; i++)
     {
       if  (fetch_ieee754(buffpp, IEEE_DOUBLE, &lla[i], mbg_double) != IEEE_OK)
@@ -367,7 +370,7 @@ get_mbg_xyz(
        )
 {
   int i;
-  
+
   for (i = XP; i <= ZP; i++)
     {
       if  (fetch_ieee754(buffpp, IEEE_DOUBLE, &xyz[i], mbg_double) != IEEE_OK)
@@ -384,7 +387,7 @@ get_mbg_comparam(
        )
 {
   size_t i;
-  
+
   comparamp->baud_rate = get_lsb_long(buffpp);
   for (i = 0; i < sizeof(comparamp->framing); i++)
     {
@@ -400,12 +403,12 @@ get_mbg_portparam(
        )
 {
   int i;
-  
-  for (i = 0; i < N_COM; i++)
+
+  for (i = 0; i < DEFAULT_N_COM; i++)
     {
       get_mbg_comparam(buffpp, &portparamp->com[i]);
     }
-  for (i = 0; i < N_COM; i++)
+  for (i = 0; i < DEFAULT_N_COM; i++)
     {
       portparamp->mode[i] = *(*buffpp)++;
     }
@@ -416,7 +419,7 @@ get_mbg_portparam(
        {                                                                       \
          L_CLR(addr);                                                          \
        }
-       
+
 void
 get_mbg_eph(
        unsigned char ** buffpp,
@@ -425,7 +428,7 @@ get_mbg_eph(
 {
   ephp->csum   = get_lsb_short(buffpp);
   ephp->valid  = get_lsb_short(buffpp);
-  
+
   ephp->health = get_lsb_short(buffpp);
   ephp->IODC   = get_lsb_short(buffpp);
   ephp->IODE2  = get_lsb_short(buffpp);
@@ -470,7 +473,7 @@ get_mbg_alm(
 {
   almp->csum   = get_lsb_short(buffpp);
   almp->valid  = get_lsb_short(buffpp);
-  
+
   almp->health = get_lsb_short(buffpp);
   get_mbg_tgps(buffpp, &almp->t0a);
 
index 5354dd3223aa2c37f99cad6764ebe606b468434a..f26c8cf4d7b72c967fb035fcee800e5cfb728581 100644 (file)
  */
 #include <config.h>
 #include "ntp_fp.h"
-
-#define GPSORIGIN      2524953600UL    /* NTP origin - GPS origin in seconds */
-#define SECSPERWEEK    (unsigned)(604800)      /* seconds per week - GPS tells us about weeks */
-#define GPSWRAP                990     /* assume week count less than this in the previous epoch */
+#include "ntp_calendar.h"
+#include "parse.h"
 
 void
 gpstolfp(
@@ -49,10 +47,10 @@ gpstolfp(
 {
   if (weeks < GPSWRAP)
     {
-      weeks += 1024;
+      weeks += GPSWEEKS;
     }
 
-  lfp->l_ui = weeks * SECSPERWEEK + days * 86400 + seconds + GPSORIGIN; /* convert to NTP time */
+  lfp->l_ui = weeks * SECSPERWEEK + days * SECSPERDAY + seconds + GPSORIGIN; /* convert to NTP time */
   lfp->l_uf = 0;
 }
 
index 85e5299cb195d01a5dad1254bebc55b3f6510987..4b8bc20d9bfce3fb8ead516a3902b7e9613a7d96 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * /src/NTP/ntp4-dev/libparse/parse.c,v 4.20 2005/08/06 17:39:40 kardel RELEASE_20050806_A
- *  
+ *
  * parse.c,v 4.20 2005/08/06 17:39:40 kardel RELEASE_20050806_A
  *
  * Parser module for reference clock
@@ -12,7 +12,7 @@
  * when PARSEKERNEL is not defined NTP time stamps will be used.
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -106,7 +106,7 @@ Strcmp(
 
        while (!(c = *s++ - *t++) && *s && *t)
            /* empty loop */;
-  
+
        return c;
 }
 
@@ -154,10 +154,10 @@ parse_ioinit(
        )
 {
        parseprintf(DD_PARSE, ("parse_iostart\n"));
-  
+
        parseio->parse_plen = 0;
        parseio->parse_pdata = (void *)0;
-  
+
        parseio->parse_data = 0;
        parseio->parse_ldata = 0;
        parseio->parse_dsize = 0;
@@ -166,7 +166,7 @@ parse_ioinit(
        parseio->parse_ioflags   = PARSE_IO_CS7;        /* usual unix default */
        parseio->parse_index     = 0;
        parseio->parse_ldsize    = 0;
-  
+
        return 1;
 }
 
@@ -192,11 +192,11 @@ parse_restart(
              )
 {
        unsigned int updated = PARSE_INP_SKIP;
-       
+
        /*
         * re-start packet - timeout - overflow - start symbol
         */
-       
+
        if (parseio->parse_index)
        {
                /*
@@ -208,13 +208,13 @@ parse_restart(
                parseio->parse_ldsize = parseio->parse_index;
                updated = PARSE_INP_TIME;
        }
-               
+
        parseio->parse_index = 1;
        parseio->parse_data[0] = ch;
        parseprintf(DD_PARSE, ("parse: parse_restart: buffer start (updated = %x)\n", updated));
        return updated;
 }
-       
+
 unsigned int
 parse_addchar(
              parse_t *parseio,
@@ -239,7 +239,7 @@ parse_addchar(
                 */
                return parse_restart(parseio, ch);
 }
-       
+
 unsigned int
 parse_end(
          parse_t *parseio
@@ -282,7 +282,7 @@ parse_ioread(
            case PARSE_IO_CS7:
                ch &= 0x7F;
                break;
-      
+
            case PARSE_IO_CS8:
                ch &= 0xFF;
                break;
@@ -306,18 +306,18 @@ parse_ioread(
                {
                        updated = CVT_OK;
                }
-               
+
                if (input_status & PARSE_INP_TIME)      /* time sample is available */
                {
                        updated = timepacket(parseio);
                }
-                 
+
                if (input_status & PARSE_INP_DATA) /* got additional data */
                {
                        updated |= CVT_ADDITIONAL;
                }
        }
-       
+
 
        /*
         * remember last character time
@@ -403,13 +403,13 @@ parse_to_unixtime(
        )
 {
 #define SETRTC(_X_)    { if (cvtrtc) *cvtrtc = (_X_); }
-       static int days_of_month[] = 
+       static int days_of_month[] =
        {
                0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
        };
        register int i;
        time_t t;
-  
+
        if (clock_time->utctime)
            return clock_time->utctime; /* if the conversion routine gets it right away - why not */
 
@@ -423,12 +423,12 @@ parse_to_unixtime(
                SETRTC(CVT_FAIL|CVT_BADDATE);
                return -1;
        }
-  
+
        /*
         * sorry, slow section here - but it's not time critical anyway
         */
        t = julian0(clock_time->year) - julian0(1970);          /* Y2kFixes */
-                               /* month */
+                               /* month */
        if (clock_time->month <= 0 || clock_time->month > 12)
        {
                SETRTC(CVT_FAIL|CVT_BADDATE);
@@ -466,7 +466,7 @@ parse_to_unixtime(
 
        t = TIMES24(t) + clock_time->hour;
 
-                               /* min */
+                               /* min */
        if (clock_time->minute < 0 || clock_time->minute > 59)
        {
                SETRTC(CVT_FAIL|CVT_BADTIME);
@@ -475,7 +475,7 @@ parse_to_unixtime(
 
        t = TIMES60(t) + clock_time->minute;
                                /* sec */
-  
+
        if (clock_time->second < 0 || clock_time->second > 60)  /* allow for LEAPs */
        {
                SETRTC(CVT_FAIL|CVT_BADTIME);
@@ -510,7 +510,7 @@ Stoi(
 
        while(*s == ' ')
            s++;
-  
+
        if (*s == '-')
        {
                s++;
@@ -519,7 +519,7 @@ Stoi(
        else
            if (*s == '+')
                s++;
-  
+
        for(;;)
        {
                c = *s++;
@@ -573,16 +573,16 @@ updatetimeinfo(
        {
                int s = splhigh();
 #endif
-  
+
                parseio->parse_lstate          = parseio->parse_dtime.parse_state | flags | PARSEB_TIMECODE;
-    
+
                parseio->parse_dtime.parse_state = parseio->parse_lstate;
 
 #ifdef PARSEKERNEL
                (void)splx((unsigned int)s);
        }
 #endif
-  
+
 
 #ifdef PARSEKERNEL
        parseprintf(DD_PARSE, ("updatetimeinfo status=0x%x, time=%x\n", parseio->parse_dtime.parse_state,
@@ -591,7 +591,7 @@ updatetimeinfo(
        parseprintf(DD_PARSE, ("updatetimeinfo status=0x%lx, time=%x\n", (long)parseio->parse_dtime.parse_state,
                               parseio->parse_dtime.parse_time.fp.l_ui));
 #endif
-       
+
        return CVT_OK;          /* everything fine and dandy... */
 }
 
@@ -628,7 +628,7 @@ pps_simple(
 {
        parseio->parse_dtime.parse_ptime  = *ptime;
        parseio->parse_dtime.parse_state |= PARSEB_PPS|PARSEB_S_PPS;
-  
+
        return CVT_NONE;
 }
 
@@ -647,7 +647,7 @@ pps_one(
 {
        if (status)
                return pps_simple(parseio, status, ptime);
-       
+
        return CVT_NONE;
 }
 
@@ -666,7 +666,7 @@ pps_zero(
 {
        if (!status)
                return pps_simple(parseio, status, ptime);
-       
+
        return CVT_NONE;
 }
 
@@ -684,13 +684,13 @@ timepacket(
        register time_t t;
        u_long cvtrtc;          /* current conversion result */
        clocktime_t clock_time;
-  
+
        memset((char *)&clock_time, 0, sizeof clock_time);
        format = parseio->parse_lformat;
 
        if (format == (unsigned short)~0)
                return CVT_NONE;
-       
+
        switch ((cvtrtc = clockformats[format]->convert ?
                 clockformats[format]->convert((unsigned char *)parseio->parse_ldata, parseio->parse_ldsize, (struct format *)(clockformats[format]->data), &clock_time, parseio->parse_pdata) :
                 CVT_NONE) & CVT_MASK)
@@ -698,17 +698,17 @@ timepacket(
        case CVT_FAIL:
                parseio->parse_badformat++;
                break;
-               
+
        case CVT_NONE:
                /*
                 * too bad - pretend bad format
                 */
                parseio->parse_badformat++;
                break;
-               
+
        case CVT_OK:
                break;
-               
+
        case CVT_SKIP:
                return CVT_NONE;
 
@@ -716,7 +716,7 @@ timepacket(
                /* shouldn't happen */
 #ifndef PARSEKERNEL
                msyslog(LOG_WARNING, "parse: INTERNAL error: bad return code of convert routine \"%s\"", clockformats[format]->name);
-#endif   
+#endif
                return CVT_FAIL|cvtrtc;
        }
 
@@ -724,7 +724,7 @@ timepacket(
        {
                return CVT_FAIL|cvtrtc;
        }
-  
+
        /*
         * time stamp
         */
@@ -758,7 +758,7 @@ parse_timecode(
         */
        dct->parsegettc.parse_badformat = parse->parse_badformat;
        parse->parse_badformat = 0;
-                 
+
        if (parse->parse_ldsize <= PARSE_TCMAX)
        {
                dct->parsegettc.parse_count = parse->parse_ldsize;
@@ -771,7 +771,7 @@ parse_timecode(
        }
 }
 
-                 
+
 /*ARGSUSED*/
 int
 parse_setfmt(
@@ -792,7 +792,7 @@ parse_setfmt(
                                        if (parse->parse_pdata)
                                                FREE(parse->parse_pdata, parse->parse_plen);
                                        parse->parse_pdata = 0;
-                                       
+
                                        parse->parse_plen = clockformats[i]->plen;
 
                                        if (parse->parse_plen)
@@ -809,9 +809,9 @@ parse_setfmt(
                                        if (parse->parse_data)
                                                FREE(parse->parse_data, (unsigned)(parse->parse_dsize * 2 + 2));
                                        parse->parse_ldata = parse->parse_data = 0;
-                                       
+
                                        parse->parse_dsize = clockformats[i]->length;
-                                       
+
                                        if (parse->parse_dsize)
                                        {
                                                parse->parse_data = (char*)MALLOC((unsigned)(parse->parse_dsize * 2 + 2));
@@ -820,20 +820,20 @@ parse_setfmt(
                                                        if (parse->parse_pdata)
                                                                FREE(parse->parse_pdata, parse->parse_plen);
                                                        parse->parse_pdata = 0;
-                                                       
+
                                                        parseprintf(DD_PARSE, ("init failed: malloc for data area failed\n"));
                                                        return 0;
                                                }
                                        }
-                                       
+
 
                                        /*
                                         * leave room for '\0'
                                         */
                                        parse->parse_ldata     = parse->parse_data + parse->parse_dsize + 1;
-                                       
+
                                        parse->parse_lformat  = i;
-                                       
+
                                        return 1;
                                }
                        }
index b7234dd419b767a1bdfa87369d73374576ae5116..37871c9de88721e4f6850753b1ce2c1e0e5a52f4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * /src/NTP/ntp4-dev/libparse/parse_conf.c,v 4.9 2005/04/16 17:32:10 kardel RELEASE_20050508_A
- *  
+ *
  * parse_conf.c,v 4.9 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * Parser configuration module for reference clocks
@@ -12,7 +12,7 @@
  * when STREAM is not defined NTP time stamps will be used.
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index d3756af882a3ebdfdd69d4cb6297c4b6b1db0485..8c91257b44829c5931a0e0946857a3a24c6399a7 100644 (file)
@@ -1,12 +1,12 @@
 /*
  * /src/NTP/ntp4-dev/libparse/parsesolaris.c,v 4.11 2005/04/16 17:32:10 kardel RELEASE_20050508_A
- *  
+ *
  * parsesolaris.c,v 4.11 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * STREAMS module for reference clocks
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -74,7 +74,7 @@ static struct fmodsw fmod_templ =
 
 extern struct mod_ops mod_strmodops;
 
-static struct modlstrmod modlstrmod = 
+static struct modlstrmod modlstrmod =
 {
        &mod_strmodops,         /* a STREAMS module */
        "PARSE      - NTP reference",   /* name this baby - keep room for revision number */
@@ -100,13 +100,13 @@ _init(
      )
 {
        static char revision[] = "4.6";
-       char *s, *S; 
+       char *s, *S;
        char *t;
-  
+
 #ifndef lint
        t = rcsid;
 #endif
-       
+
        /*
         * copy RCS revision into Drv_name
         *
@@ -125,20 +125,20 @@ _init(
                }
                if (*s == ' ') s++;
        }
-         
-       t = modlstrmod.strmod_linkinfo; 
+
+       t = modlstrmod.strmod_linkinfo;
        while (*t && (*t != ' '))
        {
                t++;
        }
        if (*t == ' ') t++;
-         
+
        S = s;
        while (*S && (((*S >= '0') && (*S <= '9')) || (*S == '.')))
        {
                S++;
        }
-         
+
        if (*s && *t && (S > s))
        {
                if (strlen(t) >= (S - s))
@@ -308,7 +308,7 @@ setup_stream(
        }
        else
        {
-               pprintf(DD_OPEN, "parse: setup_stream - FAILED - no MEMORY for allocb\n"); 
+               pprintf(DD_OPEN, "parse: setup_stream - FAILED - no MEMORY for allocb\n");
                return 0;
        }
 }
@@ -325,18 +325,18 @@ parseopen(
 {
        register parsestream_t *parse;
        static int notice = 0;
-  
-       pprintf(DD_OPEN, "parse: OPEN - q=%x\n", q); 
-  
+
+       pprintf(DD_OPEN, "parse: OPEN - q=%x\n", q);
+
        if (sflag != MODOPEN)
        {                       /* open only for modules */
-               pprintf(DD_OPEN, "parse: OPEN - FAILED - not MODOPEN\n"); 
+               pprintf(DD_OPEN, "parse: OPEN - FAILED - not MODOPEN\n");
                return EIO;
        }
 
        if (q->q_ptr != (caddr_t)NULL)
        {
-               pprintf(DD_OPEN, "parse: OPEN - FAILED - EXCLUSIVE ONLY\n"); 
+               pprintf(DD_OPEN, "parse: OPEN - FAILED - EXCLUSIVE ONLY\n");
                return EBUSY;
        }
 
@@ -346,10 +346,10 @@ parseopen(
                return ENOMEM;
        }
 
-       pprintf(DD_OPEN, "parse: OPEN - parse area q=%x, q->q_ptr=%x\n", q, q->q_ptr); 
+       pprintf(DD_OPEN, "parse: OPEN - parse area q=%x, q->q_ptr=%x\n", q, q->q_ptr);
        WR(q)->q_ptr = q->q_ptr;
-       pprintf(DD_OPEN, "parse: OPEN - WQ parse area q=%x, q->q_ptr=%x\n", WR(q), WR(q)->q_ptr); 
-  
+       pprintf(DD_OPEN, "parse: OPEN - WQ parse area q=%x, q->q_ptr=%x\n", WR(q), WR(q)->q_ptr);
+
        parse = (parsestream_t *) q->q_ptr;
        bzero((caddr_t)parse, sizeof(*parse));
        parse->parse_queue     = q;
@@ -360,7 +360,7 @@ parseopen(
 
        qprocson(q);
 
-       pprintf(DD_OPEN, "parse: OPEN - initializing io subsystem q=%x\n", q); 
+       pprintf(DD_OPEN, "parse: OPEN - initializing io subsystem q=%x\n", q);
 
        if (!parse_ioinit(&parse->parse_io))
        {
@@ -374,12 +374,12 @@ parseopen(
                return EIO;
        }
 
-       pprintf(DD_OPEN, "parse: OPEN - initializing stream q=%x\n", q); 
+       pprintf(DD_OPEN, "parse: OPEN - initializing stream q=%x\n", q);
 
        if (setup_stream(q, M_PARSE))
        {
                (void) init_linemon(q); /* hook up PPS ISR routines if possible */
-               pprintf(DD_OPEN, "parse: OPEN - SUCCEEDED\n"); 
+               pprintf(DD_OPEN, "parse: OPEN - SUCCEEDED\n");
 
                /*
                 * I know that you know the delete key, but you didn't write this
@@ -412,19 +412,19 @@ parseclose(
 {
        register parsestream_t *parse = (parsestream_t *)q->q_ptr;
        register unsigned long s;
-  
+
        pprintf(DD_CLOSE, "parse: CLOSE\n");
-  
+
        qprocsoff(q);
 
        s = splhigh();
-  
+
        if (parse->parse_dqueue)
            close_linemon(parse->parse_dqueue, q);
        parse->parse_dqueue = (queue_t *)0;
 
        (void) splx(s);
-      
+
        parse_ioend(&parse->parse_io);
 
        kmem_free((caddr_t)parse, sizeof(parsestream_t));
@@ -444,7 +444,7 @@ parsersvc(
          )
 {
        mblk_t *mp;
-  
+
        while ((mp = getq(q)))
        {
                if (canputnext(q) || (mp->b_datap->db_type > QPCTL))
@@ -477,15 +477,15 @@ parsewput(
        register mblk_t *datap;
        register struct iocblk *iocp;
        parsestream_t         *parse = (parsestream_t *)q->q_ptr;
-  
+
        pprintf(DD_WPUT, "parse: parsewput\n");
-  
+
        switch (mp->b_datap->db_type)
        {
            default:
                putnext(q, mp);
                break;
-      
+
            case M_IOCTL:
                iocp = (void *)mp->b_rptr;
                switch (iocp->ioc_cmd)
@@ -519,7 +519,7 @@ parsewput(
                        iocp->ioc_count = sizeof(struct ppsclockev);
                        qreply(q, mp);
                        break;
-         
+
                    case PARSEIOC_ENABLE:
                    case PARSEIOC_DISABLE:
                            {
@@ -537,7 +537,7 @@ parsewput(
                                    }
                                    qreply(q, mp);
                                    break;
-                           }       
+                           }
 
                    case PARSEIOC_TIMECODE:
                    case PARSEIOC_SETFMT:
@@ -553,7 +553,7 @@ parsewput(
                                        pprintf(DD_WPUT, "parse: parsewput - PARSEIOC_TIMECODE\n");
                                        ok = parse_timecode(dct, &parse->parse_io);
                                        break;
-                 
+
                                    case PARSEIOC_SETFMT:
                                        pprintf(DD_WPUT, "parse: parsewput - PARSEIOC_SETFMT\n");
                                        ok = parse_setfmt(dct, &parse->parse_io);
@@ -600,7 +600,7 @@ rdchar(
                else
                {
                        register mblk_t *mmp = *mp;
-         
+
                        *mp = (*mp)->b_cont;
                        freeb(mmp);
                }
@@ -619,7 +619,7 @@ parserput(
 {
        register unsigned char type;
        mblk_t *mp = imp;
-  
+
        switch (type = mp->b_datap->db_type)
        {
            default:
@@ -636,7 +636,7 @@ parserput(
                else
                    putq(q, mp);
                break;
-      
+
            case M_BREAK:
            case M_DATA:
                    {
@@ -691,7 +691,7 @@ parserput(
                                                                if (nmp) freemsg(nmp);
                                                            parse_iodone(&parse->parse_io);
                                                    }
-                                           }   
+                                           }
                                    }
                                    else
                                    {
@@ -733,7 +733,7 @@ parserput(
                            gethrestime(&hres_time);
                            c_time.tv.tv_sec  = hres_time.tv_sec;
                            c_time.tv.tv_usec = hres_time.tv_nsec / 1000;
-       
+
                            pprintf(DD_RPUT, "parse: parserput - M_%sHANGUP\n", (type == M_HANGUP) ? "" : "UN");
 
                            if ((parse->parse_status & PARSE_ENABLE) &&
@@ -758,7 +758,7 @@ parserput(
                                }
                                else
                                    putq(q, mp);
-       
+
                            if (status)
                            {
                                    parse->parse_ppsclockev.tv = c_time.tv;
@@ -780,7 +780,7 @@ init_linemon(
             )
 {
        register queue_t *dq;
-  
+
        dq = WR(q);
        /*
         * we ARE doing very bad things down here (basically stealing ISR
@@ -916,14 +916,14 @@ init_zs_linemon(
                        szs->zsops.zsop_xsint = (void (*) (struct zscom *))zs_xsisr; /* place our bastard */
                        szs->oldzsops         = zs->zs_ops;
                        emergencyzs           = zs->zs_ops;
-         
+
                        zs->zs_ops = &szs->zsops; /* hook it up */
                        /*
-                        * XXX: this is usually done via zsopinit() 
+                        * XXX: this is usually done via zsopinit()
                         * - have yet to find a way to call that routine
                         */
                        zs->zs_xsint          = (void (*) (struct zscom *))zs_xsisr;
-         
+
                        mutex_exit(zs->zs_excl);
 
                        pprintf(DD_INSTALL, "init_zs_linemon: CD monitor installed\n");
@@ -934,7 +934,7 @@ init_zs_linemon(
 }
 
 /*
- * unregister our ISR routine - must call under splhigh() (or 
+ * unregister our ISR routine - must call under splhigh() (or
  * whatever block ZS status interrupts)
  */
 static void
@@ -970,7 +970,7 @@ close_zs_linemon(
                mutex_exit(zs->zs_excl);
 
                kmem_free((caddr_t)szs, sizeof (struct savedzsops));
-      
+
                pprintf(DD_INSTALL, "close_zs_linemon: CD monitor deleted\n");
                return;
        }
@@ -1005,7 +1005,7 @@ zs_xsisr(
        {
                timestamp_t cdevent;
                register int status;
-      
+
                /*
                 * time stamp
                 */
@@ -1024,7 +1024,7 @@ zs_xsisr(
                 * ok - now the hard part - find ourself
                 */
                loopcheck = MAXDEPTH;
-      
+
                while (q)
                {
                        if (q->q_qinfo && q->q_qinfo->qi_minfo)
@@ -1052,7 +1052,7 @@ zs_xsisr(
                                                 */
                                                parse_iodone(&((parsestream_t *)q->q_ptr)->parse_io);
                                        }
-                 
+
                                        if (status)
                                        {
                                                ((parsestream_t *)q->q_ptr)->parse_ppsclockev.tv = cdevent.tv;
@@ -1091,9 +1091,9 @@ zs_xsisr(
                        SCC_WRITE0(ZSWR0_RESET_STATUS); /* might kill other conditions here */
                        return;
                }
-       }      
+       }
 
-       pprintf(DD_ISR, "zs_xsisr: non CD event 0x%x for \"%s\"\n", 
+       pprintf(DD_ISR, "zs_xsisr: non CD event 0x%x for \"%s\"\n",
                (za->za_rr0 ^ zsstatus) & ~ZSRR0_CD,dname);
        /*
         * we are now gathered here to process some unusual external status
@@ -1108,7 +1108,7 @@ zs_xsisr(
        q = za->za_ttycommon.t_readq;
 
        loopcheck = MAXDEPTH;
-      
+
        /*
         * the real thing for everything else ...
         */
@@ -1120,7 +1120,7 @@ zs_xsisr(
                        if (!strcmp(dname, parseinfo.st_rdinit->qi_minfo->mi_idname))
                        {
                                register void (*zsisr) (struct zscom *);
-                 
+
                                /*
                                 * back home - phew (hopping along stream queues might
                                 * prove dangerous to your health)
@@ -1129,7 +1129,7 @@ zs_xsisr(
                                    zsisr(zs);
                                else
                                    panic("zs_xsisr: unable to locate original ISR");
-                 
+
                                pprintf(DD_ISR, "zs_xsisr: non CD event was processed for \"%s\"\n", dname);
                                /*
                                 * now back to our program ...
@@ -1151,7 +1151,7 @@ zs_xsisr(
         * corrupted TTY structures
         */
        printf("zs_zsisr: looking for \"%s\" - found \"%s\" - taking EMERGENCY path\n", parseinfo.st_rdinit->qi_minfo->mi_idname, dname ? dname : "-NIL-");
-      
+
        if (emergencyzs && emergencyzs->zsop_xsint)
            emergencyzs->zsop_xsint(zs);
        else
index 3fb4cc3511aa9edb35c4de77be5c1c3103b6bd54..6cd9d8ff904ef8c33b9739308e1af9097ce4676a 100644 (file)
@@ -1,13 +1,13 @@
 /*
  * /src/NTP/ntp4-dev/libparse/parsestreams.c,v 4.11 2005/04/16 17:32:10 kardel RELEASE_20050508_A
- *  
+ *
  * parsestreams.c,v 4.11 2005/04/16 17:32:10 kardel RELEASE_20050508_A
  *
  * STREAMS module for reference clocks
  * (SunOS4.x)
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -110,7 +110,7 @@ static char mnam[] = "PARSEPPS     ";       /* name this baby - keep room for revision
 #else
 static char mnam[] = "PARSE        ";  /* name this baby - keep room for revision number */
 #endif
-struct vdldrv parsesync_vd = 
+struct vdldrv parsesync_vd =
 {
        VDMAGIC_PSEUDO,         /* nothing like a real driver - a STREAMS module */
        mnam,
@@ -166,7 +166,7 @@ Strcmp(
 
        while (!(c = *s++ - *t++) && *s && *t)
            /* empty loop */;
-  
+
        return c;
 }
 
@@ -186,10 +186,10 @@ Strncmp(
 
        while (n-- && !(c = *s++ - *t++) && *s && *t)
            /* empty loop */;
-  
+
        return c;
 }
+
 void
 ntp_memset(
        char *a,
@@ -217,12 +217,12 @@ xxxinit(
 {
        extern struct fmodsw fmodsw[];
        extern int fmodcnt;
-  
+
        struct fmodsw *fm    = fmodsw;
        struct fmodsw *fmend = &fmodsw[fmodcnt];
        struct fmodsw *ifm   = (struct fmodsw *)0;
        char *mname          = parseinfo.st_rdinit->qi_minfo->mi_idname;
-  
+
        switch (fc)
        {
            case VDLOAD:
@@ -233,13 +233,13 @@ xxxinit(
                 */
                while (fm <= fmend)
                {
-         if (!Strncmp(fm->f_name, mname, FMNAMESZ))
+                       if (!Strncmp(fm->f_name, mname, FMNAMESZ))
                        {
                                printf("vddrinit[%s]: STREAMS module already loaded.\n", mname);
                                return(EBUSY);
                        }
                        else
-                           if ((ifm == (struct fmodsw *)0) && 
+                           if ((ifm == (struct fmodsw *)0) &&
                                (fm->f_name[0] == '\0') &&
                                (fm->f_str == (struct streamtab *)0))
                            {
@@ -261,7 +261,7 @@ xxxinit(
                {
                        static char revision[] = "4.7";
                        char *s, *S, *t;
-         
+
                        s = rcsid;              /* NOOP - keep compilers happy */
 
                        Strncpy(ifm->f_name, mname, FMNAMESZ);
@@ -285,20 +285,20 @@ xxxinit(
                                }
                                if (*s == ' ') s++;
                        }
-         
-                       t = parsesync_vd.Drv_name; 
+
+                       t = parsesync_vd.Drv_name;
                        while (*t && (*t != ' '))
                        {
                                t++;
                        }
                        if (*t == ' ') t++;
-         
+
                        S = s;
                        while (*S && (((*S >= '0') && (*S <= '9')) || (*S == '.')))
                        {
                                S++;
                        }
-         
+
                        if (*s && *t && (S > s))
                        {
                                if (Strlen(t) >= (S - s))
@@ -307,9 +307,9 @@ xxxinit(
                                }
                        }
                        return (0);
-               } 
+               }
                break;
-      
+
            case VDUNLOAD:
                if (parsebusy > 0)
                {
@@ -328,7 +328,7 @@ xxxinit(
                                        fm->f_name[0] = '\0';
                                        fm->f_str = (struct streamtab *)0;
                                        fm++;
-                 
+
                                        break;
                                }
                                fm++;
@@ -341,14 +341,14 @@ xxxinit(
                        else
                            return (0);
                }
-      
+
 
            case VDSTAT:
                return (0);
 
            default:
                return (EIO);
-      
+
        }
        return EIO;
 }
@@ -460,7 +460,7 @@ setup_stream(
        }
        else
        {
-               parseprintf(DD_OPEN,("parse: setup_stream - FAILED - no MEMORY for allocb\n")); 
+               parseprintf(DD_OPEN,("parse: setup_stream - FAILED - no MEMORY for allocb\n"));
                return 0;
        }
 }
@@ -476,37 +476,37 @@ parseopen(
 {
        register parsestream_t *parse;
        static int notice = 0;
-  
-       parseprintf(DD_OPEN,("parse: OPEN\n")); 
-  
+
+       parseprintf(DD_OPEN,("parse: OPEN\n"));
+
        if (sflag != MODOPEN)
        {                       /* open only for modules */
-               parseprintf(DD_OPEN,("parse: OPEN - FAILED - not MODOPEN\n")); 
+               parseprintf(DD_OPEN,("parse: OPEN - FAILED - not MODOPEN\n"));
                return OPENFAIL;
        }
 
        if (q->q_ptr != (caddr_t)NULL)
        {
                u.u_error = EBUSY;
-               parseprintf(DD_OPEN,("parse: OPEN - FAILED - EXCLUSIVE ONLY\n")); 
+               parseprintf(DD_OPEN,("parse: OPEN - FAILED - EXCLUSIVE ONLY\n"));
                return OPENFAIL;
        }
 
 #ifdef VDDRV
        parsebusy++;
 #endif
-  
+
        q->q_ptr = (caddr_t)kmem_alloc(sizeof(parsestream_t));
        if (q->q_ptr == (caddr_t)0)
        {
-               parseprintf(DD_OPEN,("parse: OPEN - FAILED - no memory\n")); 
+               parseprintf(DD_OPEN,("parse: OPEN - FAILED - no memory\n"));
 #ifdef VDDRV
                parsebusy--;
 #endif
                return OPENFAIL;
        }
        WR(q)->q_ptr = q->q_ptr;
-  
+
        parse = (parsestream_t *)(void *)q->q_ptr;
        bzero((caddr_t)parse, sizeof(*parse));
        parse->parse_queue     = q;
@@ -531,7 +531,7 @@ parseopen(
        {
                (void) init_linemon(q); /* hook up PPS ISR routines if possible */
 
-               parseprintf(DD_OPEN,("parse: OPEN - SUCCEEDED\n")); 
+               parseprintf(DD_OPEN,("parse: OPEN - SUCCEEDED\n"));
 
                /*
                 * I know that you know the delete key, but you didn't write this
@@ -569,17 +569,17 @@ parseclose(
 {
        register parsestream_t *parse = (parsestream_t *)(void *)q->q_ptr;
        register unsigned long s;
-  
+
        parseprintf(DD_CLOSE,("parse: CLOSE\n"));
-  
+
        s = splhigh();
-  
+
        if (parse->parse_dqueue)
            close_linemon(parse->parse_dqueue, q);
        parse->parse_dqueue = (queue_t *)0;
 
        (void) splx(s);
-      
+
        parse_ioend(&parse->parse_io);
 
        kmem_free((caddr_t)parse, sizeof(parsestream_t));
@@ -602,7 +602,7 @@ parsersvc(
        )
 {
        mblk_t *mp;
-  
+
        while ((mp = getq(q)))
        {
                if (canput(q->q_next) || (mp->b_datap->db_type > QPCTL))
@@ -635,15 +635,15 @@ parsewput(
        register mblk_t *datap;
        register struct iocblk *iocp;
        parsestream_t         *parse = (parsestream_t *)(void *)q->q_ptr;
-  
+
        parseprintf(DD_WPUT,("parse: parsewput\n"));
-  
+
        switch (mp->b_datap->db_type)
        {
            default:
                putnext(q, mp);
                break;
-      
+
            case M_IOCTL:
                    iocp = (struct iocblk *)(void *)mp->b_rptr;
                switch (iocp->ioc_cmd)
@@ -676,7 +676,7 @@ parsewput(
                        iocp->ioc_count = sizeof(struct ppsclockev);
                        qreply(q, mp);
                        break;
-         
+
                    case PARSEIOC_ENABLE:
                    case PARSEIOC_DISABLE:
                            {
@@ -694,7 +694,7 @@ parsewput(
                                    }
                                    qreply(q, mp);
                                    break;
-                           }       
+                           }
 
                    case PARSEIOC_TIMECODE:
                    case PARSEIOC_SETFMT:
@@ -710,7 +710,7 @@ parsewput(
                                        parseprintf(DD_WPUT,("parse: parsewput - PARSEIOC_TIMECODE\n"));
                                        ok = parse_timecode(dct, &parse->parse_io);
                                        break;
-                 
+
                                    case PARSEIOC_SETFMT:
                                        parseprintf(DD_WPUT,("parse: parsewput - PARSEIOC_SETFMT\n"));
                                        ok = parse_setfmt(dct, &parse->parse_io);
@@ -757,7 +757,7 @@ rdchar(
                else
                {
                        register mblk_t *mmp = *mp;
-         
+
                        *mp = (*mp)->b_cont;
                        freeb(mmp);
                }
@@ -775,7 +775,7 @@ parserput(
        )
 {
        unsigned char type;
-  
+
        switch (type = mp->b_datap->db_type)
        {
            default:
@@ -791,7 +791,7 @@ parserput(
                else
                    putq(q, mp);
                break;
-      
+
            case M_BREAK:
            case M_DATA:
                    {
@@ -844,7 +844,7 @@ parserput(
                                                                if (nmp) freemsg(nmp);
                                                            parse_iodone(&parse->parse_io);
                                                    }
-                                           }   
+                                           }
                                    }
                                    else
                                    {
@@ -883,7 +883,7 @@ parserput(
                            register int status = cd_invert ^ (type == M_UNHANGUP);
 
                            uniqtime(&ctime.tv);
-       
+
                            parseprintf(DD_RPUT,("parse: parserput - M_%sHANGUP\n", (type == M_HANGUP) ? "" : "UN"));
 
                            if ((parse->parse_status & PARSE_ENABLE) &&
@@ -908,7 +908,7 @@ parserput(
                                }
                                else
                                    putq(q, mp);
-       
+
                            if (status)
                            {
                                    parse->parse_ppsclockev.tv = ctime.tv;
@@ -930,7 +930,7 @@ init_linemon(
        )
 {
        register queue_t *dq;
-  
+
        dq = WR(q);
        /*
         * we ARE doing very bad things down here (basically stealing ISR
@@ -1038,7 +1038,7 @@ init_zs_linemon(
        else
        {
                unsigned long s;
-      
+
                /*
                 * we do a direct replacement, in case others fiddle also
                 * if somebody else grabs our hook and we disconnect
@@ -1064,9 +1064,9 @@ init_zs_linemon(
                        szs->zsops.zsop_xsint = zs_xsisr; /* place our bastard */
                        szs->oldzsops         = zs->zs_ops;
                        emergencyzs           = zs->zs_ops;
-         
+
                        zsopinit(zs, &szs->zsops); /* hook it up */
-         
+
                        (void) splx(s);
 
                        parseprintf(DD_INSTALL, ("init_zs_linemon: CD monitor installed\n"));
@@ -1099,11 +1099,11 @@ close_zs_linemon(
        else
        {
                register struct savedzsops *szs = (struct savedzsops *)parsestream->parse_data;
-      
+
                zsopinit(zs, szs->oldzsops); /* reset to previous handler functions */
 
                kmem_free((caddr_t)szs, sizeof (struct savedzsops));
-      
+
                parseprintf(DD_INSTALL, ("close_zs_linemon: CD monitor deleted\n"));
                return;
        }
@@ -1148,7 +1148,7 @@ zs_xsisr(
        {
                timestamp_t cdevent;
                register int status;
-      
+
                za->za_rr0 = (za->za_rr0 & ~(cdmask)) | (zsstatus & (cdmask));
 
 #ifdef PPS_SYNC
@@ -1163,7 +1163,7 @@ zs_xsisr(
                 * time stamp
                 */
                uniqtime(&cdevent.tv);
-      
+
 #ifdef PPS_SYNC
                (void)splx(s);
 #endif
@@ -1190,7 +1190,7 @@ zs_xsisr(
                 * ok - now the hard part - find ourself
                 */
                loopcheck = MAXDEPTH;
-      
+
                while (q)
                {
                        if (q->q_qinfo && q->q_qinfo->qi_minfo)
@@ -1218,7 +1218,7 @@ zs_xsisr(
                                                 */
                                                parse_iodone(&((parsestream_t *)(void *)q->q_ptr)->parse_io);
                                        }
-                 
+
                                        if (status)
                                        {
                                                ((parsestream_t *)(void *)q->q_ptr)->parse_ppsclockev.tv = cdevent.tv;
@@ -1251,13 +1251,13 @@ zs_xsisr(
                        zsaddr->zscc_control = ZSWR0_RESET_STATUS; /* might kill other conditions here */
                        return 0;
                }
-       }      
+       }
 
        if (zsstatus & cdmask)  /* fake CARRIER status */
                za->za_flags |= ZAS_CARR_ON;
        else
                za->za_flags &= ~ZAS_CARR_ON;
-       
+
        /*
         * we are now gathered here to process some unusual external status
         * interrupts.
@@ -1271,7 +1271,7 @@ zs_xsisr(
        q = za->za_ttycommon.t_readq;
 
        loopcheck = MAXDEPTH;
-      
+
        /*
         * the real thing for everything else ...
         */
@@ -1283,7 +1283,7 @@ zs_xsisr(
                        if (!Strcmp(dname, parseinfo.st_rdinit->qi_minfo->mi_idname))
                        {
                                register int (*zsisr) (struct zscom *);
-                 
+
                                /*
                                 * back home - phew (hopping along stream queues might
                                 * prove dangerous to your health)
@@ -1292,7 +1292,7 @@ zs_xsisr(
                                        return zsisr(zs);
                                else
                                    panic("zs_xsisr: unable to locate original ISR");
-                 
+
                                parseprintf(DD_ISR, ("zs_xsisr: non CD event was processed for \"%s\"\n", dname));
                                /*
                                 * now back to our program ...
@@ -1314,7 +1314,7 @@ zs_xsisr(
         * corrupted TTY structures
         */
        printf("zs_zsisr: looking for \"%s\" - found \"%s\" - taking EMERGENCY path\n", parseinfo.st_rdinit->qi_minfo->mi_idname, dname ? dname : "-NIL-");
-      
+
        if (emergencyzs && emergencyzs->zsop_xsint)
            emergencyzs->zsop_xsint(zs);
        else
index 619e23861aef3074d7309664c98438736d86c2e5..4178209e5c013b08916d4fa8726eff06d6a60c50 100644 (file)
@@ -6,7 +6,7 @@
  * $Created: Sun Aug  2 20:20:34 1998 $
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index c7c4a436c41576826b8633f05a437aa90948678e..01827907f13d54a3c9b5362632d51de306894eca 100644 (file)
 
 /*
  * This driver currently provides the support for
- *   - Meinberg receiver DCF77 PZF 535 (TCXO version)       (DCF)
- *   - Meinberg receiver DCF77 PZF 535 (OCXO version)       (DCF)
- *   - Meinberg receiver DCF77 PZF 509                      (DCF)
+ *   - Meinberg receiver DCF77 PZF535 (TCXO version)        (DCF)
+ *   - Meinberg receiver DCF77 PZF535 (OCXO version)        (DCF)
+ *   - Meinberg receiver DCF77 PZF509                       (DCF)
  *   - Meinberg receiver DCF77 AM receivers (e.g. C51)      (DCF)
  *   - IGEL CLOCK                                           (DCF)
  *   - ELV DCF7000                                          (DCF)
  *   - Schmid clock                                         (DCF)
  *   - Conrad DCF77 receiver module                         (DCF)
  *   - FAU DCF77 NTP receiver (TimeBrick)                   (DCF)
- *   - WHARTON 400A Series clock                           (DCF)
+ *   - WHARTON 400A Series clock                            (DCF)
  *
- *   - Meinberg GPS166/GPS167                               (GPS)
+ *   - Meinberg GPS receivers                               (GPS)
  *   - Trimble (TSIP and TAIP protocol)                     (GPS)
  *
  *   - RCC8000 MSF Receiver                                 (MSF)
- *   - VARITEXT clock                                      (MSF)
+ *   - VARITEXT clock                                       (MSF)
  */
 
 /*
  * Meinberg receivers are usually connected via a
- * 9600 baud serial line
+ * 9600/7E1 or 19200/8N1 serial line.
  *
  * The Meinberg GPS receivers also have a special NTP time stamp
  * format. The firmware release is Uni-Erlangen.
  *
  * Meinberg generic receiver setup:
- *     output time code every second
- *     Baud rate 9600 7E2S
+ *      output time code every second
+ *      Baud rate 9600 7E2S
  *
- * Meinberg GPS16x setup:
+ * Meinberg GPS receiver setup:
  *      output time code every second
  *      Baudrate 19200 8N1
  *
@@ -91,7 +91,9 @@
  * in Meinberg receivers.
  *
  * Special software versions are only sensible for the
- * GPS 16x family of receivers.
+ * oldest GPS receiver, GPS16x. For newer receiver types
+ * the output string format can be configured at the device,
+ * and the device name is generally GPSxxx instead of GPS16x.
  *
  * Meinberg can be reached via: http://www.meinberg.de/
  */
 /*
  * document type of PPS interfacing - copy of ifdef mechanism in local_input()
  */
-#undef PPS_METHOD 
+#undef PPS_METHOD
 
 #ifdef HAVE_PPSAPI
 #define PPS_METHOD "PPS API"
 #endif /* TIOCDCDTIMESTAMP */
 #endif /* HAVE_PPSAPI */
 
+/*
+ * COND_DEF can be conditionally defined as DEF or 0. If defined as DEF
+ * then some more parse-specific variables are flagged to be printed with
+ * "ntpq -c cv <assid>". This can be lengthy, so by default COND_DEF
+ * should be defined as 0.
+ */
+#if 0
+# define COND_DEF   DEF   // enable this for testing
+#else
+# define COND_DEF   0     // enable this by default
+#endif
+
 #include "ntp_io.h"
 #include "ntp_stdlib.h"
 
@@ -382,7 +396,7 @@ struct parseunit
         * PARSE io
         */
        bind_t       *binding;          /* io handling binding */
-       
+
        /*
         * parse state
         */
@@ -466,7 +480,7 @@ typedef struct poll_info
 #define NOCLOCK_FORMAT         ""
 #define NOCLOCK_TYPE           CTL_SST_TS_UNSPEC
 #define NOCLOCK_SAMPLES                0
-#define NOCLOCK_KEEP           0 
+#define NOCLOCK_KEEP           0
 
 #define DCF_TYPE               CTL_SST_TS_LF
 #define GPS_TYPE               CTL_SST_TS_UHF
@@ -536,14 +550,14 @@ typedef struct poll_info
 #define DCFPZF535OCXO_FORMAT       "Meinberg Standard"
 
 /*
- * Meinberg GPS16X receiver
+ * Meinberg GPS receivers
  */
 static void    gps16x_message   (struct parseunit *, parsetime_t *);
 static  int     gps16x_poll_init (struct parseunit *);
 
 #define        GPS16X_ROOTDELAY        0.0         /* nothing here */
 #define        GPS16X_BASEDELAY        0.001968         /* XXX to be fixed ! 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define        GPS16X_DESCRIPTION      "Meinberg GPS16x receiver"
+#define        GPS16X_DESCRIPTION      "Meinberg GPS receiver"
 #define GPS16X_MAXUNSYNC        60*60*96       /* only trust clock for 4 days
                                                * @ 5e-9df/f we have accumulated
                                                * at most an error of 1.73 ms
@@ -745,9 +759,9 @@ static      void    trimbletsip_event       (struct parseunit *, int);
 #define TRIMBLETAIP_INIT           trimbletaip_init
 #define TRIMBLETSIP_INIT           trimbletsip_init
 
-#define TRIMBLETAIP_EVENT          trimbletaip_event   
+#define TRIMBLETAIP_EVENT          trimbletaip_event
 
-#define TRIMBLETSIP_EVENT          trimbletsip_event   
+#define TRIMBLETSIP_EVENT          trimbletsip_event
 #define TRIMBLETSIP_MESSAGE        trimbletsip_message
 
 #define TRIMBLETAIP_END                    0
@@ -804,7 +818,7 @@ static poll_info_t rcc8000_pollinfo = { RCC_POLLRATE, RCC_POLLCMD, RCC_CMDSIZE }
 #define RCC8000_KEEP           3
 
 /*
- * Hopf Radio clock 6021 Format 
+ * Hopf Radio clock 6021 Format
  *
  */
 #define HOPF6021_ROOTDELAY     0.0
@@ -1200,7 +1214,7 @@ static struct parse_clockinfo
        },
        {                             /* mode 12 */
                HOPF6021_FLAGS,
-               NO_POLL,     
+               NO_POLL,
                NO_INIT,
                NO_EVENT,
                NO_END,
@@ -1576,7 +1590,7 @@ list_err(
 
        if (do_it)
            err->err_cnt++;
-  
+
        if (err->err_stage->err_count &&
            (err->err_cnt >= err->err_stage->err_count))
        {
@@ -1600,7 +1614,7 @@ list_err(
                        l_mktime(current_time - err->err_started));
                err->err_suppressed = 0;
        }
-  
+
        return do_it;
 }
 
@@ -1715,7 +1729,7 @@ static int  stream_setfmt   (struct parseunit *, parsectl_t *);
 static int  stream_timecode (struct parseunit *, parsectl_t *);
 static void stream_receive  (struct recvbuf *);
 #endif
-                                        
+
 static int  local_init     (struct parseunit *);
 static void local_end      (struct parseunit *);
 static int  local_nop      (struct parseunit *);
@@ -1796,7 +1810,7 @@ ppsclock_init(
 {
         static char m1[] = "ppsclocd";
        static char m2[] = "ppsclock";
-       
+
        /*
         * now push the parse streams module
         * it will ensure exclusive access to the device
@@ -1885,7 +1899,7 @@ stream_setcs(
        )
 {
        struct strioctl strioc;
-  
+
        strioc.ic_cmd     = PARSEIOC_SETCS;
        strioc.ic_timout  = 0;
        strioc.ic_dp      = (char *)tcl;
@@ -1908,7 +1922,7 @@ stream_enable(
        )
 {
        struct strioctl strioc;
-  
+
        strioc.ic_cmd     = PARSEIOC_ENABLE;
        strioc.ic_timout  = 0;
        strioc.ic_dp      = (char *)0;
@@ -1932,7 +1946,7 @@ stream_disable(
        )
 {
        struct strioctl strioc;
-  
+
        strioc.ic_cmd     = PARSEIOC_DISABLE;
        strioc.ic_timout  = 0;
        strioc.ic_dp      = (char *)0;
@@ -1957,7 +1971,7 @@ stream_getfmt(
        )
 {
        struct strioctl strioc;
-  
+
        strioc.ic_cmd     = PARSEIOC_GETFMT;
        strioc.ic_timout  = 0;
        strioc.ic_dp      = (char *)tcl;
@@ -1980,7 +1994,7 @@ stream_setfmt(
        )
 {
        struct strioctl strioc;
-  
+
        strioc.ic_cmd     = PARSEIOC_SETFMT;
        strioc.ic_timout  = 0;
        strioc.ic_dp      = (char *)tcl;
@@ -2005,12 +2019,12 @@ stream_timecode(
        )
 {
        struct strioctl strioc;
-  
+
        strioc.ic_cmd     = PARSEIOC_TIMECODE;
        strioc.ic_timout  = 0;
        strioc.ic_dp      = (char *)tcl;
        strioc.ic_len     = sizeof (*tcl);
-       
+
        if (ioctl(parse->generic->io.fd, I_STR, (caddr_t)&strioc) == -1)
        {
                ERR(ERR_INTERNAL)
@@ -2045,7 +2059,7 @@ stream_receive(
                return;
        }
        clear_err(parse, ERR_BADIO);
-  
+
        memmove((caddr_t)&parsetime,
                (caddr_t)rbufp->recv_buffer,
                sizeof(parsetime_t));
@@ -2211,7 +2225,7 @@ local_input(
                                {
                                        struct timespec pps_timeout;
                                        pps_info_t      pps_info;
-                               
+
                                        pps_timeout.tv_sec  = 0;
                                        pps_timeout.tv_nsec = 0;
 
@@ -2287,11 +2301,11 @@ local_input(
 #else
 #ifdef TIOCDCDTIMESTAMP
                                struct timeval dcd_time;
-                               
+
                                if (ioctl(parse->ppsfd, TIOCDCDTIMESTAMP, &dcd_time) != -1)
                                {
                                        l_fp tstmp;
-                                       
+
                                        TVTOTS(&dcd_time, &tstmp);
                                        tstmp.l_ui += JAN_1970;
                                        L_SUB(&ts.fp, &tstmp);
@@ -2413,7 +2427,7 @@ local_receive(
                return;
        }
        clear_err(parse, ERR_BADIO);
-  
+
        memmove((caddr_t)&parsetime,
                (caddr_t)rbufp->recv_buffer,
                sizeof(parsetime_t));
@@ -2566,7 +2580,7 @@ parsestate(
                                {
                                        t = ap(buffer, size, t, "; ");
                                }
-       
+
                                t = ap(buffer, size, t, "%s",
                                    sflagstrings[i].name);
                        }
@@ -2808,7 +2822,7 @@ parse_shutdown(
        {
                parse->parse_type->cl_end(parse);
        }
-       
+
        /*
         * cleanup before leaving this world
         */
@@ -2821,7 +2835,7 @@ parse_shutdown(
        io_closeclock(&parse->generic->io);
 
        free_varlist(parse->kv);
-  
+
        NLOG(NLOG_CLOCKINFO) /* conditional if clause for conditional syslog */
                msyslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" removed",
                        CLK_UNIT(parse->peer), parse->parse_type->cl_description);
@@ -2847,14 +2861,14 @@ parse_hardpps(
        if (CLK_PPS(parse->peer) && (parse->flags & PARSE_PPSKERNEL)) {
                int     i = 0;
 
-               if (mode == PARSE_HARDPPS_ENABLE) 
+               if (mode == PARSE_HARDPPS_ENABLE)
                        {
                                if (parse->flags & PARSE_CLEAR)
                                        i = PPS_CAPTURECLEAR;
                                else
                                        i = PPS_CAPTUREASSERT;
                        }
-               
+
                if (time_pps_kcbind(parse->atom.handle, PPS_KC_HARDPPS, i,
                    PPS_TSFMT_TSPEC) < 0) {
                        msyslog(LOG_ERR, "PARSE receiver #%d: time_pps_kcbind failed: %m",
@@ -2884,7 +2898,7 @@ parse_ppsapi(
 {
        int cap, mode_ppsoffset;
        const char *cp;
-       
+
        parse->flags &= ~PARSE_PPSCLOCK;
 
        /*
@@ -2893,7 +2907,7 @@ parse_ppsapi(
        if (time_pps_getcap(parse->atom.handle, &cap) < 0) {
                msyslog(LOG_ERR, "PARSE receiver #%d: parse_ppsapi: time_pps_getcap failed: %m",
                        CLK_UNIT(parse->peer));
-               
+
                return 0;
        }
 
@@ -2927,19 +2941,19 @@ parse_ppsapi(
                  CLK_UNIT(parse->peer), cp, cap);
                mode_ppsoffset = 0;
        } else {
-               if (mode_ppsoffset == PPS_OFFSETCLEAR) 
+               if (mode_ppsoffset == PPS_OFFSETCLEAR)
                        {
                                parse->atom.pps_params.clear_offset.tv_sec = -parse->ppsphaseadjust;
                                parse->atom.pps_params.clear_offset.tv_nsec = -1e9*(parse->ppsphaseadjust - (long)parse->ppsphaseadjust);
                        }
-         
+
                if (mode_ppsoffset == PPS_OFFSETASSERT)
                        {
                                parse->atom.pps_params.assert_offset.tv_sec = -parse->ppsphaseadjust;
                                parse->atom.pps_params.assert_offset.tv_nsec = -1e9*(parse->ppsphaseadjust - (long)parse->ppsphaseadjust);
                        }
        }
-       
+
        parse->atom.pps_params.mode |= mode_ppsoffset;
 
        if (time_pps_setparams(parse->atom.handle, &parse->atom.pps_params) < 0) {
@@ -3043,9 +3057,9 @@ parse_start(
        parse->kv             = (struct ctl_var *)0;
 
        clear_err(parse, ERR_ALL);
-  
+
        parse->parse_type     = &parse_clockinfo[type];
-       
+
        parse->maxunsync      = parse->parse_type->cl_maxunsync;
 
        parse->generic->fudgetime1 = parse->parse_type->cl_basedelay;
@@ -3058,16 +3072,16 @@ parse_start(
        peer->rootdelay       = parse->parse_type->cl_rootdelay;
        peer->sstclktype      = parse->parse_type->cl_type;
        peer->precision       = sys_precision;
-       
+
        peer->stratum         = STRATUM_REFCLOCK;
 
        if (peer->stratum <= 1)
            memmove((char *)&parse->generic->refid, parse->parse_type->cl_id, 4);
        else
            parse->generic->refid = htonl(PARSEHSREFID);
-       
+
        parse->generic->io.fd = fd232;
-       
+
        parse->peer = peer;             /* marks it also as busy */
 
        /*
@@ -3114,7 +3128,7 @@ parse_start(
                tio.c_iflag = parse_clockinfo[type].cl_iflag;
                tio.c_oflag = parse_clockinfo[type].cl_oflag;
                tio.c_lflag = parse_clockinfo[type].cl_lflag;
-       
+
 
 #ifdef HAVE_TERMIOS
                if ((cfsetospeed(&tio, parse_clockinfo[type].cl_speed) == -1) ||
@@ -3178,7 +3192,7 @@ parse_start(
                if (CLK_PPS(parse->peer))
                    {
                        int i = 1;
-                   
+
                        if (ioctl(parse->ppsfd, TIOCSPPS, (caddr_t)&i) == 0)
                            {
                                parse->flags |= PARSE_PPSCLOCK;
@@ -3217,7 +3231,7 @@ parse_start(
         */
        parse->generic->io.srcclock = peer;
        parse->generic->io.datalen = 0;
-       
+
        parse->binding = init_iobinding(parse);
 
        if (parse->binding == (bind_t *)0)
@@ -3263,7 +3277,7 @@ parse_start(
                parse_shutdown(CLK_UNIT(parse->peer), peer); /* let our cleaning staff do the work */
                return 0;                       /* well, ok - special initialisation broke */
        }
-  
+
        strlcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format, sizeof(tmp_ctl.parseformat.parse_buffer));
        tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
 
@@ -3273,7 +3287,7 @@ parse_start(
                parse_shutdown(CLK_UNIT(parse->peer), peer); /* let our cleaning staff do the work */
                return 0;                       /* well, ok - special initialisation broke */
        }
-  
+
        /*
         * get rid of all IO accumulated so far
         */
@@ -3300,7 +3314,7 @@ parse_start(
                                        return 0;               /* well, ok - special initialisation broke */
                                }
                }
-       
+
        /*
         * Insert in async io device list.
         */
@@ -3374,7 +3388,7 @@ parse_ctl(
                    }
 #endif
                }
-               
+
                if (in->haveflags & CLK_HAVETIME1)
                 {
                  parse->generic->fudgetime1 = in->fudgetime1;
@@ -3382,11 +3396,11 @@ parse_ctl(
                          CLK_UNIT(parse->peer),
                          parse->generic->fudgetime1);
                }
-               
+
                if (in->haveflags & CLK_HAVETIME2)
                 {
                  parse->generic->fudgetime2 = in->fudgetime2;
-                 if (parse->flags & PARSE_TRUSTTIME) 
+                 if (parse->flags & PARSE_TRUSTTIME)
                    {
                      parse->maxunsync = (u_long)ABS(in->fudgetime2);
                      msyslog(LOG_INFO, "PARSE receiver #%d: new trust time %s",
@@ -3434,7 +3448,7 @@ parse_poll(
         */
        parse->generic->polls++;
 
-       if (parse->pollneeddata && 
+       if (parse->pollneeddata &&
            ((int)(current_time - parse->pollneeddata) > (1<<(max(min(parse->peer->hpoll, parse->peer->ppoll), parse->peer->minpoll)))))
        {
                /*
@@ -3443,7 +3457,7 @@ parse_poll(
                 */
                parse->lastmissed = current_time;
                parse_event(parse, CEVNT_TIMEOUT);
-               
+
                ERR(ERR_NODATA)
                        msyslog(LOG_WARNING, "PARSE receiver #%d: no data from device within poll interval (check receiver / wiring)", CLK_UNIT(parse->peer));
        }
@@ -3501,7 +3515,7 @@ parse_control(
         * handle changes
         */
        parse_ctl(parse, in);
-               
+
        /*
         * supply data
         */
@@ -3587,9 +3601,9 @@ parse_control(
                                    tmpctl.parsegettc.parse_buffer, (unsigned)(tmpctl.parsegettc.parse_count));
 
                }
-       
+
                tmpctl.parseformat.parse_format = tmpctl.parsegettc.parse_format;
-       
+
                if (!PARSE_GETFMT(parse, &tmpctl))
                {
                        ERR(ERR_INTERNAL)
@@ -3603,7 +3617,7 @@ parse_control(
                        tt = ap(start, 80, tt, "refclock_format=\"");
 
                        if (count > 0) {
-                               tt = ap(start, 80, tt, "%*.*s", 
+                               tt = ap(start, 80, tt, "%*.*s",
                                        count,
                                        count,
                                        tmpctl.parseformat.parse_buffer);
@@ -3632,7 +3646,7 @@ parse_control(
                                percent /= 10;
                                d       /= 10;
                        }
-       
+
                        if (d)
                            percent = (percent * 10000) / d;
                        else
@@ -3642,7 +3656,7 @@ parse_control(
                        {
                                char item[80];
                                int count;
-                               
+
                                snprintf(item, 80, "%s%s%s: %s (%d.%02d%%)",
                                        sum ? "; " : "",
                                        (parse->generic->currentstatus == i) ? "*" : "",
@@ -3657,22 +3671,22 @@ parse_control(
                                sum += s_time;
                        }
                }
-               
+
                tt = ap(start, LEN_STATES, tt,
                    "; running time: %s\"", l_mktime(sum));
-               
+
                tt = add_var(&out->kv_list, 32, RO);
                snprintf(tt, 32,  "refclock_id=\"%s\"", parse->parse_type->cl_id);
-               
+
                tt = add_var(&out->kv_list, 80, RO);
                snprintf(tt, 80,  "refclock_iomode=\"%s\"", parse->binding->bd_description);
 
                tt = add_var(&out->kv_list, 128, RO);
                snprintf(tt, 128, "refclock_driver_version=\"%s\"", rcsid);
-               
+
                {
                        struct ctl_var *k;
-                       
+
                        k = parse->kv;
                        while (k && !(k->flags & EOV))
                        {
@@ -3680,7 +3694,7 @@ parse_control(
                                k++;
                        }
                }
-      
+
                out->lencode       = strlen(outstatus);
                out->p_lastcode    = outstatus;
        }
@@ -3730,7 +3744,7 @@ parse_process(
 {
        l_fp off, rectime, reftime;
        double fudge;
-       
+
        /* silence warning: 'off.Ul_i.Xl_i' may be used uninitialized in this function */
        ZERO(off);
 
@@ -3743,11 +3757,11 @@ parse_process(
            (parse->timedata.parse_status != parsetime->parse_status))
        {
                char buffer[400];
-               
+
                NLOG(NLOG_CLOCKINFO) /* conditional if clause for conditional syslog */
                        msyslog(LOG_WARNING, "PARSE receiver #%d: conversion status \"%s\"",
                                CLK_UNIT(parse->peer), parsestatus(parsetime->parse_status, buffer, sizeof(buffer)));
-               
+
                if ((parsetime->parse_status & CVT_MASK) == CVT_FAIL)
                {
                        /*
@@ -3756,7 +3770,7 @@ parse_process(
                         * the time code might be overwritten by the next packet
                         */
                        parsectl_t tmpctl;
-                       
+
                        if (!PARSE_GETTIMECODE(parse, &tmpctl))
                        {
                                ERR(ERR_INTERNAL)
@@ -3794,7 +3808,7 @@ parse_process(
                            parse->timedata.parse_ptime  = parsetime->parse_ptime;
                          }
                        break;          /* well, still waiting - timeout is handled at higher levels */
-                           
+
                case CVT_FAIL:
                        if (parsetime->parse_status & CVT_BADFMT)
                        {
@@ -3825,7 +3839,7 @@ parse_process(
        if (parse->lastformat != parsetime->parse_format)
        {
                parsectl_t tmpctl;
-       
+
                tmpctl.parseformat.parse_format = parsetime->parse_format;
 
                if (!PARSE_GETFMT(parse, &tmpctl))
@@ -3853,10 +3867,10 @@ parse_process(
                /*
                 * something happend - except for PPS events
                 */
-       
+
                (void) parsestate(parsetime->parse_state, tmp1, sizeof(tmp1));
                (void) parsestate(parse->timedata.parse_state, tmp2, sizeof(tmp2));
-       
+
                NLOG(NLOG_CLOCKINFO) /* conditional if clause for conditional syslog */
                        msyslog(LOG_INFO,"PARSE receiver #%d: STATE CHANGE: %s -> %s",
                                CLK_UNIT(parse->peer), tmp2, tmp1);
@@ -3959,12 +3973,12 @@ parse_process(
        }
 
        fudge = parse->generic->fudgetime1; /* standard RS232 Fudgefactor */
-       
+
        if (PARSE_TIMECODE(parsetime->parse_state))
        {
                rectime = parsetime->parse_stime.fp;
                off = reftime = parsetime->parse_time.fp;
-       
+
                L_SUB(&off, &rectime); /* prepare for PPS adjustments logic */
 
 #ifdef DEBUG
@@ -4009,7 +4023,7 @@ parse_process(
                            M_ISGEQ(0, 0x7fffffff, off.l_i, off.l_uf))
                        {
                                fudge = ppsphaseadjust; /* pick PPS fudge factor */
-                       
+
                                /*
                                 * RS232 offsets within [-0.5..0.5[ - take PPS offsets
                                 */
@@ -4021,7 +4035,7 @@ parse_process(
                                                reftime.l_ui++;
                                        reftime.l_uf = 0;
 
-                                       
+
                                        /*
                                         * implied on second offset
                                         */
@@ -4087,7 +4101,7 @@ parse_process(
 
        rectime = reftime;
        L_SUB(&rectime, &off);  /* just to keep the ntp interface happy */
-       
+
 #ifdef DEBUG
        if (debug > 3)
                printf("PARSE receiver #%d: calculated Reftime %s, Recvtime %s\n",
@@ -4112,14 +4126,14 @@ parse_process(
        clear_err(parse, ERR_BADDATA);
        clear_err(parse, ERR_NODATA);
        clear_err(parse, ERR_INTERNAL);
-  
+
        /*
         * and now stick it into the clock machine
         * samples are only valid iff lastsync is not too old and
         * we have seen the clock in sync at least once
         * after the last time we didn't see an expected data telegram
         * at startup being not in sync is also bad just like
-        * POWERUP state unless PARSE_F_POWERUPTRUST is set 
+        * POWERUP state unless PARSE_F_POWERUPTRUST is set
         * see the clock states section above for more reasoning
         */
        if (((current_time - parse->lastsync) > parse->maxunsync)           ||
@@ -4159,7 +4173,7 @@ parse_process(
                 * only good/trusted samples are interesting
                 */
 #ifdef DEBUG
-               if (debug > 2) 
+               if (debug > 2)
                        {
                                printf("PARSE receiver #%d: refclock_process_offset(reftime=%s, rectime=%s, Fudge=%f)\n",
                                       CLK_UNIT(parse->peer),
@@ -4169,7 +4183,7 @@ parse_process(
                        }
 #endif
                parse->generic->lastref = reftime;
-               
+
                refclock_process_offset(parse->generic, reftime, rectime, fudge);
 
 #ifdef HAVE_PPSAPI
@@ -4188,7 +4202,7 @@ parse_process(
        }
 
        /*
-        * ready, unless the machine wants a sample or 
+        * ready, unless the machine wants a sample or
         * we are in fast startup mode (peer->dist > MAXDISTANCE)
         */
        if (!parse->pollneeddata && parse->peer->disp <= MAXDISTANCE)
@@ -4200,56 +4214,71 @@ parse_process(
 
        refclock_receive(parse->peer);
 }
-\f
+
 /**===========================================================================
  ** special code for special clocks
  **/
 
 static void
 mk_utcinfo(
-          char *t,
+          char *t,  // pointer to the output string buffer
           int wnt,
           int wnlsf,
           int dn,
           int dtls,
           int dtlsf,
-          int size
+          int size  // size of the output string buffer
           )
 {
-  l_fp leapdate;
-  char *start = t;
-  
-  snprintf(t, size, "current correction %d sec", dtls);
-  t += strlen(t);
-  
-  if (wnlsf < 990)
-    wnlsf += 1024;
-  
-  if (wnt < 990)
-    wnt += 1024;
-  
-  gpstolfp((unsigned short)wnlsf, (unsigned short)dn, 0, &leapdate);
-  
-  if ((dtlsf != dtls) &&
-      ((wnlsf - wnt) < 52))
-    {
-           snprintf(t, BUFFER_SIZES(start, t, size), ", next correction %d sec on %s, new GPS-UTC offset %d",
-             dtlsf - dtls, gmprettydate(&leapdate), dtlsf);
-    }
-  else
-    {
-           snprintf(t, BUFFER_SIZES(start, t, size), ", last correction on %s",
-             gmprettydate(&leapdate));
-    }
+       /*
+        * The week number transmitted by the GPS satellites for the leap date
+        * is truncated to 8 bits only. If the nearest leap second date is off
+        * the current date by more than +/- 128 weeks then conversion to a
+        * calendar date is ambiguous. On the other hand, if a leap second is
+        * currently being announced (i.e. dtlsf != dtls) then the week number
+        * wnlsf is close enough, and we can unambiguously determine the date
+        * for which the leap second is scheduled.
+        */
+       if ( dtlsf != dtls )
+       {
+               time_t t_ls;
+               struct tm *tm;
+               int n = 0;
+
+               if (wnlsf < GPSWRAP)
+                       wnlsf += GPSWEEKS;
+
+               if (wnt < GPSWRAP)
+                       wnt += GPSWEEKS;
+
+               t_ls = (time_t) wnlsf * SECSPERWEEK
+                       + (time_t) dn * SECSPERDAY
+                       + GPS_SEC_BIAS - 1;
+
+               tm = gmtime( &t_ls );
+               if (tm == NULL)  // gmtime() failed
+               {
+                       snprintf( t, size, "** (gmtime() failed in mk_utcinfo())" );
+                       return;
+               }
+
+               n += snprintf( t, size, "UTC offset transition from %is to %is due to leap second %s",
+                               dtls, dtlsf, ( dtls < dtlsf ) ? "insertion" : "deletion" );
+               n += snprintf( t + n, size - n, " at UTC midnight at the end of %s, %04i-%02i-%02i",
+                               daynames[tm->tm_wday], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday );
+       }
+       else
+               snprintf( t, size, "UTC offset parameter: %is, no leap second announced.\n", dtls );
+
 }
 
 #ifdef CLOCK_MEINBERG
 /**===========================================================================
- ** Meinberg GPS166/GPS167 support
+ ** Meinberg GPS receiver support
  **/
 
 /*------------------------------------------------------------
- * gps16x_message - process GPS16x messages
+ * gps16x_message - process messages from Meinberg GPS receiver
  */
 static void
 gps16x_message(
@@ -4261,12 +4290,12 @@ gps16x_message(
        {
                GPS_MSG_HDR header;
                unsigned char *bufp = (unsigned char *)parsetime->parse_msg + 1;
-               
+
 #ifdef DEBUG
                if (debug > 2)
                {
                        char msgbuffer[600];
-                       
+
                        mkreadable(msgbuffer, sizeof(msgbuffer), (char *)parsetime->parse_msg, parsetime->parse_msglen, 1);
                        printf("PARSE receiver #%d: received message (%d bytes) >%s<\n",
                                CLK_UNIT(parse->peer),
@@ -4275,21 +4304,21 @@ gps16x_message(
                }
 #endif
                get_mbg_header(&bufp, &header);
-               if (header.gps_hdr_csum == mbg_csum(parsetime->parse_msg + 1, 6) &&
-                   (header.gps_len == 0 ||
-                    (header.gps_len < sizeof(parsetime->parse_msg) &&
-                     header.gps_data_csum == mbg_csum(bufp, header.gps_len))))
+               if (header.hdr_csum == mbg_csum(parsetime->parse_msg + 1, 6) &&
+                   (header.len == 0 ||
+                    (header.len < sizeof(parsetime->parse_msg) &&
+                     header.data_csum == mbg_csum(bufp, header.len))))
                {
                        /*
                         * clean message
                         */
-                       switch (header.gps_cmd)
+                       switch (header.cmd)
                        {
                        case GPS_SW_REV:
                                {
                                        char buffer[64];
                                        SW_REV gps_sw_rev;
-                                       
+
                                        get_mbg_sw_rev(&bufp, &gps_sw_rev);
                                        snprintf(buffer, sizeof(buffer), "meinberg_gps_version=\"%x.%02x%s%s\"",
                                                (gps_sw_rev.code >> 8) & 0xFF,
@@ -4300,33 +4329,35 @@ gps16x_message(
                                }
                        break;
 
-                       case GPS_STAT:
+                       case GPS_BVAR_STAT:
                                {
                                        static struct state
                                        {
-                                               unsigned short flag; /* status flag */
-                                               unsigned const char *string; /* bit name */
+                                               BVAR_STAT flag; /* status flag */
+                                               const char *string; /* bit name */
                                        } states[] =
                                          {
-                                                 { TM_ANT_DISCONN, (const unsigned char *)"ANTENNA FAULTY" },
-                                                 { TM_SYN_FLAG,    (const unsigned char *)"NO SYNC SIGNAL" },
-                                                 { TM_NO_SYNC,     (const unsigned char *)"NO SYNC POWERUP" },
-                                                 { TM_NO_POS,      (const unsigned char *)"NO POSITION" },
-                                                 { 0, (const unsigned char *)"" }
+                                                 { BVAR_CFGH_INVALID,     "Configuration/Health" },
+                                                 { BVAR_ALM_NOT_COMPLETE, "Almanachs" },
+                                                 { BVAR_UTC_INVALID,      "UTC Correction" },
+                                                 { BVAR_IONO_INVALID,     "Ionospheric Correction" },
+                                                 { BVAR_RCVR_POS_INVALID, "Receiver Position" },
+                                                 { 0, "" }
                                          };
-                                       unsigned short status;
+                                       BVAR_STAT status;
                                        struct state *s = states;
                                        char buffer[512];
                                        char *p, *b;
-                                       
+
                                        status = get_lsb_short(&bufp);
                                        p = b = buffer;
                                        p = ap(buffer, sizeof(buffer), p,
                                            "meinberg_gps_status=\"[0x%04x] ",
                                            status);
-                                       
+
                                        if (status)
                                        {
+                                               p = ap(buffer, sizeof(buffer), p, "incomplete buffered data: ");
                                                b = p;
                                                while (s->flag)
                                                {
@@ -4336,7 +4367,7 @@ gps16x_message(
                                                                {
                                                                        p = ap(buffer, sizeof(buffer), p, ", ");
                                                                }
-                                                               
+
                                                                p = ap(buffer, sizeof(buffer), p, "%s", (const char *)s->string);
                                                        }
                                                        s++;
@@ -4345,9 +4376,9 @@ gps16x_message(
                                        }
                                        else
                                        {
-                                               p = ap(buffer, sizeof(buffer), p, "<OK>\"");
+                                               p = ap(buffer, sizeof(buffer), p, "<all buffered data complete>\"");
                                        }
-               
+
                                        set_var(&parse->kv, buffer, strlen(buffer)+1, RO|DEF);
                                }
                        break;
@@ -4356,141 +4387,141 @@ gps16x_message(
                                {
                                        XYZ xyz;
                                        char buffer[256];
-                                       
+
                                        get_mbg_xyz(&bufp, xyz);
                                        snprintf(buffer, sizeof(buffer), "gps_position(XYZ)=\"%s m, %s m, %s m\"",
                                                mfptoa(xyz[XP].l_ui, xyz[XP].l_uf, 1),
                                                mfptoa(xyz[YP].l_ui, xyz[YP].l_uf, 1),
                                                mfptoa(xyz[ZP].l_ui, xyz[ZP].l_uf, 1));
-                                       
+
                                        set_var(&parse->kv, buffer, sizeof(buffer), RO|DEF);
                                }
                        break;
-             
+
                        case GPS_POS_LLA:
                                {
                                        LLA lla;
                                        char buffer[256];
-                                       
+
                                        get_mbg_lla(&bufp, lla);
-                                       
+
                                        snprintf(buffer, sizeof(buffer), "gps_position(LLA)=\"%s deg, %s deg, %s m\"",
                                                mfptoa(lla[LAT].l_ui, lla[LAT].l_uf, 4),
-                                               mfptoa(lla[LON].l_ui, lla[LON].l_uf, 4), 
+                                               mfptoa(lla[LON].l_ui, lla[LON].l_uf, 4),
                                                mfptoa(lla[ALT].l_ui, lla[ALT].l_uf, 1));
-                                       
+
                                        set_var(&parse->kv, buffer, sizeof(buffer), RO|DEF);
                                }
                        break;
-             
+
                        case GPS_TZDL:
                                break;
-             
+
                        case GPS_PORT_PARM:
                                break;
-             
+
                        case GPS_SYNTH:
                                break;
-                               
+
                        case GPS_ANT_INFO:
                                {
                                        ANT_INFO antinfo;
                                        char buffer[512];
                                        char *p, *q;
-                                       
+
                                        get_mbg_antinfo(&bufp, &antinfo);
                                        p = buffer;
                                        p = ap(buffer, sizeof(buffer), p, "meinberg_antenna_status=\"");
                                        switch (antinfo.status)
                                        {
-                                       case ANT_INVALID:
+                                       case ANT_INVALID: // No other fields valid since antenna has not yet been disconnected
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "<OK>");
                                                break;
-                                               
-                                       case ANT_DISCONN:
+
+                                       case ANT_DISCONN: // Antenna is disconnected, tm_reconn and delta_t not yet set
                                                q = ap(buffer, sizeof(buffer),
                                                    p, "DISCONNECTED since ");
                                                NLOG(NLOG_CLOCKSTATUS)
                                                        ERR(ERR_BADSTATUS)
                                                        msyslog(LOG_ERR,"PARSE receiver #%d: ANTENNA FAILURE: %s",
                                                                CLK_UNIT(parse->peer), p);
-                                               
+
                                                p = q;
-                                               mbg_tm_str(&p, &antinfo.tm_disconn, BUFFER_SIZE(buffer, p));
+                                               mbg_tm_str(&p, &antinfo.tm_disconn, BUFFER_SIZE(buffer, p), 0);
                                                *p = '\0';
                                                break;
-                   
-                                       case ANT_RECONN:
+
+                                       case ANT_RECONN: // Antenna had been disconnect, but receiver sync. after reconnect, so all fields valid
                                                p = ap(buffer, sizeof(buffer),
-                                                   p, "RECONNECTED on ");
-                                               mbg_tm_str(&p, &antinfo.tm_reconn, BUFFER_SIZE(buffer, p));
+                                                   p, "SYNC AFTER RECONNECT on ");
+                                               mbg_tm_str(&p, &antinfo.tm_reconn, BUFFER_SIZE(buffer, p), 0);
                                                p = ap(buffer, sizeof(buffer),
-                                                       p, ", reconnect clockoffset %c%ld.%07ld s, disconnect time ",
+                                                       p, ", clock offset at reconnect %c%ld.%07ld s, disconnect time ",
                                                        (antinfo.delta_t < 0) ? '-' : '+',
-                                                       ABS(antinfo.delta_t) / 10000,
-                                                       ABS(antinfo.delta_t) % 10000);
-                                               mbg_tm_str(&p, &antinfo.tm_disconn, BUFFER_SIZE(buffer, p));
+                                                       (long) ABS(antinfo.delta_t) / 10000,
+                                                       (long) ABS(antinfo.delta_t) % 10000);
+                                               mbg_tm_str(&p, &antinfo.tm_disconn, BUFFER_SIZE(buffer, p), 0);
                                                *p = '\0';
                                                break;
-                   
+
                                        default:
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "bad status 0x%04x",
                                                    antinfo.status);
                                                break;
                                        }
-                                       
+
                                        p = ap(buffer, sizeof(buffer), p, "\"");
-                                       
+
                                        set_var(&parse->kv, buffer, sizeof(buffer), RO|DEF);
                                }
                        break;
-             
+
                        case GPS_UCAP:
                                break;
-                               
+
                        case GPS_CFGH:
                                {
                                        CFGH cfgh;
                                        char buffer[512];
                                        char *p;
-                                       
+
                                        get_mbg_cfgh(&bufp, &cfgh);
                                        if (cfgh.valid)
                                        {
                                                const char *cp;
                                                uint16_t tmp_val;
                                                int i;
-                                               
+
                                                p = buffer;
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "gps_tot_51=\"");
                                                mbg_tgps_str(&p, &cfgh.tot_51, BUFFER_SIZE(buffer, p));
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "\"");
-                                               set_var(&parse->kv, buffer, sizeof(buffer), RO);
-                                               
+                                               set_var(&parse->kv, buffer, sizeof(buffer), RO|COND_DEF);
+
                                                p = buffer;
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "gps_tot_63=\"");
                                                mbg_tgps_str(&p, &cfgh.tot_63, BUFFER_SIZE(buffer, p));
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "\"");
-                                               set_var(&parse->kv, buffer, sizeof(buffer), RO);
-                                               
+                                               set_var(&parse->kv, buffer, sizeof(buffer), RO|COND_DEF);
+
                                                p = buffer;
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "gps_t0a=\"");
                                                mbg_tgps_str(&p, &cfgh.t0a, BUFFER_SIZE(buffer, p));
                                                p = ap(buffer, sizeof(buffer),
                                                    p, "\"");
-                                               set_var(&parse->kv, buffer, sizeof(buffer), RO);
+                                               set_var(&parse->kv, buffer, sizeof(buffer), RO|COND_DEF);
 
-                                               for (i = 0; i < N_SVNO; i++)
+                                               for (i = 0; i < N_SVNO_GPS; i++)
                                                {
                                                        p = buffer;
-                                                       p = ap(buffer, sizeof(buffer), p, "sv_info[%d]=\"PRN%d", i, i + MIN_SVNO);
+                                                       p = ap(buffer, sizeof(buffer), p, "sv_info[%d]=\"PRN%d", i, i + N_SVNO_GPS);
 
                                                        tmp_val = cfgh.health[i];  /* a 6 bit SV health code */
                                                        p = ap(buffer, sizeof(buffer), p, "; health=0x%02x (", tmp_val);
@@ -4532,7 +4563,7 @@ gps16x_message(
                                                                p = ap( buffer, sizeof(buffer), p, ", A-S on" );
 
                                                        p = ap(buffer, sizeof(buffer), p, ")\"");
-                                                       set_var(&parse->kv, buffer, sizeof(buffer), RO);
+                                                       set_var(&parse->kv, buffer, sizeof(buffer), RO|COND_DEF);
                                                }
                                        }
                                }
@@ -4540,20 +4571,20 @@ gps16x_message(
 
                        case GPS_ALM:
                                break;
-                               
+
                        case GPS_EPH:
                                break;
-                               
+
                        case GPS_UTC:
                                {
                                        UTC utc;
                                        char buffer[512];
                                        char *p;
-                                       
+
                                        p = buffer;
-                                       
+
                                        get_mbg_utc(&bufp, &utc);
-                                       
+
                                        if (utc.valid)
                                        {
                                                p = ap(buffer, sizeof(buffer), p, "gps_utc_correction=\"");
@@ -4568,32 +4599,32 @@ gps16x_message(
                                        set_var(&parse->kv, buffer, sizeof(buffer), RO|DEF);
                                }
                        break;
-                       
+
                        case GPS_IONO:
                                break;
-                               
+
                        case GPS_ASCII_MSG:
                                {
                                        ASCII_MSG gps_ascii_msg;
                                        char buffer[128];
-               
+
                                        get_mbg_ascii_msg(&bufp, &gps_ascii_msg);
-                                       
+
                                        if (gps_ascii_msg.valid)
                                                {
                                                        char buffer1[128];
                                                        mkreadable(buffer1, sizeof(buffer1), gps_ascii_msg.s, strlen(gps_ascii_msg.s), (int)0);
-                                                       
+
                                                        snprintf(buffer, sizeof(buffer), "gps_message=\"%s\"", buffer1);
                                                }
                                        else
                                                snprintf(buffer, sizeof(buffer), "gps_message=<NONE>");
-                                       
+
                                        set_var(&parse->kv, buffer, sizeof(buffer), RO|DEF);
                                }
-                       
+
                        break;
-             
+
                        default:
                                break;
                        }
@@ -4602,12 +4633,12 @@ gps16x_message(
                {
                        msyslog(LOG_DEBUG, "PARSE receiver #%d: gps16x_message: message checksum error: hdr_csum = 0x%x (expected 0x%lx), data_len = %d, data_csum = 0x%x (expected 0x%lx)",
                                CLK_UNIT(parse->peer),
-                               header.gps_hdr_csum, mbg_csum(parsetime->parse_msg + 1, 6),
-                               header.gps_len,
-                               header.gps_data_csum, mbg_csum(bufp, (unsigned)((header.gps_len < sizeof(parsetime->parse_msg)) ? header.gps_len : 0)));
+                               header.hdr_csum, mbg_csum(parsetime->parse_msg + 1, 6),
+                               header.len,
+                               header.data_csum, mbg_csum(bufp, (unsigned)((header.len < sizeof(parsetime->parse_msg)) ? header.len : 0)));
                }
        }
-  
+
        return;
 }
 
@@ -4620,11 +4651,11 @@ gps16x_poll(
            )
 {
        struct parseunit *parse = peer->procptr->unitptr;
-       
-       static GPS_MSG_HDR sequence[] = 
+
+       static GPS_MSG_HDR sequence[] =
        {
                { GPS_SW_REV,          0, 0, 0 },
-               { GPS_STAT,            0, 0, 0 },
+               { GPS_BVAR_STAT,       0, 0, 0 },
                { GPS_UTC,             0, 0, 0 },
                { GPS_ASCII_MSG,       0, 0, 0 },
                { GPS_ANT_INFO,        0, 0, 0 },
@@ -4638,41 +4669,41 @@ gps16x_poll(
        unsigned char cmd_buffer[64];
        unsigned char *outp = cmd_buffer;
        GPS_MSG_HDR *header;
-       
+
        if (((poll_info_t *)parse->parse_type->cl_data)->rate)
        {
                parse->peer->procptr->nextaction = current_time + ((poll_info_t *)parse->parse_type->cl_data)->rate;
        }
 
-       if (sequence[parse->localstate].gps_cmd == (unsigned short)~0)
+       if (sequence[parse->localstate].cmd == (unsigned short)~0)
                parse->localstate = 0;
-       
+
        header = sequence + parse->localstate++;
-       
+
        *outp++ = SOH;          /* start command */
-       
+
        put_mbg_header(&outp, header);
        outp = cmd_buffer + 1;
-       
-       header->gps_hdr_csum = (short)mbg_csum(outp, 6);
+
+       header->hdr_csum = (short)mbg_csum(outp, 6);
        put_mbg_header(&outp, header);
-       
+
 #ifdef DEBUG
        if (debug > 2)
        {
                char buffer[128];
-               
+
                mkreadable(buffer, sizeof(buffer), (char *)cmd_buffer, (unsigned)(outp - cmd_buffer), 1);
                printf("PARSE receiver #%d: transmitted message #%ld (%d bytes) >%s<\n",
                       CLK_UNIT(parse->peer),
                       parse->localstate - 1,
                       (int)(outp - cmd_buffer),
-                      buffer); 
+                      buffer);
        }
 #endif
-  
+
        rtc = write(parse->generic->io.fd, cmd_buffer, (unsigned long)(outp - cmd_buffer));
-       
+
        if (rtc < 0)
        {
                ERR(ERR_BADIO)
@@ -4721,7 +4752,7 @@ gps16x_poll_init(
        return 1;
 }
 #endif /* CLOCK_MEINBERG */
-\f
+
 /**===========================================================================
  ** clock polling support
  **/
@@ -4762,7 +4793,7 @@ poll_poll(
        )
 {
        struct parseunit *parse = peer->procptr->unitptr;
-       
+
        if (parse->parse_type->cl_poll)
                parse->parse_type->cl_poll(parse);
 
@@ -4788,7 +4819,7 @@ poll_init(
 
        return 0;
 }
-\f
+
 /**===========================================================================
  ** Trimble support
  **/
@@ -4818,7 +4849,7 @@ trimbletaip_init(
        else
        {
                tio.c_cc[VEOL] = TRIMBLETAIP_EOL;
-       
+
                if (TTY_SETATTR(parse->generic->io.fd, &tio) == -1)
                {
                        msyslog(LOG_ERR, "PARSE receiver #%d: trimbletaip_init: tcsetattr(fd, &tio): %m", CLK_UNIT(parse->peer));
@@ -4837,7 +4868,7 @@ static const char *taipinit[] = {
        ">FTM00020001<",
        (char *)0
 };
-      
+
 static void
 trimbletaip_event(
        struct parseunit *parse,
@@ -4982,19 +5013,19 @@ union uval {
        float   fv;
        double  dv;
 };
-  
+
 struct txbuf
 {
        short idx;                      /* index to first unused byte */
        u_char *txt;                    /* pointer to actual data buffer */
 };
 
-void   sendcmd         (struct txbuf *buf, int c); 
-void   sendbyte        (struct txbuf *buf, int b); 
-void   sendetx         (struct txbuf *buf, struct parseunit *parse); 
-void   sendint         (struct txbuf *buf, int a); 
-void   sendflt         (struct txbuf *buf, double a); 
+void   sendcmd         (struct txbuf *buf, int c);
+void   sendbyte        (struct txbuf *buf, int b);
+void   sendetx         (struct txbuf *buf, struct parseunit *parse);
+void   sendint         (struct txbuf *buf, int a);
+void   sendflt         (struct txbuf *buf, double a);
+
 void
 sendcmd(
        struct txbuf *buf,
@@ -5006,12 +5037,12 @@ sendcmd(
        buf->idx = 2;
 }
 
-void   sendcmd         (struct txbuf *buf, int c); 
-void   sendbyte        (struct txbuf *buf, int b); 
-void   sendetx         (struct txbuf *buf, struct parseunit *parse); 
-void   sendint         (struct txbuf *buf, int a); 
-void   sendflt         (struct txbuf *buf, double a); 
+void   sendcmd         (struct txbuf *buf, int c);
+void   sendbyte        (struct txbuf *buf, int b);
+void   sendetx         (struct txbuf *buf, struct parseunit *parse);
+void   sendint         (struct txbuf *buf, int a);
+void   sendflt         (struct txbuf *buf, double a);
+
 void
 sendbyte(
        struct txbuf *buf,
@@ -5043,18 +5074,18 @@ sendetx(
          if (debug > 2)
          {
                  char buffer[256];
-                 
+
                  mkreadable(buffer, sizeof(buffer), (char *)buf->txt, (unsigned)buf->idx, 1);
                  printf("PARSE receiver #%d: transmitted message (%d bytes) >%s<\n",
                         CLK_UNIT(parse->peer),
-                        buf->idx, buffer); 
+                        buf->idx, buffer);
          }
 #endif
                clear_err(parse, ERR_BADIO);
        }
 }
 
-void  
+void
 sendint(
        struct txbuf *buf,
        int a
@@ -5106,12 +5137,12 @@ trimbletsip_setup(
 
        if (t)
                t->last_reset = current_time;
-                       
+
        buf.txt = buffer;
-  
+
        sendcmd(&buf, CMD_CVERSION);    /* request software versions */
        sendetx(&buf, parse);
-       
+
        sendcmd(&buf, CMD_COPERPARAM);  /* set operating parameters */
        sendbyte(&buf, 4);      /* static */
        sendflt(&buf, 5.0*D2R); /* elevation angle mask = 10 deg XXX */
@@ -5119,25 +5150,25 @@ trimbletsip_setup(
        sendflt(&buf, 12.0);    /* PDOP mask = 12 */
        sendflt(&buf, 8.0);     /* PDOP switch level = 8 */
        sendetx(&buf, parse);
-       
+
        sendcmd(&buf, CMD_CMODESEL);    /* fix mode select */
        sendbyte(&buf, 1);      /* time transfer mode */
        sendetx(&buf, parse);
-       
+
        sendcmd(&buf, CMD_CMESSAGE);    /* request system message */
        sendetx(&buf, parse);
-       
+
        sendcmd(&buf, CMD_CSUPER);      /* superpacket fix */
        sendbyte(&buf, 0x2);    /* binary mode */
        sendetx(&buf, parse);
-       
+
        sendcmd(&buf, CMD_CIOOPTIONS);  /* set I/O options */
        sendbyte(&buf, TRIM_POS_OPT);   /* position output */
        sendbyte(&buf, 0x00);   /* no velocity output */
        sendbyte(&buf, TRIM_TIME_OPT);  /* UTC, compute on seconds */
        sendbyte(&buf, 0x00);   /* no raw measurements */
        sendetx(&buf, parse);
-       
+
        sendcmd(&buf, CMD_CUTCPARAM);   /* request UTC correction data */
        sendetx(&buf, parse);
 
@@ -5161,7 +5192,7 @@ trimble_check(
        u_char buffer[256];
        struct txbuf buf;
        buf.txt = buffer;
-       
+
        if (t)
        {
                if (current_time > t->last_msg + TRIMBLETSIP_IDLE_TIME)
@@ -5169,18 +5200,18 @@ trimble_check(
        }
 
        poll_poll(parse->peer); /* emit query string and re-arm timer */
-       
+
        if (t && t->qtracking)
        {
                u_long oldsats = t->ltrack & ~t->ctrack;
-               
+
                t->qtracking = 0;
                t->ltrack = t->ctrack;
-               
+
                if (oldsats)
                {
                        int i;
-                               
+
                        for (i = 0; oldsats; i++) {
                                if (oldsats & (1 << i))
                                        {
@@ -5191,7 +5222,7 @@ trimble_check(
                                oldsats &= ~(1 << i);
                        }
                }
-                                               
+
                sendcmd(&buf, CMD_CSTATTRACK);
                sendbyte(&buf, 0x00);   /* current tracking set */
                sendetx(&buf, parse);
@@ -5206,7 +5237,7 @@ trimbletsip_end(
              struct parseunit *parse
              )
 {      trimble_t *t = parse->localdata;
-       
+
        if (t)
        {
                free(t);
@@ -5237,9 +5268,9 @@ trimbletsip_init(
        if (!parse->localdata)
        {
                trimble_t *t;
-               
+
                t = (trimble_t *)(parse->localdata = emalloc(sizeof(trimble_t)));
-               
+
                if (t)
                {
                        memset((char *)t, 0, sizeof(trimble_t));
@@ -5319,7 +5350,7 @@ getflt(
        )
 {
        union uval uval;
-       
+
 #ifdef WORDS_BIGENDIAN
        uval.bd[0] = *bp++;
        uval.bd[1] = *bp++;
@@ -5340,7 +5371,7 @@ getdbl(
        )
 {
        union uval uval;
-       
+
 #ifdef WORDS_BIGENDIAN
        uval.bd[0] = *bp++;
        uval.bd[1] = *bp++;
@@ -5385,7 +5416,7 @@ trimbletsip_message(
 {
        unsigned char *buffer = parsetime->parse_msg;
        unsigned int   size   = parsetime->parse_msglen;
-       
+
        if ((size < 4) ||
            (buffer[0]      != DLE) ||
            (buffer[size-1] != ETX) ||
@@ -5413,7 +5444,7 @@ trimbletsip_message(
                char pbuffer[200];
                char *t = pbuffer;
                cmd_info_t *s;
-               
+
 #ifdef DEBUG
                if (debug > 3) {
                        size_t i;
@@ -5429,9 +5460,9 @@ trimbletsip_message(
 
                if (tr)
                        tr->last_msg = current_time;
-               
+
                s = trimble_convert(cmd, trimble_rcmds);
-               
+
                if (s)
                {
                        t = ap(pbuffer, sizeof(pbuffer), t, "%s=\"", s->varname);
@@ -5451,7 +5482,7 @@ trimbletsip_message(
                                 getflt((unsigned char *)&mb(0)), getshort((unsigned char *)&mb(4)),
                                 getflt((unsigned char *)&mb(6)));
                        break;
-                       
+
                case CMD_RBEST4:
                        t = ap(pbuffer, sizeof(pbuffer), t, "mode: ");
                        switch (mb(0) & 0xF)
@@ -5464,11 +5495,11 @@ trimbletsip_message(
                        case 1:
                                t = ap(pbuffer, sizeof(pbuffer), t, "0D");
                                break;
-                               
+
                        case 3:
                                t = ap(pbuffer, sizeof(pbuffer), t, "2D");
                                break;
-                               
+
                        case 4:
                                t = ap(pbuffer, sizeof(pbuffer), t, "3D");
                                break;
@@ -5477,7 +5508,7 @@ trimbletsip_message(
                                t = ap(pbuffer, sizeof(pbuffer), t, "-MANUAL, ");
                        else
                                t = ap(pbuffer, sizeof(pbuffer), t, "-AUTO, ");
-                       
+
                        t = ap(pbuffer, sizeof(pbuffer), t, "satellites %02d %02d %02d %02d, PDOP %.2f, HDOP %.2f, VDOP %.2f, TDOP %.2f",
                                mb(1), mb(2), mb(3), mb(4),
                                getflt((unsigned char *)&mb(5)),
@@ -5486,12 +5517,12 @@ trimbletsip_message(
                                getflt((unsigned char *)&mb(17)));
 
                        break;
-                       
+
                case CMD_RVERSION:
                        t = ap(pbuffer, sizeof(pbuffer), t, "%d.%d (%d/%d/%d)",
                                mb(0)&0xff, mb(1)&0xff, 1900+(mb(4)&0xff), mb(2)&0xff, mb(3)&0xff);
                        break;
-                       
+
                case CMD_RRECVHEALTH:
                {
                        static const char *msgs[] =
@@ -5505,9 +5536,9 @@ trimbletsip_message(
                                "<BIT 6>",
                                "<BIT 7>"
                        };
-                       
+
                        int i, bits;
-                       
+
                        switch (mb(0) & 0xFF)
                        {
                        default:
@@ -5540,7 +5571,7 @@ trimbletsip_message(
                        }
 
                        bits = mb(1) & 0xFF;
-                       
+
                        for (i = 0; i < 8; i++)
                                if (bits & (0x1<<i))
                                {
@@ -5548,11 +5579,11 @@ trimbletsip_message(
                                }
                }
                break;
-                       
+
                case CMD_RMESSAGE:
                        mkreadable(t, (int)BUFFER_SIZE(pbuffer, t), (char *)&mb(0), (unsigned)(size - 2 - (&mb(0) - buffer)), 0);
                        break;
-                       
+
                case CMD_RMACHSTAT:
                {
                        static const char *msgs[] =
@@ -5566,12 +5597,12 @@ trimbletsip_message(
                                "<BIT 6>",
                                "<BIT 7>"
                        };
-                       
+
                        int i, bits;
 
                        t = ap(pbuffer, sizeof(pbuffer), t, "machine id 0x%02x", mb(0) & 0xFF);
                        bits = mb(1) & 0xFF;
-                       
+
                        for (i = 0; i < 8; i++)
                                if (bits & (0x1<<i))
                                {
@@ -5581,13 +5612,13 @@ trimbletsip_message(
                        t = ap(pbuffer, sizeof(pbuffer), t, ", Superpackets %ssupported", (mb(2) & 0xFF) ? "" :"un" );
                }
                break;
-                       
+
                case CMD_ROPERPARAM:
                        t = ap(pbuffer, sizeof(pbuffer), t, "%2x %.1f %.1f %.1f %.1f",
                                mb(0), getflt((unsigned char *)&mb(1)), getflt((unsigned char *)&mb(5)),
                                getflt((unsigned char *)&mb(9)), getflt((unsigned char *)&mb(13)));
                        break;
-                       
+
                case CMD_RUTCPARAM:
                {
                        float t0t = getflt((unsigned char *)&mb(14));
@@ -5624,14 +5655,14 @@ trimbletsip_message(
                        }
                }
                break;
-               
+
                case CMD_RSPOSXYZ:
                {
                        double x = getflt((unsigned char *)&mb(0));
                        double y = getflt((unsigned char *)&mb(4));
                        double z = getflt((unsigned char *)&mb(8));
                        double f = getflt((unsigned char *)&mb(12));
-                       
+
                        if (f > 0.0)
                          t = ap(pbuffer, sizeof(pbuffer), t, "x= %.1fm, y= %.1fm, z= %.1fm, time_of_fix= %f sec",
                                  x, y, z,
@@ -5646,7 +5677,7 @@ trimbletsip_message(
                        double lat = getflt((unsigned char *)&mb(0));
                        double lng = getflt((unsigned char *)&mb(4));
                        double f   = getflt((unsigned char *)&mb(12));
-                       
+
                        if (f > 0.0)
                          t = ap(pbuffer, sizeof(pbuffer), t, "lat %f %c, long %f %c, alt %.2fm",
                                  ((lat < 0.0) ? (-lat) : (lat))*RTOD, (lat < 0.0 ? 'S' : 'N'),
@@ -5666,7 +5697,7 @@ trimbletsip_message(
                                x, y, z);
                }
                break;
-                               
+
                case CMD_RDOUBLELLA:
                {
                        double lat = getdbl((unsigned char *)&mb(0));
@@ -5681,7 +5712,7 @@ trimbletsip_message(
                case CMD_RALLINVIEW:
                {
                        int i, sats;
-                       
+
                        t = ap(pbuffer, sizeof(pbuffer), t, "mode: ");
                        switch (mb(0) & 0x7)
                        {
@@ -5692,7 +5723,7 @@ trimbletsip_message(
                        case 3:
                                t = ap(pbuffer, sizeof(pbuffer), t, "2D");
                                break;
-                               
+
                        case 4:
                                t = ap(pbuffer, sizeof(pbuffer), t, "3D");
                                break;
@@ -5701,9 +5732,9 @@ trimbletsip_message(
                                t = ap(pbuffer, sizeof(pbuffer), t, "-MANUAL, ");
                        else
                                t = ap(pbuffer, sizeof(pbuffer), t, "-AUTO, ");
-                       
+
                        sats = (mb(0)>>4) & 0xF;
-                       
+
                        t = ap(pbuffer, sizeof(pbuffer), t, "PDOP %.2f, HDOP %.2f, VDOP %.2f, TDOP %.2f, %d satellite%s in view: ",
                                getflt((unsigned char *)&mb(1)),
                                getflt((unsigned char *)&mb(5)),
@@ -5724,7 +5755,7 @@ trimbletsip_message(
                        }
                }
                break;
-               
+
                case CMD_RSTATTRACK:
                {
                        t = ap(pbuffer, sizeof(pbuffer), t-2, "[%02d]=\"", mb(0)); /* add index to var name */
@@ -5734,7 +5765,7 @@ trimbletsip_message(
                                var_flag &= ~DEF;
                        }
                        else
-                       {       
+                       {
                                t = ap(pbuffer, sizeof(pbuffer), t, "ch=%d, acq=%s, eph=%d, signal_level= %5.2f, elevation= %5.2f, azimuth= %6.2f",
                                        (mb(1) & 0xFF)>>3,
                                        mb(2) ? ((mb(2) == 1) ? "ACQ" : "SRCH") : "NEVER",
@@ -5760,7 +5791,7 @@ trimbletsip_message(
                        }
                }
                break;
-               
+
                default:
                        t = ap(pbuffer, sizeof(pbuffer), t, "<UNDECODED>");
                        break;
@@ -5771,7 +5802,7 @@ trimbletsip_message(
        }
 }
 
-\f
+
 /**============================================================
  ** RAWDCF support
  **/
index 9bf384de17c30b07ebd5289ee64c198c63bd8276..d5dd778d73fc5ff16c6af825aac672b6c023fb68 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * /src/NTP/REPOSITORY/ntp4-dev/parseutil/dcfd.c,v 4.18 2005/10/07 22:08:18 kardel RELEASE_20051008_A
- *  
+ *
  * dcfd.c,v 4.18 2005/10/07 22:08:18 kardel RELEASE_20051008_A
  *
  * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
@@ -14,7 +14,7 @@
  *  Leap second handling (at that level you should switch to NTP Version 4 - really!)
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index c78c2424eb2fd7602ed58a2a64f0b424b62b10a7..9d8ff15a3bd68aaa8c21f90776e1929747a89460 100644 (file)
@@ -2,11 +2,11 @@
  * /src/NTP/ntp4-dev/parseutil/testdcf.c,v 4.10 2005/08/06 14:18:43 kardel RELEASE_20050806_A
  *
  * testdcf.c,v 4.10 2005/08/06 14:18:43 kardel RELEASE_20050806_A
- *  
+ *
  * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
  *
  * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
- * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
+ * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions