⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 refclock_parse.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Meinberg DCF PZF535/TCXO (FM/PZF) receiver */#define	DCFPZF535_ROOTDELAY	0.0#define	DCFPZF535_BASEDELAY	0.001968  /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */#define	DCFPZF535_DESCRIPTION	"Meinberg DCF PZF 535/509 / TCXO"#define DCFPZF535_MAXUNSYNC     60*60*12           /* only trust clock for 12 hours						    * @ 5e-8df/f we have accumulated						    * at most 2.16 ms (thus we move to						    * NTP synchronisation */#define DCFPZF535_SPEED		MBG_SPEED#define DCFPZF535_CFLAG         MBG_CFLAG#define DCFPZF535_IFLAG         MBG_IFLAG#define DCFPZF535_OFLAG         MBG_OFLAG#define DCFPZF535_LFLAG         MBG_LFLAG#define DCFPZF535_SAMPLES	       5#define DCFPZF535_KEEP		       3#define DCFPZF535_FORMAT	"Meinberg Standard"/* * Meinberg DCF PZF535/OCXO receiver */#define	DCFPZF535OCXO_ROOTDELAY	0.0#define	DCFPZF535OCXO_BASEDELAY	0.001968 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */#define	DCFPZF535OCXO_DESCRIPTION "Meinberg DCF PZF 535/509 / OCXO"#define DCFPZF535OCXO_MAXUNSYNC     60*60*96       /* only trust clock for 4 days						    * @ 5e-9df/f we have accumulated						    * at most an error of 1.73 ms						    * (thus we move to NTP synchronisation) */#define DCFPZF535OCXO_SPEED	    MBG_SPEED#define DCFPZF535OCXO_CFLAG         MBG_CFLAG#define DCFPZF535OCXO_IFLAG         MBG_IFLAG#define DCFPZF535OCXO_OFLAG         MBG_OFLAG#define DCFPZF535OCXO_LFLAG         MBG_LFLAG#define DCFPZF535OCXO_SAMPLES		   5#define DCFPZF535OCXO_KEEP	           3#define DCFPZF535OCXO_FORMAT	    "Meinberg Standard"/* * Meinberg GPS16X receiver */static	void	gps16x_message	 P((struct parseunit *, parsetime_t *));static  int     gps16x_poll_init P((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_MAXUNSYNC        60*60*96       /* only trust clock for 4 days						* @ 5e-9df/f we have accumulated						* at most an error of 1.73 ms						* (thus we move to NTP synchronisation) */#define GPS16X_SPEED		B19200#define GPS16X_CFLAG            (CS8|CREAD|CLOCAL|HUPCL)#define GPS16X_IFLAG            (IGNBRK|IGNPAR)#define GPS16X_OFLAG            MBG_OFLAG#define GPS16X_LFLAG            MBG_LFLAG#define GPS16X_POLLRATE	6#define GPS16X_POLLCMD	""#define GPS16X_CMDSIZE	0static poll_info_t gps16x_pollinfo = { GPS16X_POLLRATE, GPS16X_POLLCMD, GPS16X_CMDSIZE };#define GPS16X_INIT		gps16x_poll_init#define GPS16X_POLL	        0#define GPS16X_END		0#define GPS16X_DATA		((void *)(&gps16x_pollinfo))#define GPS16X_MESSAGE		gps16x_message#define GPS16X_ID		GPS_ID#define GPS16X_FORMAT		"Meinberg GPS Extended"#define GPS16X_SAMPLES		5#define GPS16X_KEEP		3/* * ELV DCF7000 Wallclock-Receiver/Switching Clock (Kit) * * This is really not the hottest clock - but before you have nothing ... */#define DCF7000_ROOTDELAY	0.0 /* 0 */#define DCF7000_BASEDELAY	0.405 /* slow blow */#define DCF7000_DESCRIPTION	"ELV DCF7000"#define DCF7000_MAXUNSYNC	(60*5) /* sorry - but it just was not build as a clock */#define DCF7000_SPEED		(B9600)#define DCF7000_CFLAG           (CS8|CREAD|PARENB|PARODD|CLOCAL|HUPCL)#define DCF7000_IFLAG		(IGNBRK)#define DCF7000_OFLAG		0#define DCF7000_LFLAG		0#define DCF7000_SAMPLES		5#define DCF7000_KEEP		3#define DCF7000_FORMAT		"ELV DCF7000"/* * Schmid DCF Receiver Kit * * When the WSDCF clock is operating optimally we want the primary clock * distance to come out at 300 ms.  Thus, peer.distance in the WSDCF peer * structure is set to 290 ms and we compute delays which are at least * 10 ms long.  The following are 290 ms and 10 ms expressed in u_fp format */#define WS_POLLRATE	1	/* every second - watch interdependency with poll routine */#define WS_POLLCMD	"\163"#define WS_CMDSIZE	1static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE };#define WSDCF_INIT		poll_init#define WSDCF_POLL		poll_dpoll#define WSDCF_END		0#define WSDCF_DATA		((void *)(&wsdcf_pollinfo))#define	WSDCF_ROOTDELAY		0.0	/* 0 */#define	WSDCF_BASEDELAY	 	0.010	/*  ~  10ms */#define WSDCF_DESCRIPTION	"WS/DCF Receiver"#define WSDCF_FORMAT		"Schmid"#define WSDCF_MAXUNSYNC		(60*60)	/* assume this beast hold at 1 h better than 2 ms XXX-must verify */#define WSDCF_SPEED		(B1200)#define WSDCF_CFLAG		(CS8|CREAD|CLOCAL)#define WSDCF_IFLAG		0#define WSDCF_OFLAG		0#define WSDCF_LFLAG		0#define WSDCF_SAMPLES		5#define WSDCF_KEEP		3/* * RAW DCF77 - input of DCF marks via RS232 - many variants */#define RAWDCF_FLAGS		0#define RAWDCF_ROOTDELAY	0.0 /* 0 */#define RAWDCF_BASEDELAY	0.258#define RAWDCF_FORMAT		"RAW DCF77 Timecode"#define RAWDCF_MAXUNSYNC	(0) /* sorry - its a true receiver - no signal - no time */#define RAWDCF_SPEED		(B50)#ifdef NO_PARENB_IGNPAR /* Was: defined(SYS_IRIX4) || defined(SYS_IRIX5) *//* somehow doesn't grok PARENB & IGNPAR (mj) */# define RAWDCF_CFLAG            (CS8|CREAD|CLOCAL)#else# define RAWDCF_CFLAG            (CS8|CREAD|CLOCAL|PARENB)#endif#ifdef RAWDCF_NO_IGNPAR /* Was: defined(SYS_LINUX) && defined(CLOCK_RAWDCF) */# define RAWDCF_IFLAG		0#else# define RAWDCF_IFLAG		(IGNPAR)#endif#define RAWDCF_OFLAG		0#define RAWDCF_LFLAG		0#define RAWDCF_SAMPLES		20#define RAWDCF_KEEP		12#define RAWDCF_INIT		0/* * RAW DCF variants *//* * Conrad receiver * * simplest (cheapest) DCF clock - e. g. DCF77 receiver by Conrad * (~40DM - roughly $30 ) followed by a level converter for RS232 */#define CONRAD_BASEDELAY	0.292 /* Conrad receiver @ 50 Baud on a Sun */#define CONRAD_DESCRIPTION	"RAW DCF77 CODE (Conrad DCF77 receiver module)"/* * TimeBrick receiver */#define TIMEBRICK_BASEDELAY	0.210 /* TimeBrick @ 50 Baud on a Sun */#define TIMEBRICK_DESCRIPTION	"RAW DCF77 CODE (TimeBrick)"/* * IGEL:clock receiver */#define IGELCLOCK_BASEDELAY	0.258 /* IGEL:clock receiver */#define IGELCLOCK_DESCRIPTION	"RAW DCF77 CODE (IGEL:clock)"#define IGELCLOCK_SPEED		(B1200)#define IGELCLOCK_CFLAG		(CS8|CREAD|HUPCL|CLOCAL)/* * RAWDCF receivers that need to be powered from DTR * (like Expert mouse clock) */static	int	rawdcf_init_1	P((struct parseunit *));#define RAWDCFDTRSET_DESCRIPTION	"RAW DCF77 CODE (DTR SET/RTS CLR)"#define RAWDCFDTRSET_INIT 		rawdcf_init_1/* * RAWDCF receivers that need to be powered from * DTR CLR and RTS SET */static	int	rawdcf_init_2	P((struct parseunit *));#define RAWDCFDTRCLRRTSSET_DESCRIPTION	"RAW DCF77 CODE (DTR CLR/RTS SET)"#define RAWDCFDTRCLRRTSSET_INIT	rawdcf_init_2/* * Trimble GPS receivers (TAIP and TSIP protocols) */#ifndef TRIM_POLLRATE#define TRIM_POLLRATE	0	/* only true direct polling */#endif#define TRIM_TAIPPOLLCMD	">SRM;FR_FLAG=F;EC_FLAG=F<>QTM<"#define TRIM_TAIPCMDSIZE	(sizeof(TRIM_TAIPPOLLCMD)-1)static poll_info_t trimbletaip_pollinfo = { TRIM_POLLRATE, TRIM_TAIPPOLLCMD, TRIM_TAIPCMDSIZE };static	int	trimbletaip_init	P((struct parseunit *));static	void	trimbletaip_event	P((struct parseunit *, int));/* query time & UTC correction data */static char tsipquery[] = { DLE, 0x21, DLE, ETX, DLE, 0x2F, DLE, ETX };static poll_info_t trimbletsip_pollinfo = { TRIM_POLLRATE, tsipquery, sizeof(tsipquery) };static	int	trimbletsip_init	P((struct parseunit *));static	void	trimbletsip_end   	P((struct parseunit *));static	void	trimbletsip_message	P((struct parseunit *, parsetime_t *));static	void	trimbletsip_event	P((struct parseunit *, int));#define TRIMBLETSIP_IDLE_TIME	    (300) /* 5 minutes silence at most */#define TRIMBLE_RESET_HOLDOFF       TRIMBLETSIP_IDLE_TIME#define TRIMBLETAIP_SPEED	    (B4800)#define TRIMBLETAIP_CFLAG           (CS8|CREAD|CLOCAL)#define TRIMBLETAIP_IFLAG           (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)#define TRIMBLETAIP_OFLAG           (OPOST|ONLCR)#define TRIMBLETAIP_LFLAG           (0)#define TRIMBLETSIP_SPEED	    (B9600)#define TRIMBLETSIP_CFLAG           (CS8|CLOCAL|CREAD|PARENB|PARODD)#define TRIMBLETSIP_IFLAG           (IGNBRK)#define TRIMBLETSIP_OFLAG           (0)#define TRIMBLETSIP_LFLAG           (ICANON)#define TRIMBLETSIP_SAMPLES	    5#define TRIMBLETSIP_KEEP	    3#define TRIMBLETAIP_SAMPLES	    5#define TRIMBLETAIP_KEEP	    3#define TRIMBLETAIP_FLAGS	    (PARSE_F_PPSONSECOND)#define TRIMBLETSIP_FLAGS	    (TRIMBLETAIP_FLAGS)#define TRIMBLETAIP_POLL	    poll_dpoll#define TRIMBLETSIP_POLL	    poll_dpoll#define TRIMBLETAIP_INIT	    trimbletaip_init#define TRIMBLETSIP_INIT	    trimbletsip_init#define TRIMBLETAIP_EVENT	    trimbletaip_event   #define TRIMBLETSIP_EVENT	    trimbletsip_event   #define TRIMBLETSIP_MESSAGE	    trimbletsip_message#define TRIMBLETAIP_END		    0#define TRIMBLETSIP_END		    trimbletsip_end#define TRIMBLETAIP_DATA	    ((void *)(&trimbletaip_pollinfo))#define TRIMBLETSIP_DATA	    ((void *)(&trimbletsip_pollinfo))#define TRIMBLETAIP_ID		    GPS_ID#define TRIMBLETSIP_ID		    GPS_ID#define TRIMBLETAIP_FORMAT	    "Trimble TAIP"#define TRIMBLETSIP_FORMAT	    "Trimble TSIP"#define TRIMBLETAIP_ROOTDELAY        0x0#define TRIMBLETSIP_ROOTDELAY        0x0#define TRIMBLETAIP_BASEDELAY        0.0#define TRIMBLETSIP_BASEDELAY        0.020	/* GPS time message latency */#define TRIMBLETAIP_DESCRIPTION      "Trimble GPS (TAIP) receiver"#define TRIMBLETSIP_DESCRIPTION      "Trimble GPS (TSIP) receiver"#define TRIMBLETAIP_MAXUNSYNC        0#define TRIMBLETSIP_MAXUNSYNC        0#define TRIMBLETAIP_EOL		    '<'/* * RadioCode Clocks RCC 800 receiver */#define RCC_POLLRATE   0       /* only true direct polling */#define RCC_POLLCMD    "\r"#define RCC_CMDSIZE    1static poll_info_t rcc8000_pollinfo = { RCC_POLLRATE, RCC_POLLCMD, RCC_CMDSIZE };#define RCC8000_FLAGS		0#define RCC8000_POLL            poll_dpoll#define RCC8000_INIT            poll_init#define RCC8000_END             0#define RCC8000_DATA            ((void *)(&rcc8000_pollinfo))#define RCC8000_ROOTDELAY       0.0#define RCC8000_BASEDELAY       0.0#define RCC8000_ID              "MSF"#define RCC8000_DESCRIPTION     "RCC 8000 MSF Receiver"#define RCC8000_FORMAT          "Radiocode RCC8000"#define RCC8000_MAXUNSYNC       (60*60) /* should be ok for an hour */#define RCC8000_SPEED		(B2400)#define RCC8000_CFLAG           (CS8|CREAD|CLOCAL)#define RCC8000_IFLAG           (IGNBRK|IGNPAR)#define RCC8000_OFLAG           0#define RCC8000_LFLAG           0#define RCC8000_SAMPLES         5#define RCC8000_KEEP	        3/* * Hopf Radio clock 6021 Format  * */#define HOPF6021_ROOTDELAY	0.0#define HOPF6021_BASEDELAY	0.0#define HOPF6021_DESCRIPTION	"HOPF 6021"#define HOPF6021_FORMAT         "hopf Funkuhr 6021"#define HOPF6021_MAXUNSYNC	(60*60)  /* should be ok for an hour */#define HOPF6021_SPEED         (B9600)#define HOPF6021_CFLAG          (CS8|CREAD|CLOCAL)#define HOPF6021_IFLAG		(IGNBRK|ISTRIP)#define HOPF6021_OFLAG		0#define HOPF6021_LFLAG		0#define HOPF6021_FLAGS          0#define HOPF6021_SAMPLES        5#define HOPF6021_KEEP	        3/* * Diem's Computime Radio Clock Receiver */#define COMPUTIME_FLAGS       0#define COMPUTIME_ROOTDELAY   0.0#define COMPUTIME_BASEDELAY   0.0#define COMPUTIME_ID          DCF_ID#define COMPUTIME_DESCRIPTION "Diem's Computime receiver"#define COMPUTIME_FORMAT      "Diem's Computime Radio Clock"#define COMPUTIME_TYPE        DCF_TYPE#define COMPUTIME_MAXUNSYNC   (60*60)       /* only trust clock for 1 hour */#define COMPUTIME_SPEED       (B9600)#define COMPUTIME_CFLAG       (CSTOPB|CS7|CREAD|CLOCAL)#define COMPUTIME_IFLAG       (IGNBRK|IGNPAR|ISTRIP)#define COMPUTIME_OFLAG       0#define COMPUTIME_LFLAG       0#define COMPUTIME_SAMPLES     5#define COMPUTIME_KEEP        3/* * Varitext Radio Clock Receiver */#define VARITEXT_FLAGS       0#define VARITEXT_ROOTDELAY   0.0#define VARITEXT_BASEDELAY   0.0#define VARITEXT_ID          "MSF"#define VARITEXT_DESCRIPTION "Varitext receiver"#define VARITEXT_FORMAT      "Varitext Radio Clock"#define VARITEXT_TYPE        DCF_TYPE#define VARITEXT_MAXUNSYNC   (60*60)       /* only trust clock for 1 hour */#define VARITEXT_SPEED       (B9600)#define VARITEXT_CFLAG       (CS7|CREAD|CLOCAL|PARENB|PARODD)#define VARITEXT_IFLAG       (IGNPAR|IGNBRK|INPCK) /*|ISTRIP)*/#define VARITEXT_OFLAG       0#define VARITEXT_LFLAG       0#define VARITEXT_SAMPLES     32#define VARITEXT_KEEP        20static struct parse_clockinfo{	u_long  cl_flags;		/* operation flags (io modes) */  void  (*cl_poll)    P((struct parseunit *));			/* active poll routine */  int   (*cl_init)    P((struct parseunit *));			/* active poll init routine */  void  (*cl_event)   P((struct parseunit *, int));		/* special event handling (e.g. reset clock) */  void  (*cl_end)     P((struct parseunit *));			/* active poll end routine */  void  (*cl_message) P((struct parseunit *, parsetime_t *));	/* process a lower layer message */	void   *cl_data;		/* local data area for "poll" mechanism */	double    cl_rootdelay;		/* rootdelay */	double    cl_basedelay;		/* current offset by which the RS232				time code is delayed from the actual time */	const char *cl_id;		/* ID code */	const char *cl_description;		/* device name */	const char *cl_format;		/* fixed format */	u_char  cl_type;		/* clock type (ntp control) */	u_long  cl_maxunsync;		/* time to trust oscillator after losing synch */	u_long  cl_speed;		/* terminal input & output baudrate */	u_long  cl_cflag;             /* terminal control flags */	u_long  cl_iflag;             /* terminal input flags */	u_long  cl_oflag;             /* terminal output flags */	u_long  cl_lflag;             /* terminal local flags */	u_long  cl_samples;	      /* samples for median filter */	u_long  cl_keep;              /* samples for median filter to keep */} parse_clockinfo[] ={	{				/* mode 0 */		MBG_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		DCFPZF535_ROOTDELAY,		DCFPZF535_BASEDELAY,		DCF_P_ID,		DCFPZF535_DESCRIPTION,		DCFPZF535_FORMAT,		DCF_TYPE,		DCFPZF535_MAXUNSYNC,		DCFPZF535_SPEED,		DCFPZF535_CFLAG,		DCFPZF535_IFLAG,		DCFPZF535_OFLAG,		DCFPZF535_LFLAG,		DCFPZF535_SAMPLES,		DCFPZF535_KEEP	},	{				/* mode 1 */		MBG_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		DCFPZF535OCXO_ROOTDELAY,		DCFPZF535OCXO_BASEDELAY,		DCF_P_ID,		DCFPZF535OCXO_DESCRIPTION,		DCFPZF535OCXO_FORMAT,		DCF_TYPE,		DCFPZF535OCXO_MAXUNSYNC,		DCFPZF535OCXO_SPEED,		DCFPZF535OCXO_CFLAG,		DCFPZF535OCXO_IFLAG,		DCFPZF535OCXO_OFLAG,		DCFPZF535OCXO_LFLAG,		DCFPZF535OCXO_SAMPLES,		DCFPZF535OCXO_KEEP	},	{				/* mode 2 */		MBG_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		DCFUA31_ROOTDELAY,		DCFUA31_BASEDELAY,		DCF_A_ID,		DCFUA31_DESCRIPTION,		DCFUA31_FORMAT,		DCF_TYPE,		DCFUA31_MAXUNSYNC,		DCFUA31_SPEED,		DCFUA31_CFLAG,		DCFUA31_IFLAG,		DCFUA31_OFLAG,		DCFUA31_LFLAG,		DCFUA31_SAMPLES,		DCFUA31_KEEP	},	{				/* mode 3 */		MBG_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		DCF7000_ROOTDELAY,		DCF7000_BASEDELAY,		DCF_A_ID,		DCF7000_DESCRIPTION,		DCF7000_FORMAT,		DCF_TYPE,		DCF7000_MAXUNSYNC,		DCF7000_SPEED,		DCF7000_CFLAG,		DCF7000_IFLAG,		DCF7000_OFLAG,		DCF7000_LFLAG,		DCF7000_SAMPLES,		DCF7000_KEEP	},	{				/* mode 4 */		NO_CL_FLAGS,		WSDCF_POLL,		WSDCF_INIT,		NO_EVENT,		WSDCF_END,		NO_MESSAGE,		WSDCF_DATA,		WSDCF_ROOTDELAY,		WSDCF_BASEDELAY,		DCF_A_ID,		WSDCF_DESCRIPTION,		WSDCF_FORMAT,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -