summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-02-13 06:50:36 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-02-13 06:50:36 +0000
commit5b769ec6080245a5fcb12707a30ecc0a3da163d3 (patch)
treeefb6b3453577593e9714ec080d9d7d7c48d018d2
parent4955aa9e9788d4355fcd74a9aee6629cac413d07 (diff)
downloadgpsd-5b769ec6080245a5fcb12707a30ecc0a3da163d3.tar.gz
Integrate gpsfake.
-rw-r--r--Makefile.am10
-rwxr-xr-xgps.py5
-rw-r--r--gpsd.spec.in9
-rw-r--r--gpsd.xml2
-rwxr-xr-xgpsfake61
-rw-r--r--gpsprobe.xml3
-rw-r--r--gpsprof.xml2
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
diff --git a/gps.py b/gps.py
index 728b27d2..35d405a3 100755
--- a/gps.py
+++ b/gps.py
@@ -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.
diff --git a/gpsd.xml b/gpsd.xml
index e0eb675d..859e84c7 100644
--- a/gpsd.xml
+++ b/gpsd.xml
@@ -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>