File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / ntpd / refclock_palisade.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:37 2012 UTC (12 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    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>