Annotation of embedaddon/ntp/ntpd/refclock_palisade.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * This software was developed by the Software and Component Technologies
                      3:  * group of Trimble Navigation, Ltd.
                      4:  *
                      5:  * Copyright (c) 1997, 1998, 1999, 2000   Trimble Navigation Ltd.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *    This product includes software developed by Trimble Navigation, Ltd.
                     19:  * 4. The name of Trimble Navigation Ltd. may not be used to endorse or
                     20:  *    promote products derived from this software without specific prior
                     21:  *    written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY TRIMBLE NAVIGATION LTD. ``AS IS'' AND
                     24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     26:  * ARE DISCLAIMED.  IN NO EVENT SHALL TRIMBLE NAVIGATION LTD. BE LIABLE
                     27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     33:  * SUCH DAMAGE.
                     34:  */
                     35: 
                     36: /*
                     37:  * refclock_palisade - clock driver for the Trimble Palisade GPS
                     38:  * timing receiver
                     39:  *
                     40:  * For detailed information on this program, please refer to the html 
                     41:  * Refclock 29 page accompanying the NTP distribution.
                     42:  *
                     43:  * for questions / bugs / comments, contact:
                     44:  * sven_dietrich@trimble.com
                     45:  *
                     46:  * Sven-Thorsten Dietrich
                     47:  * 645 North Mary Avenue
                     48:  * Post Office Box 3642
                     49:  * Sunnyvale, CA 94088-3642
                     50:  *
                     51:  */
                     52: 
                     53: #ifndef _REFCLOCK_PALISADE_H
                     54: #define _REFCLOCK_PALISADE_H
                     55: 
                     56: #ifdef HAVE_CONFIG_H
                     57: #include "config.h"
                     58: #endif
                     59: 
                     60: #if defined HAVE_SYS_MODEM_H
                     61: #include <sys/modem.h>
                     62: #ifndef __QNXNTO__
                     63: #define TIOCMSET MCSETA
                     64: #define TIOCMGET MCGETA
                     65: #define TIOCM_RTS MRTS
                     66: #endif
                     67: #endif
                     68: 
                     69: #ifdef HAVE_TERMIOS_H
                     70: # ifdef TERMIOS_NEEDS__SVID3
                     71: #  define _SVID3
                     72: # endif
                     73: # include <termios.h>
                     74: # include <sys/stat.h>
                     75: # ifdef TERMIOS_NEEDS__SVID3
                     76: #  undef _SVID3
                     77: # endif
                     78: #endif
                     79: 
                     80: #ifdef HAVE_SYS_IOCTL_H
                     81: #include <sys/ioctl.h>
                     82: #endif
                     83: 
                     84: #include "ntpd.h"
                     85: #include "ntp_io.h"
                     86: #include "ntp_control.h"
                     87: #include "ntp_refclock.h"
                     88: #include "ntp_unixtime.h"
                     89: #include "ntp_stdlib.h"
                     90: 
                     91: /*
                     92:  * GPS Definitions
                     93:  */
                     94: #define        DESCRIPTION     "Trimble Palisade GPS" /* Long name */
                     95: #define        PRECISION       (-20)   /* precision assumed (about 1 us) */
                     96: #define        REFID           "GPS\0" /* reference ID */
                     97: #define TRMB_MINPOLL    4      /* 16 seconds */
                     98: #define TRMB_MAXPOLL   5       /* 32 seconds */
                     99: 
                    100: /*
                    101:  * I/O Definitions
                    102:  */
                    103: #define        DEVICE          "/dev/palisade%d"       /* device name and unit */
                    104: #define        SPEED232        B9600                   /* uart speed (9600 baud) */
                    105: 
                    106: /*
                    107:  * TSIP Report Definitions
                    108:  */
                    109: #define LENCODE_8F0B   74      /* Length of TSIP 8F-0B Packet & header */
                    110: #define LENCODE_NTP     22     /* Length of Palisade NTP Packet */
                    111: 
                    112: #define LENCODE_8FAC    68      /* Length of Thunderbolt 8F-AC Position Packet*/
                    113: #define LENCODE_8FAB    17      /* Length of Thunderbolt Primary Timing Packet*/
                    114: 
                    115: /* Allowed Sub-Packet ID's */
                    116: #define PACKET_8F0B    0x0B
                    117: #define PACKET_NTP     0xAD
                    118: 
                    119: /* Thunderbolt Packets */
                    120: #define PACKET_8FAC     0xAC   /* Supplementary Thunderbolt Time Packet */
                    121: #define PACKET_8FAB     0xAB   /* Primary Thunderbolt Time Packet */
                    122: #define PACKET_6D      0x6D    /* Supplementary Thunderbolt Tracking Stats */
                    123: #define PACKET_41      0x41    /* Thunderbolt I dont know what this packet is, it's not documented on my manual*/
                    124: 
                    125: /* Acutime Packets */
                    126: #define PACKET_41A      0x41    /* GPS time */
                    127: #define PACKET_46       0x46    /* Receiver Health */
                    128: 
                    129: #define DLE 0x10
                    130: #define ETX 0x03
                    131: 
                    132: /* parse states */
                    133: #define TSIP_PARSED_EMPTY       0      
                    134: #define TSIP_PARSED_FULL        1
                    135: #define TSIP_PARSED_DLE_1       2
                    136: #define TSIP_PARSED_DATA        3
                    137: #define TSIP_PARSED_DLE_2       4
                    138: 
                    139: /* 
                    140:  * Leap-Insert and Leap-Delete are encoded as follows:
                    141:  *     PALISADE_UTC_TIME set   and PALISADE_LEAP_PENDING set: INSERT leap
                    142:  */
                    143: 
                    144: #define PALISADE_LEAP_INPROGRESS 0x08 /* This is the leap flag                 */
                    145: #define PALISADE_LEAP_WARNING    0x04 /* GPS Leap Warning (see ICD-200) */
                    146: #define PALISADE_LEAP_PENDING    0x02 /* Leap Pending (24 hours)               */
                    147: #define PALISADE_UTC_TIME        0x01 /* UTC time available                            */
                    148: 
                    149: #define mb(_X_) (up->rpt_buf[(_X_ + 1)]) /* shortcut for buffer access */
                    150: 
                    151: /* Conversion Definitions */
                    152: #define GPS_PI                 (3.1415926535898)
                    153: #define        R2D             (180.0/GPS_PI)
                    154: 
                    155: /*
                    156:  * Structure for build data packets for send (thunderbolt uses it only)
                    157:  * taken from Markus Prosch
                    158:  */
                    159: struct packettx
                    160: {
                    161:        short   size;
                    162:        u_char *data;
                    163: };
                    164: 
                    165: /*
                    166:  * Palisade unit control structure.
                    167:  */
                    168: struct palisade_unit {
                    169:        short           unit;           /* NTP refclock unit number */
                    170:        int             polled;         /* flag to detect noreplies */
                    171:        char            leap_status;    /* leap second flag */
                    172:        char            rpt_status;     /* TSIP Parser State */
                    173:        short           rpt_cnt;        /* TSIP packet length so far */
                    174:        char            rpt_buf[BMAX];  /* packet assembly buffer */
                    175:        int             type;           /* Clock mode type */
                    176: };
                    177: 
                    178: /*
                    179:  * Function prototypes
                    180:  */
                    181: 
                    182: static int     palisade_start          (int, struct peer *);
                    183: static void    palisade_shutdown       (int, struct peer *);
                    184: static void    palisade_receive        (struct peer *);
                    185: static void    palisade_poll           (int, struct peer *);
                    186: static  void   palisade_io             (struct recvbuf *);
                    187: int            palisade_configure      (int, struct peer *);
                    188: int            TSIP_decode             (struct peer *);
                    189: long           HW_poll                 (struct refclockproc *);
                    190: float          getfloat                (u_char *); 
                    191: double                 getdbl                  (u_char *);
                    192: short                  getint                  (u_char *);
                    193: long           getlong                 (u_char *);
                    194: 
                    195: 
                    196: #ifdef PALISADE_SENDCMD_RESURRECTED
                    197: static  void   sendcmd                 (struct packettx *buffer, int c);
                    198: #endif
                    199: static  void   sendsupercmd            (struct packettx *buffer, int c1, int c2);
                    200: static  void   sendbyte                (struct packettx *buffer, int b);
                    201: static  void   sendint                 (struct packettx *buffer, int a);
                    202: static  int    sendetx                 (struct packettx *buffer, int fd);
                    203: static  void   init_thunderbolt        (int fd);
                    204: static  void   init_acutime            (int fd);
                    205: #endif /* PALISADE_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>