timepps.h

来自「基于组件方式开发操作系统的OSKIT源代码」· C头文件 代码 · 共 168 行

H
168
字号
/* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp * ---------------------------------------------------------------------------- * * $Id: timepps.h,v 1.4.2.2 1999/03/30 11:49:29 phk Exp $ * * The is a FreeBSD protype version of the "draft-mogul-pps-api-02.txt"  * specification for Pulse Per Second timing interfaces.   * */#ifndef _SYS_TIMEPPS_H_#define _SYS_TIMEPPS_H_#include <sys/ioccom.h>typedef int pps_handle_t;	typedef unsigned pps_seq_t;typedef struct ntp_fp {	unsigned int	integral;	unsigned int	fractional;} ntp_fp_t;typedef union pps_timeu {	struct timespec	tspec;	ntp_fp_t	ntpfp;	unsigned long	longpair[2];} pps_timeu_t;typedef struct {	pps_seq_t	assert_sequence;	/* assert event seq # */	pps_seq_t	clear_sequence;		/* clear event seq # */	pps_timeu_t	assert_tu;	pps_timeu_t	clear_tu;	int		current_mode;		/* current mode bits */} pps_info_t;#define assert_timestamp        assert_tu.tspec#define clear_timestamp         clear_tu.tspec#define assert_timestamp_ntpfp  assert_tu.ntpfp#define clear_timestamp_ntpfp   clear_tu.ntpfptypedef struct {	int mode;				/* mode bits */	pps_timeu_t assert_off_tu;	pps_timeu_t clear_off_tu;} pps_params_t;#define assert_offset   assert_off_tu.tspec#define clear_offset    clear_off_tu.tspec#define assert_offset_ntpfp     assert_off_tu.ntpfp#define clear_offset_ntpfp      clear_off_tu.ntpfp#define PPS_CAPTUREASSERT	0x01#define PPS_CAPTURECLEAR	0x02#define PPS_CAPTUREBOTH		0x03#define PPS_OFFSETASSERT	0x10#define PPS_OFFSETCLEAR		0x20#define PPS_HARDPPSONASSERT	0x04#define PPS_HARDPPSONCLEAR	0x08#define PPS_ECHOASSERT		0x40#define PPS_ECHOCLEAR		0x80#define PPS_CANWAIT		0x100#define PPS_TSFMT_TSPEC		0x1000#define PPS_TSFMT_NTPFP		0x2000struct pps_wait_args {	struct timespec	timeout;	pps_info_t	pps_info_buf;};#define PPS_IOC_CREATE		_IO('1', 1)#define PPS_IOC_DESTROY		_IO('1', 2)#define PPS_IOC_SETPARAMS	_IOW('1', 3, pps_params_t)#define PPS_IOC_GETPARAMS	_IOR('1', 4, pps_params_t)#define PPS_IOC_GETCAP		_IOR('1', 5, int)#define PPS_IOC_FETCH		_IOWR('1', 6, pps_info_t)#define PPS_IOC_WAIT		_IOWR('1', 6, struct pps_wait_args)#ifdef KERNELstruct pps_state {	pps_params_t	ppsparam;	pps_info_t	ppsinfo;	int		ppscap;	struct timecounter *ppstc;	unsigned	ppscount[3];};void pps_event __P((struct pps_state *pps, struct timecounter *tc, unsigned count, int event));void pps_init __P((struct pps_state *pps));int pps_ioctl __P((u_long cmd, caddr_t data, struct pps_state *pps));void hardpps __P((struct timespec *tsp, long nsec));#else /* !KERNEL */static __inline inttime_pps_create(int filedes, pps_handle_t *handle){	int error;	*handle = -1;	error = ioctl(filedes, PPS_IOC_CREATE, 0);	if (error < 0) 		return (-1);	*handle = filedes;	return (0);}static __inline inttime_pps_destroy(pps_handle_t handle){	return (ioctl(handle, PPS_IOC_DESTROY, 0));}static __inline inttime_pps_setparams(pps_handle_t handle, const pps_params_t *ppsparams){	return (ioctl(handle, PPS_IOC_SETPARAMS, ppsparams));}static __inline inttime_pps_getparams(pps_handle_t handle, pps_params_t *ppsparams){	return (ioctl(handle, PPS_IOC_GETPARAMS, ppsparams));}static __inline int time_pps_getcap(pps_handle_t handle, int *mode){	return (ioctl(handle, PPS_IOC_GETCAP, mode));}static __inline inttime_pps_fetch(pps_handle_t handle, pps_info_t *ppsinfobuf){	return (ioctl(handle, PPS_IOC_FETCH, ppsinfobuf));}static __inline inttime_pps_wait(pps_handle_t handle, const struct timespec *timeout,        pps_info_t *ppsinfobuf){	int error;	struct pps_wait_args arg;	arg.timeout = *timeout;	error = ioctl(handle, PPS_IOC_WAIT, &arg);	*ppsinfobuf = arg.pps_info_buf;	return (error);}#endif /* !KERNEL */#endif /* _SYS_TIMEPPS_H_ */

⌨️ 快捷键说明

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