Annotation of embedaddon/ntp/ntpd/refclock_palisade.h, revision 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>