diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2005-02-13 06:50:36 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2005-02-13 06:50:36 +0000 |
commit | 5b769ec6080245a5fcb12707a30ecc0a3da163d3 (patch) | |
tree | efb6b3453577593e9714ec080d9d7d7c48d018d2 | |
parent | 4955aa9e9788d4355fcd74a9aee6629cac413d07 (diff) | |
download | gpsd-5b769ec6080245a5fcb12707a30ecc0a3da163d3.tar.gz |
Integrate gpsfake.
-rw-r--r-- | Makefile.am | 10 | ||||
-rwxr-xr-x | gps.py | 5 | ||||
-rw-r--r-- | gpsd.spec.in | 9 | ||||
-rw-r--r-- | gpsd.xml | 2 | ||||
-rwxr-xr-x | gpsfake | 61 | ||||
-rw-r--r-- | gpsprobe.xml | 3 | ||||
-rw-r--r-- | gpsprof.xml | 2 |
7 files changed, 85 insertions, 7 deletions
diff --git a/Makefile.am b/Makefile.am index 9ff8d187..9e3024b6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,7 +10,7 @@ endif XMLTO = xmlto bin_PROGRAMS = $(BUILD_PROGS) -bin_SCRIPTS = gpsprobe gpsprof +bin_SCRIPTS = gpsprobe gpsprof gpsfake # # Build xgps @@ -67,7 +67,8 @@ man_MANS = \ libgps.3 \ libgpsd.3 \ gpsprobe.1 \ - gpsprof.1 + gpsprof.1 \ + gpsfake.1 gpsd.1 gps.1 xgpsspeed.1: gpsd.xml $(XMLTO) man gpsd.xml @@ -84,6 +85,9 @@ gpsprobe.1: gpsprobe.xml gpsprof.1: gpsprof.xml $(XMLTO) man gpsprof.xml +gpsfake.1: gpsfake.xml + $(XMLTO) man gpsfake.xml + # # Do a release with a tar.gz and a tar.bz2 # @@ -112,6 +116,7 @@ EXTRA_DIST = \ libgps.xml \ gpsprobe.xml \ gpsprof.xml \ + gpsfake.xml \ $(man_MANS) \ xgps.ad \ xgpsspeed.ad \ @@ -121,6 +126,7 @@ EXTRA_DIST = \ gpsd.py \ gpsprobe \ gpsprof \ + gpsfake \ logextract # This is not distributed @@ -341,6 +341,11 @@ class SiRF: return SiRF.transport("".join(switcher)) to_NMEA = staticmethod(to_NMEA) + def reset(): + "Generate a GPS reset command." + return SiRF.transport("\x85\x00\x00\x00\x00\x00\x00\x00\x00") + reset = staticmethod(reset) + # EarthDistance code swiped from Kismet and corrected # (As yet, this stuff is not in the libgps C library.) diff --git a/gpsd.spec.in b/gpsd.spec.in index 26fe0940..b8a3ec26 100644 --- a/gpsd.spec.in +++ b/gpsd.spec.in @@ -64,14 +64,15 @@ cp .libs/libgps.so.%{SO3VERSION} "$RPM_BUILD_ROOT"%{_libdir} ln -f "$RPM_BUILD_ROOT"%{_libdir}/libgps.so.%{SO3VERSION} "$RPM_BUILD_ROOT"%{_libdir}/libgps.so.%{SO1VERSION} ln -f "$RPM_BUILD_ROOT"%{_libdir}/libgps.so.%{SO3VERSION} "$RPM_BUILD_ROOT"%{_libdir}/libgps.so mkdir -p "$RPM_BUILD_ROOT"%{_mandir}/man3/ -cp libgps.3 "$RPM_BUILD_ROOT"%{_mandir}/man3/ -cp libgpsd.3 "$RPM_BUILD_ROOT"%{_mandir}/man3/ +cp libgps.3 libgpsd.3 "$RPM_BUILD_ROOT"%{_mandir}/man3/ +cp gpsfake.1 "$RPM_BUILD_ROOT"%{_mandir}/man1/ mkdir -p "$RPM_BUILD_ROOT"%{_includedir} cp gpsd.h "$RPM_BUILD_ROOT"%{_includedir} cp gps.h "$RPM_BUILD_ROOT"%{_includedir} PYVERSION=`python -c "import sys; print sys.version[:3]"` mkdir -p "$RPM_BUILD_ROOT"%{_libdir}/python${PYVERSION}/site-packages cp gps.py gpsd.py "$RPM_BUILD_ROOT"%{_libdir}/python${PYVERSION}/site-packages +cp gpsfake "$RPM_BUILD_ROOT"%{_bindir} mkdir -p "$RPM_BUILD_ROOT"%{_libdir}/X11/app-defaults/ cp xgps.ad "$RPM_BUILD_ROOT"%{_libdir}/X11/app-defaults/xgps cp xgpsspeed.ad "$RPM_BUILD_ROOT"%{_libdir}/X11/app-defaults/xgpsspeed @@ -117,13 +118,15 @@ if [ -d /etc/udev/rules.d/ ]; then rm /etc/udev/rules.d/80-gpsd.rules; fi %{_libdir}/libgps.so %{_includedir}/gps.h %{_includedir}/gpsd.h +%{_mandir}/man1/gpsfake.1* +%attr(755, root, root) %{_bindir}/gpsfake %{_libdir}/python*/site-packages/gps.py* %{_libdir}/python*/site-packages/gpsd.py* %changelog * Fri Feb 11 2005 Eric S. Raymond <esr@snark.thyrsus.com> - @VERSION@-1 - Fixed core-dump bug in processing of the GLL variant that does not - include an FAA Mode Indicator. + include an FAA Mode Indicator. Added gpsfake test harness. * Thu Feb 10 2005 Eric S. Raymond <esr@snark.thyrsus.com> - 2.11-1 - Added gpsprof and the capability to generate GPS latency profiles. @@ -389,6 +389,8 @@ NMEA</ulink>.</para> <citerefentry><refentrytitle>libgps</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>libgpsd</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>gpsprobe</refentrytitle><manvolnum>1</manvolnum></citerefentry> +<citerefentry><refentrytitle>gpsprof</refentrytitle><manvolnum>1</manvolnum></citerefentry> +<citerefentry><refentrytitle>gpsfake</refentrytitle><manvolnum>1</manvolnum></citerefentry> </para> </refsect1> diff --git a/gpsfake b/gpsfake new file mode 100755 index 00000000..92d5ea3e --- /dev/null +++ b/gpsfake @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# +# gpsfake -- test harness for gpsd +# +# Simulates a GPS, playing back an NMEA logfile + +import sys, os, time, signal, pty, getopt, tempfile, termios + +(options, arguments) = getopt.getopt(sys.argv[1:], "i:hn") +interval = 1 +spawn = True +for (switch, val) in options: + if (switch == '-i'): + interval = int(val) + elif (switch == '-n'): + spawn = False + elif (switch == '-h'): + sys.stderr.write("usage: gpsfake [-h] [-n] [-i interval]\n") +logfile = arguments[0] + +try: + (master_fd, slave_fd) = pty.openpty() +except: + sys.stderr.write("gpsfake: can't open pty.\n") + sys.exit(1) +slave = os.ttyname(slave_fd) + +if not spawn: + sys.stderr.write("gpsfake: slave tty is %s\n" % slave) +elif os.system("gpsd -P /tmp/gpsfake%d -p %s" % (os.getpid(), slave)): + sys.stderr.write("gpsfake: gpsd launch failed.\n") +else: + sys.stderr.write("gpsfake: gpsd launch OK.\n") + fp = open("/tmp/gpsfake%s" % os.getpid()) + pid = int(fp.read()) + fp.close() + os.remove("/tmp/gpsfake%s" % os.getpid()) + +try: + logfp = open(logfile, "r") + lines = logfp.readlines() + logfp.close() + + ttyfp = open(slave, "rw") + raw = termios.tcgetattr(ttyfp.fileno()) + raw[0] = 0 # iflag + raw[1] = termios.ONLCR # oflag + raw[2] &= ~(termios.PARENB | termios.CRTSCTS) # cflag + raw[2] |= (termios.CSIZE & termios.CS8) # cflag + raw[2] |= termios.CREAD | termios.CLOCAL # cflag + raw[3] = 0 # lflag + raw[4] = raw[5] = termios.B4800 + termios.tcsetattr(ttyfp.fileno(), termios.TCSANOW, raw) + + i = 0; + while True: + time.sleep(interval) + os.write(master_fd, lines[i % len(lines)]) + i += 1 +finally: + os.kill(pid, signal.SIGTERM) diff --git a/gpsprobe.xml b/gpsprobe.xml index a6d2b719..a1971f6b 100644 --- a/gpsprobe.xml +++ b/gpsprobe.xml @@ -92,6 +92,7 @@ seconds, kill the program and restart.</para> <citerefentry><refentrytitle>libgps</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>libgpsd</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>gpsprof</refentrytitle><manvolnum>1</manvolnum></citerefentry> +<citerefentry><refentrytitle>gpsfake</refentrytitle><manvolnum>1</manvolnum></citerefentry> <citerefentry><refentrytitle>gnuplot</refentrytitle><manvolnum>1</manvolnum></citerefentry> </para> </refsect1> @@ -99,7 +100,7 @@ seconds, kill the program and restart.</para> <refsect1 id='maintainer'><title>AUTHOR</title> <para>Eric S. Raymond <email>esr@thyrsus.com</email>. There is a -project page <ulink +project page for <application>gpsd</application> <ulink url="http://gpsd.berlios.de/">here</ulink>.</para> </refsect1> diff --git a/gpsprof.xml b/gpsprof.xml index df29d30c..113e3e0b 100644 --- a/gpsprof.xml +++ b/gpsprof.xml @@ -158,7 +158,7 @@ Python interpreter's decode time. A C client would be faster.</para> <refsect1 id='maintainer'><title>AUTHOR</title> <para>Eric S. Raymond <email>esr@thyrsus.com</email>. There is a -project page <ulink +project page for <application>gpsd</application> <ulink url="http://gpsd.berlios.de/">here</ulink>.</para> </refsect1> |