summaryrefslogtreecommitdiff
path: root/man/gpsfake.xml
diff options
context:
space:
mode:
Diffstat (limited to 'man/gpsfake.xml')
-rw-r--r--man/gpsfake.xml264
1 files changed, 264 insertions, 0 deletions
diff --git a/man/gpsfake.xml b/man/gpsfake.xml
new file mode 100644
index 00000000..e8331d47
--- /dev/null
+++ b/man/gpsfake.xml
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+This file is Copyright (c) 2010 by the GPSD project
+SPDX-License-Identifier: BSD-2-clause
+-->
+<!DOCTYPE refentry PUBLIC
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<refentry id='gpsfake.1'>
+<refentryinfo><date>12 Feb 2005</date></refentryinfo>
+<refmeta>
+<refentrytitle>gpsfake</refentrytitle>
+<manvolnum>1</manvolnum>
+<refmiscinfo class="source">The GPSD Project</refmiscinfo>
+<refmiscinfo class="manual">GPSD Documentation</refmiscinfo>
+</refmeta>
+<refnamediv id='name'>
+<refname>gpsfake</refname>
+<refpurpose>test harness for gpsd, simulating a GPS</refpurpose>
+</refnamediv>
+<refsynopsisdiv id='synopsis'>
+
+<cmdsynopsis>
+ <command>gpsfake</command>
+ <arg choice='opt'>-1</arg>
+ <arg choice='opt'>-h</arg>
+ <arg choice='opt'>-b</arg>
+ <arg choice='opt'>-c <replaceable>interval</replaceable></arg>
+ <arg choice='opt'>-i</arg>
+ <arg choice='opt'>-D <replaceable>debuglevel</replaceable></arg>
+ <arg choice='opt'>-l</arg>
+ <arg choice='opt'>-m <replaceable>monitor</replaceable></arg>
+ <arg choice='opt'>-g</arg>
+ <arg choice='opt'>-n</arg>
+ <arg choice='opt'>-o <replaceable>options</replaceable></arg>
+ <arg choice='opt'>-p</arg>
+ <arg choice='opt'>-P <replaceable>port</replaceable></arg>
+ <arg choice='opt'>-q</arg>
+ <arg choice='opt'>-r <replaceable>initcmd</replaceable></arg>
+ <arg choice='opt'>-s <replaceable>speed</replaceable></arg>
+ <arg choice='opt'>-S</arg>
+ <arg choice='opt'>-u</arg>
+ <arg choice='opt'>-t</arg>
+ <arg choice='opt'>-T</arg>
+ <arg choice='opt'>-v</arg>
+ <arg rep='repeat'>
+ <arg choice='plain'><replaceable>logfile</replaceable></arg>
+ </arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1 id='description'><title>DESCRIPTION</title>
+
+<para><application>gpsfake</application> is a test harness for
+<application>gpsd</application> and its clients. It opens a pty
+(pseudo-TTY), launches a <application>gpsd</application> instance that
+thinks the slave side of the pty is its GPS device, and repeatedly
+feeds the contents of one or more test logfiles through the master side to the
+GPS. If there are multiple logfiles, sentences from them are
+interleaved in the order the files are specified.</para>
+
+<para><application>gpsfake</application> does not require root
+privileges, and can be run concurrently with a production
+<application>gpsd</application> instance without causing problems.</para>
+
+<para>The logfiles may contain packets in any supported format,
+including in particular NMEA, SiRF, TSIP, or Zodiac. Leading lines
+beginning with # will be treated as comments and ignored, except in
+the following special cases:</para>
+
+<itemizedlist>
+<listitem><para>
+a comment of the form #Date: yyyy-mm-dd (ISO8601 date format) may be
+used to set the initial date for the log.
+</para></listitem>
+
+<listitem><para>
+a comment of the form #Serial: [0-9]* [78][NOE][12] may be used to set
+serial parameters for the log - baud rate, word length, stop bits.
+</para></listitem>
+
+<listitem><para>
+a comment of the form #Transport: UDP may be used to fake a UDP source
+rather than the normal pty.
+</para></listitem>
+</itemizedlist>
+
+<para>The <application>gpsd</application> instance is run in
+foreground. The thread sending fake GPS data to the daemon
+is run in background.</para>
+
+</refsect1>
+<refsect1 id='options'><title>OPTIONS</title>
+
+<para>With the -1 option, the logfile is interpreted once only rather
+than repeatedly. This option is intended to facilitate regression
+testing.</para>
+
+<para>The <option>-b</option> enables a twirling-baton progress indicator
+on standard error. At termination, it reports elapsed time.</para>
+
+<para>The <option>-c</option> sets the delay between sentences in
+seconds. Fractional values of seconds are legal. The default is zero
+(no delay).</para>
+
+<para>The <option>-l</option> makes the program dump a line or packet number
+just before each sentence is fed to the daemon. If the sentence is
+textual (e.g. NMEA), the text is dumped as well. If not, the packet
+will be dumped in hexadecimal (except for RTCM packets, which aren't
+dumped at all). This option is useful for checking that gpsfake is
+getting packet boundaries right.</para>
+
+<para>The <option>-i</option> is for single-stepping through logfiles. It dumps
+the line or packet number (and the sentence if the protocol is
+textual) followed by "? ". Only when the user keys Enter is the line
+actually fed to <application>gpsd</application>.</para>
+
+<para>The <option>-m</option> specifies a monitor program inside which the
+daemon should be run. This option is intended to be used with
+<citerefentry><refentrytitle>valgrind</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+and similar programs.</para>
+
+<para>The <option>-g</option> uses the monitor facility to run the
+<application>gpsd</application> instance within gpsfake under control
+of gdb.</para>
+
+<para>The <option>-o</option> specifies options to pass to the daemon. The -n
+option passes -n to start the daemon reading the GPS without waiting
+for a client (equivalent to -o "-n"). The <option>-D</option> passes a -D
+option to the daemon: thus -D 4 is shorthand for -o "-D 4".</para>
+
+<para>The -p ("pipe") option sets watcher mode and dumps the NMEA and GPSD
+notifications generated by the log to standard output. This is useful
+for regression-testing.</para>
+
+<para>The -P ("port") option sets the daemon's listening port.</para>
+
+<para>The <option>-q</option> tells gpsfake to suppress normal progress
+output and thus act in a quiet manner.</para>
+
+<para>The <option>-r</option> specifies an initialization command to use in pipe mode.
+The default is <command>?WATCH={"enable":true,"json":true}</command>.</para>
+
+<para>The <option>-s</option> sets the baud rate for the slave tty. The
+default is 4800.</para>
+
+<para>The option -S tells gpsfake to insert realistic delays in the
+test input rather than trying to stuff it through the daemon as fast
+as possible. This will make the test(s) run much slower, but avoids
+flaky failures due to machine lode and possible race conditions in
+the pty layer.</para>
+
+<para>The <option>-t</option> forces the test framework to use TCP
+rather than pty devices. Besides being a test of TCP source handling,
+this may be useful for testing from within chroot jails where access
+to pty devices is locked out.</para>
+
+<para>The <option>-T</option> makes <application>gpsfake</application> print
+some system information and then exits.</para>
+
+<para>The <option>-u</option> forces the test framework to use UDP
+rather than pty devices. Besides being a test of UDP source handling,
+this may be useful for testing from within chroot jails where access
+to pty devices is locked out.</para>
+
+<para>The <option>-v</option> enables verbose progress reports to stderr. It is
+mainly useful for debugging <application>gpsfake</application>
+itself.</para>
+
+<para>The <option>-x</option> dumps packets as
+<application>gpsfake</application> gathers them. It is mainly useful
+for debugging <application>gpsfake</application> itself.</para>
+
+<para>The <option>-h</option> makes <application>gpsfake</application> print
+a usage message and exit.</para>
+
+<para>The argument must be the name of a file containing the
+data to be cycled at the device. <application>gpsfake</application>
+will print a notification each time it cycles.</para>
+
+<para>Normally, gpsfake creates a pty for each logfile and passes the
+slave side of the device to the daemon. If the header comment in the
+logfile contains the string "UDP", packets are instead shipped via UDP
+port 5000 to the address 192.168.0.1.255. You can monitor them with
+this: <command>tcpdump -s0 -n -A -i lo udp and port 5000</command>.</para>
+
+</refsect1>
+<refsect1 id='magic'><title>MAGIC COMMENTS</title>
+
+<para>Certain magic comments in test load headers can change the
+conditions of the test. These are:</para>
+
+<variablelist>
+<varlistentry>
+<term>Serial:</term>
+<listitem><para>May contain a serial-port setting such as 4800 7N2 -
+baud rate followed by 7 or 8 for byte length, N or O or E for parity
+and 1 or 2 for stop bits. The test is run with those settings on the
+slave port that the daemon sees.</para></listitem>
+</varlistentry>
+<varlistentry>
+<term>Transport:</term>
+<listitem><para>Values 'TCP' and 'UDP' force the use of TCP and
+UDP feeds respectively (the default is a pty).</para></listitem>
+</varlistentry>
+<varlistentry>
+<term>Delay-Cookie:</term>
+<listitem><para>Must be followed by two whitespace-separated fields, a
+delimiter character and a numeric delay in seconds. Instead of being
+broken up by packet boundaries, the test load is split on the
+delimiters. The delay is performed after each feed. Can be useful
+for imposing write boundaries in the middle of packets.
+</para></listitem>
+</varlistentry>
+</variablelist>
+
+</refsect1>
+<refsect1 id='custom'><title>CUSTOM TESTS</title>
+
+<para><application>gpsfake</application> is a trivial wrapper around a
+Python module, also named gpsfake, that can be used to fully script
+sessions involving a <application>gpsd</application> instance, any
+number of client sessions, and any number of fake GPSes feeding the
+daemon instance with data from specified sentence logs.</para>
+
+<para>Source and embedded documentation for this module is shipped with the
+<application>gpsd</application> development tools. You can use it to
+torture-test either <application>gpsd</application> itself or any
+<application>gpsd</application>-aware client application.</para>
+
+<para>Logfiles for the use with <application>gpsfake</application> can
+be retrieved using <application>gpspipe</application>,
+<application>gpscat</application>, or
+<application>gpsmon</application> from the gpsd distribution, or any
+other application which is able to create a compatible output.</para>
+
+<para>If <application>gpsfake</application> exits with "Cannot execute
+gpsd: executable not found." the environment variable GPSD_HOME can be
+set to the path where gpsd can be found. (instead of adding that folder
+to the PATH environment variable</para>
+
+</refsect1>
+<refsect1 id='see_also'><title>SEE ALSO</title>
+<para>
+<citerefentry><refentrytitle>gpsd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>gps</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>libgps</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>libgpsmm</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>gpsctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>gpspipe</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>gpsprof</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+<citerefentry><refentrytitle>gpsmon</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+</para>
+</refsect1>
+
+<refsect1 id='maintainer'><title>AUTHOR</title>
+
+<para>Eric S. Raymond <email>esr@thyrsus.com</email>.</para>
+
+</refsect1>
+
+</refentry>
+