Annotation of embedaddon/ntp/util/pps-api.c, revision 1.1.1.1
1.1 misho 1: /*
2:
3: Try to run this program to see what the PPS-API finds. You give it the
4: device as argument and you may have to modify the pp.mode = BLA assignment.
5:
6: Poul-Henning
7:
8: */
9:
10: #include <stdio.h>
11: #include <errno.h>
12: #include <fcntl.h>
13: #include <err.h>
14: #include <sys/types.h>
15: #include <time.h>
16: #include <sys/timepps.h>
17: #include <sys/termios.h>
18:
19: #define timespecsub(vvp, uvp) \
20: do { \
21: (vvp)->tv_sec -= (uvp)->tv_sec; \
22: (vvp)->tv_nsec -= (uvp)->tv_nsec; \
23: if ((vvp)->tv_nsec < 0) { \
24: (vvp)->tv_sec--; \
25: (vvp)->tv_nsec += 1000000000; \
26: } \
27: } while (0)
28:
29:
30: void
31: Chew(struct timespec *tsa, struct timespec *tsc, unsigned sa, unsigned sc)
32: {
33: static int idx;
34: struct timespec ts;
35:
36: printf("%d.%09d ", tsa->tv_sec, tsa->tv_nsec);
37: printf("%d.%09d ", tsc->tv_sec, tsc->tv_nsec);
38: printf("%u %u ", sa, sc);
39:
40: ts = *tsc;
41: timespecsub(&ts,tsa);
42: printf("%.9f ", ts.tv_sec + ts.tv_nsec / 1e9);
43: printf("\n");
44: fflush(stdout);
45: }
46:
47: int
48: main(int argc, char **argv)
49: {
50: int fd;
51: pps_info_t pi;
52: pps_params_t pp;
53: pps_handle_t ph;
54: int i, mode;
55: u_int olda, oldc;
56: double d = 0;
57: struct timespec to;
58:
59: if (argc < 2)
60: argv[1] = "/dev/cuaa1";
61: setbuf(stdout, 0);
62: fd = open(argv[1], O_RDONLY);
63: if (fd < 0)
64: err(1, argv[1]);
65: i = time_pps_create(fd, &ph);
66: if (i < 0)
67: err(1, "time_pps_create");
68:
69: i = time_pps_getcap(ph, &mode);
70: if (i < 0)
71: err(1, "time_pps_getcap");
72:
73: pp.mode = PPS_CAPTUREASSERT | PPS_ECHOASSERT;
74: pp.mode = PPS_CAPTUREBOTH;
75: /* pp.mode = PPS_CAPTUREASSERT; */
76:
77: i = time_pps_setparams(ph, &pp);
78: if (i < 0)
79: err(1, "time_pps_setparams");
80:
81: while (1) {
82: to.tv_nsec = 0;
83: to.tv_sec = 0;
84: i = time_pps_fetch(ph, PPS_TSFMT_TSPEC, &pi, &to);
85: if (i < 0)
86: err(1, "time_pps_fetch");
87: if (olda == pi.assert_sequence &&
88: oldc == pi.clear_sequence) {
89: usleep(10000);
90: continue;
91: }
92:
93: Chew(&pi.assert_timestamp, &pi.clear_timestamp,
94: pi.assert_sequence, pi.clear_sequence);
95: olda = pi.assert_sequence;
96: oldc = pi.clear_sequence;
97: }
98:
99: return(0);
100: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>