summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/ntpd/refclock_hopfser.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/ntpd/refclock_hopfser.c')
-rw-r--r--contrib/ntp/ntpd/refclock_hopfser.c378
1 files changed, 0 insertions, 378 deletions
diff --git a/contrib/ntp/ntpd/refclock_hopfser.c b/contrib/ntp/ntpd/refclock_hopfser.c
deleted file mode 100644
index 1d27333..0000000
--- a/contrib/ntp/ntpd/refclock_hopfser.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- *
- * refclock_hopfser.c
- * - clock driver for hopf serial boards (GPS or DCF77)
- *
- * Date: 30.03.2000 Revision: 01.10
- *
- * latest source and further information can be found at:
- * http://www.ATLSoft.de/ntp
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#if defined(SYS_WINNT)
-#undef close
-#define close closesocket
-#endif
-
-#if defined(REFCLOCK) && (defined(CLOCK_HOPF_SERIAL))
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_control.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "ntp_stdlib.h"
-
-#if defined HAVE_SYS_MODEM_H
-# include <sys/modem.h>
-# define TIOCMSET MCSETA
-# define TIOCMGET MCGETA
-# define TIOCM_RTS MRTS
-#endif
-
-#ifdef HAVE_TERMIOS_H
-# ifdef TERMIOS_NEEDS__SVID3
-# define _SVID3
-# endif
-# include <termios.h>
-# ifdef TERMIOS_NEEDS__SVID3
-# undef _SVID3
-# endif
-#endif
-
-#ifdef HAVE_SYS_IOCTL_H
-# include <sys/ioctl.h>
-#endif
-
-/*
- * clock definitions
- */
-#define DESCRIPTION "hopf Elektronik serial clock" /* Long name */
-#define PRECISION (-10) /* precision assumed (about 1 ms) */
-#define REFID "hopf\0" /* reference ID */
-/*
- * I/O definitions
- */
-#define DEVICE "/dev/hopfclock%d" /* device name and unit */
-#define SPEED232 B9600 /* uart speed (9600 baud) */
-
-
-#define STX 0x02
-#define ETX 0x03
-#define CR 0x0c
-#define LF 0x0a
-
-/* parse states */
-#define REC_QUEUE_EMPTY 0
-#define REC_QUEUE_FULL 1
-
-#define HOPF_OPMODE 0x0C /* operation mode mask */
-#define HOPF_INVALID 0x00 /* no time code available */
-#define HOPF_INTERNAL 0x04 /* internal clock */
-#define HOPF_RADIO 0x08 /* radio clock */
-#define HOPF_RADIOHP 0x0C /* high precision radio clock */
-
-/*
- * hopfclock unit control structure.
- */
-struct hopfclock_unit {
- l_fp laststamp; /* last receive timestamp */
- short unit; /* NTP refclock unit number */
- u_long polled; /* flag to detect noreplies */
- char leap_status; /* leap second flag */
- int rpt_next;
-};
-
-/*
- * Function prototypes
- */
-
-static int hopfserial_start P((int, struct peer *));
-static void hopfserial_shutdown P((int, struct peer *));
-static void hopfserial_receive P((struct recvbuf *));
-static void hopfserial_poll P((int, struct peer *));
-/* static void hopfserial_io P((struct recvbuf *)); */
-/*
- * Transfer vector
- */
-struct refclock refclock_hopfser = {
- hopfserial_start, /* start up driver */
- hopfserial_shutdown, /* shut down driver */
- hopfserial_poll, /* transmit poll message */
- noentry, /* not used */
- noentry, /* initialize driver (not used) */
- noentry, /* not used */
- NOFLAGS /* not used */
-};
-
-/*
- * hopfserial_start - open the devices and initialize data for processing
- */
-static int
-hopfserial_start (
- int unit,
- struct peer *peer
- )
-{
- register struct hopfclock_unit *up;
- struct refclockproc *pp;
- int fd;
- char gpsdev[20];
-
-#ifdef SYS_WINNT
- (void) sprintf(gpsdev, "COM%d:", unit);
-#else
- (void) sprintf(gpsdev, DEVICE, unit);
-#endif
- /* LDISC_STD, LDISC_RAW
- * Open serial port. Use CLK line discipline, if available.
- */
- fd = refclock_open(gpsdev, SPEED232, LDISC_CLK);
- if (fd <= 0) {
-#ifdef DEBUG
- printf("hopfSerialClock(%d) start: open %s failed\n", unit, gpsdev);
-#endif
- return 0;
- }
-
- msyslog(LOG_NOTICE, "hopfSerialClock(%d) fd: %d dev: %s", unit, fd,
- gpsdev);
-
- /*
- * Allocate and initialize unit structure
- */
- up = (struct hopfclock_unit *) emalloc(sizeof(struct hopfclock_unit));
-
- if (!(up)) {
- msyslog(LOG_ERR, "hopfSerialClock(%d) emalloc: %m",unit);
-#ifdef DEBUG
- printf("hopfSerialClock(%d) emalloc\n",unit);
-#endif
- (void) close(fd);
- return (0);
- }
-
- memset((char *)up, 0, sizeof(struct hopfclock_unit));
- pp = peer->procptr;
- pp->unitptr = (caddr_t)up;
- pp->io.clock_recv = hopfserial_receive;
- pp->io.srcclock = (caddr_t)peer;
- pp->io.datalen = 0;
- pp->io.fd = fd;
- if (!io_addclock(&pp->io)) {
-#ifdef DEBUG
- printf("hopfSerialClock(%d) io_addclock\n",unit);
-#endif
- (void) close(fd);
- free(up);
- return (0);
- }
-
- /*
- * Initialize miscellaneous variables
- */
- pp->clockdesc = DESCRIPTION;
- peer->precision = PRECISION;
- peer->burst = NSTAGE;
- memcpy((char *)&pp->refid, REFID, 4);
-
- up->leap_status = 0;
- up->unit = (short) unit;
-
- return (1);
-}
-
-
-/*
- * hopfserial_shutdown - shut down the clock
- */
-static void
-hopfserial_shutdown (
- int unit,
- struct peer *peer
- )
-{
- register struct hopfclock_unit *up;
- struct refclockproc *pp;
-
- pp = peer->procptr;
- up = (struct hopfclock_unit *)pp->unitptr;
- io_closeclock(&pp->io);
- free(up);
-}
-
-
-
-/*
- * hopfserial_receive - receive data from the serial interface
- */
-
-static void
-hopfserial_receive (
- struct recvbuf *rbufp
- )
-{
- struct hopfclock_unit *up;
- struct refclockproc *pp;
- struct peer *peer;
-
- int synch; /* synchhronization indicator */
- int DoW; /* Dow */
-
- int day, month; /* ddd conversion */
-
- /*
- * Initialize pointers and read the timecode and timestamp.
- */
- peer = (struct peer *)rbufp->recv_srcclock;
- pp = peer->procptr;
- up = (struct hopfclock_unit *)pp->unitptr;
-
- if (up->rpt_next == 0 )
- return;
-
-
- up->rpt_next = 0; /* wait until next poll interval occur */
-
- pp->lencode = (u_short)refclock_gtlin(rbufp, pp->a_lastcode, BMAX, &pp->lastrec);
-
- if (pp->lencode == 0)
- return;
-
- sscanf(pp->a_lastcode,
-#if 1
- "%1x%1x%2d%2d%2d%2d%2d%2d", /* ...cr,lf */
-#else
- "%*c%1x%1x%2d%2d%2d%2d%2d%2d", /* stx...cr,lf,etx */
-#endif
- &synch,
- &DoW,
- &pp->hour,
- &pp->minute,
- &pp->second,
- &day,
- &month,
- &pp->year);
-
-
- /*
- Validate received values at least enough to prevent internal
- array-bounds problems, etc.
- */
- if((pp->hour < 0) || (pp->hour > 23) ||
- (pp->minute < 0) || (pp->minute > 59) ||
- (pp->second < 0) || (pp->second > 60) /*Allow for leap seconds.*/ ||
- (day < 1) || (day > 31) ||
- (month < 1) || (month > 12) ||
- (pp->year < 0) || (pp->year > 99)) {
- /* Data out of range. */
- refclock_report(peer, CEVNT_BADREPLY);
- return;
- }
- /*
- some preparations
- */
- pp->day = ymd2yd(pp->year,month,day);
- pp->leap=0;
-
- /* Year-2000 check! */
- /* wrap 2-digit date into 4-digit */
-
- if(pp->year < YEAR_PIVOT) { pp->year += 100; } /* < 98 */
- pp->year += 1900;
-
- /* preparation for timecode ntpq rl command ! */
-
-#if 0
- wsprintf(pp->a_lastcode,
- "STATUS: %1X%1X, DATE: %02d.%02d.%04d TIME: %02d:%02d:%02d",
- synch,
- DoW,
- day,
- month,
- pp->year,
- pp->hour,
- pp->minute,
- pp->second);
-
- pp->lencode = strlen(pp->a_lastcode);
- if ((synch && 0xc) == 0 ){ /* time ok? */
- refclock_report(peer, CEVNT_BADTIME);
- pp->leap = LEAP_NOTINSYNC;
- return;
- }
-#endif
- /*
- * If clock has no valid status then report error and exit
- */
- if ((synch & HOPF_OPMODE) == HOPF_INVALID ){ /* time ok? */
- refclock_report(peer, CEVNT_BADTIME);
- pp->leap = LEAP_NOTINSYNC;
- return;
- }
-
- /*
- * Test if time is running on internal quarz
- * if CLK_FLAG1 is set, sychronize even if no radio operation
- */
-
- if ((synch & HOPF_OPMODE) == HOPF_INTERNAL){
- if ((pp->sloppyclockflag & CLK_FLAG1) == 0) {
- refclock_report(peer, CEVNT_BADTIME);
- pp->leap = LEAP_NOTINSYNC;
- return;
- }
- }
-
-
- if (!refclock_process(pp)) {
- refclock_report(peer, CEVNT_BADTIME);
- return;
- }
- pp->lastref = pp->lastrec;
- refclock_receive(peer);
-
-#if 0
- msyslog(LOG_ERR, " D:%x D:%d D:%d",synch,pp->minute,pp->second);
-#endif
-
- record_clock_stats(&peer->srcadr, pp->a_lastcode);
-
- return;
-}
-
-
-/*
- * hopfserial_poll - called by the transmit procedure
- *
- */
-static void
-hopfserial_poll (
- int unit,
- struct peer *peer
- )
-{
- register struct hopfclock_unit *up;
- struct refclockproc *pp;
- pp = peer->procptr;
-
- up = (struct hopfclock_unit *)pp->unitptr;
-
- pp->polls++;
- up->rpt_next = 1;
-
-#if 0
- record_clock_stats(&peer->srcadr, pp->a_lastcode);
-#endif
-
- return;
-}
-
-#else
-int refclock_hopfser_bs;
-#endif /* REFCLOCK */
OpenPOWER on IntegriCloud