summaryrefslogtreecommitdiff
path: root/ppsthread.h
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2015-03-07 12:28:41 -0500
committerEric S. Raymond <esr@thyrsus.com>2015-03-07 12:28:41 -0500
commit95c343b2b266c17defd8836c8b515848786b755d (patch)
tree171c5506fb42c53e11a88474ae903a086503729b /ppsthread.h
parent2b100a52bfc1b257bfefe2e375b88b6eaef50699 (diff)
downloadgpsd-95c343b2b266c17defd8836c8b515848786b755d.tar.gz
ppsthread.c gets its own header. Another step towards ntplib.
All regression tests pass.
Diffstat (limited to 'ppsthread.h')
-rw-r--r--ppsthread.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/ppsthread.h b/ppsthread.h
new file mode 100644
index 00000000..2a37c052
--- /dev/null
+++ b/ppsthread.h
@@ -0,0 +1,45 @@
+/*
+ * This file is Copyright (c) 2015 by the GPSD project
+ * BSD terms apply: see the file COPYING in the distribution root for details.
+ */
+
+#ifndef PPSTHREAD_H
+#define PPSTHREAD_H
+
+/* use RFC 2782 PPS API */
+/* this needs linux >= 2.6.34 and
+ * CONFIG_PPS=y
+ * CONFIG_PPS_DEBUG=y [optional to kernel log pulses]
+ * CONFIG_PPS_CLIENT_LDISC=y
+ */
+#ifndef S_SPLINT_S
+#if defined(HAVE_SYS_TIMEPPS_H)
+// include unistd.h here as it is missing on older pps-tools releases.
+// 'close' is not defined otherwise.
+#include <unistd.h>
+#include <sys/time.h>
+#include <sys/timepps.h>
+#endif
+#endif /* S_SPLINT_S */
+
+struct pps_thread_t {
+ timestamp_t fixin_real;
+ struct timespec fixin_clock; /* system clock time when last fix received */
+#if defined(HAVE_SYS_TIMEPPS_H)
+ pps_handle_t kernelpps_handle;
+#endif /* defined(HAVE_SYS_TIMEPPS_H) */
+ int chronyfd; /* for talking to chrony */
+ /*@null@*/ char *(*report_hook)(struct gps_device_t *,
+ struct timedelta_t *);
+ /*@null@*/ void (*wrap_hook)(struct gps_device_t *);
+ struct timedelta_t ppsout_last;
+ int ppsout_count;
+};
+
+extern void pps_thread_activate(struct gps_device_t *);
+extern void pps_thread_deactivate(struct gps_device_t *);
+extern void pps_thread_stash_fixtime(struct gps_device_t *,
+ timestamp_t, struct timespec);
+extern int pps_thread_lastpps(struct gps_device_t *, struct timedelta_t *);
+
+#endif /* PPSTHREAD_H */