gpsd
1
9 Aug 2004
gpsd
xgps
xgpsspeed
interface daemon for GPS receivers, test client,
and speedometer
gpsd
-T GPS-type
-f GPS-devicename
-S listener-port
-s baudrate
-d DGPS-server
-i initial-position
-n
-N
-h
-P pidfile
-p GPS-devicename
-D debuglevel
-v
xgps
X-options
-h
-v
server
-speedunits mphkphknots
-altunits feetmeters
xgpsspeed
-rv
-nc X-color
-h
-v
-speedunits mphkphknots
server
DESCRIPTION
gpsd
gpsd is a monitor daemon that watches
a TCP/IP port (2947 by default), waiting for applications to request
location information from a GPS. The GPS is expected to be
direct-connected to the machine running
gpsd via a USB or RS232C serial port. The
port may be specified to gpsd at startup, or it may be set via a
command shipped down the client socket (e.g. by a USB hotplug
script). Given a GPS device, gpsd discovers
the correct port speed and protocol for it.
gpsd should be able to query any GPS
that speaks either the standard textual NMEA 0183 protocol, or the
binary Rockwell protocol used by EarthMate and some other GPSes, or
the binary SiRF protocol used by SiRf-II and SiRF-Star chipsets, or
the Garmin binary protocol used by the USB version of the Garmin 18
and other Garmin USB GPSes. gpsd
effectively hides the differences among these.
Optionally, gpsd may get
differential-GPS corrections from a ground station running a RTCM-S104
server; this will improve user error (UERE) from roughly 8 meters
to roughly 2 meters, provided you are within 1000 kilometers or so of
the ground station. (Actual error will be UERE times a dilution
factor dependent on current satellite position.)
The program accepts the following options:
-f
Set GPS device name (default is /dev/gps).
-T device-type
Set GPS type, usually not necessary because GPS can figure it
out by looking at the GPS data stream. The only exception is the
driver for USB Garmin GPSes, which requires -T g.
-S
Set TCP/IP port (default is 2947).
-s
Set GPS communication speed in bits per second. It is
generally not necessary to set this, because the daemon will
autoconfigure itself to the correct baud rate.
-d
Query a differential-GPS (DGPS) server. If a suffix of the
server name begins with ":" it is interpreted as a port number,
overriding the default IANA-assigned port of 2101.
For DGPS servers available for use with this option, see
DGPS corrections over the Internet.
-i
Set initial longitude/latitude in degrees (TripMate and
EarthMate only; helps them develop a first fix more quickly).
Required format is %f[NS]:%f[EW]; that is a decimal number of degrees
latitude, followed by the suffix N or S, followed by a colon, followed
by a decimal number of degrees longitude, followed by the suffix E or
W. The numbers may have fractional parts to the right of a decimal
point. This option may be unavailable if the daemon was compiled
without TripMate or EarthMate support.
-n
Don't wait for a client to connect before polling
the GPS. The wait is a feature; many serial GPSes go to a standby
mode (not drawing power) before the host machine asserts DTR, so
waiting for the first actual request can save valuable battery power
on portable equipment. This option combines well with -D2 to enable
monitoring of the GPS data stream.
-N
Don't daemonize; run in foreground. Mainly useful
for debugging.
-h
Display help message and terminate.
-P
Specify the name and path to record the daemon's process ID.
-p
Obsolete synonym for -f. May be removed in a future release.
-D
Set debug level. At debug levels 2 and above,
gpsd reports incoming sentence and actions
to standard error.
-v
Dump version and exit.
The request protocol for gpsd clients is very simple. Each
request normally consists of a single ASCII character followed by a newline.
Case of the request character is ignored, Each request returns a line
of response text ended by a CR/LF. Requests and responses are as
follows, with %f standing for a decimal float numeral and %d for
decimal integer numeral:
a
The current altitude as "A=%f", meters above mean sea level.
b
The B command with no argument returns four fields
giving the parameters of the serial link to the GPS as "B=%d %d %c
%d"; baud rate, byte size, parity, (currently always N) and stop bits
(1 or 2). The command "B=%d" sets the baud rate, not changing parity
or stop bits; watch the response, because it is possible for this to
fail if the GPS does not support a speed-switching command. In case
of failure, the daemon and GPS will continue to communicate at the
old speed.
c
Returns, as "C=%d", the cycle time of updates
in seconds.
d
Returns the UTC time in the ISO 8601 format,
"D=yyyy-mm-ddThh:nmm:ss.ssZ". Digits of precision in the fractional-seconds
part will vary and may be zero.
e
Returns "E=%f %f %f": three estimated position errors in meters
— total, horizontal, and vertical (2-sigma or 95% confidence
level). Note: many GPSes do not supply these numbers. When the
GPS does not supply them, gpsd computes
them from satellite DOP using fixed figures for expected non-DGPS
and DGPS range errors in meters. A value of zero for any of these
numbers should be taken to mean that component of DOP is not available.
See also the 'q' command.
f
Gets or sets the active GPS device name. The bare command 'f'
requests a response containing 'f=' followed by the name of the active
GPS device. The command may be followed by an '=', in which case all
following printable characters up to the next
CR/LF are interpreted as the name of a trial GPS device. If
there are no other clients active, the trial device is opened and read
to see if a GPS can be found there. If it can, the trial device
becomes the active device and the trial device name is stored to be
opened at the time of the next client request, replacing the old one.
The response to this form of the command is to list the name of the
active device.
i
Returns a text string identifying the GPS. The string
may contain spaces and is terminated by CR-LF.
l
Returns three fields: a protocol revision number,
the gpsd version, and a list of accepted request letters.
m
The gps mode as "M=%d". 0=no mode value yet seen,
1=no fix, 2=2D (no altitude), 3=3D (with altitude).
p
Returns the current position in the form "P=%f %f";
numbers are in degrees, latitude first.
q
Returns "Q=%d %f %f %f": a count of satellites used in the last
fix, and three dimensionless dilution-of-precision (DOP) numbers
— total, horizontal, and vertical. These are computed from the
satellite geometry; they are factors by which to multiply the
estimated UERE (user error in meters at specified confidence level due
to ionospheric delay, multipath reception, etc.) to get actual
circular error ranges in meters at the same confidence level. See also
the 'e' command. Note: Some GPSes may fail to report these, or report
only one of them (often HDOP); a value of 0.0 should be taken
as an indication that the data is not available.
r
Sets or toggles 'raw' mode. Return "R=0" or "R=1". In
raw mode you read the NMEA data stream from the GPS. (Non-NMEA GPSes
get their communication format translated to NMEA on the fly.) The
command 'r' immediately followed by the digit '1' or the plus sign '+'
sets raw mode. The command 'r' followed by the digit '0' or the minus
sign '-' clears raw mode. The command 'r' with neither suffix toggles
raw mode.
s
The gps status as "S=%d". 0=no fix, 1=fix,
2=DGPS-corrected fix.
t
Track made good; course "T=%f" in degrees from true north.
u
Current rate of climb as "U=%f" in meters per second.
Some GPses (non-Sirf-II based) do not report this.
v
The current speed over ground as "V=%f" in knots.
w
Sets or toggles 'watcher' mode (see the descroiption
below). Return "W=0" or "W=1".The command 'w' immediately followed by
the digit '1' or the plus sign '+' sets watcher mode. The command 'w'
followed by the digit '0' or the minus sign '-' clears watcher mode.
The command 'w' with neither suffix toggles watcher
mode.
x
Returns "X=1" if the GPS is online, "X=0" if
not.
y
Returns Y= followed by a count not more than 12, followed by
that many quintuples of satellite PRNs, elevation/azimuth pairs
(elevation an integer formatted as %d in range 0-90, azimuth an
integer formatted as %d in range 0-359), signal strengths in
decibels, and 1 or 0 according as the satellite was or was
not used in the last fix. Each number is followed by one space.
z
The Z command returns daemon profiling
information of interest to GPSD developers. The format of this string
is subject to change without notice.
Note that a response consisting of just ? following the =
means that there is no valid data available.
Requests can be concatenated and sent as a string; gpsd will then
respond with a comma-separated list of replies.
Every gpsd reply will start with the string "GPSD" followed by
the replies. Examples:
query: "p\n"
reply: "GPSD,P=36.000000 123.000000\r\n"
query: "d\n"
reply: "GPSD,D=2002-11-16T02:45:05.12Z\r\n"
query: "va\n"
reply: "GPSD,V=0.000000,A=37.900000\r\n"
When clients are active but the GPS is not responding, gpsd will spin
trying to open the GPS device once per second. Thus, it can be left
running in background and survive having the GPS repeatedly unplugged
and plugged back in.
The recommended mode for clients is watcher mode. In watcher
mode gpsd ships a line of data to the
client each time the the GPS sends a sentence, but rather than being
raw NMEA the line is a gpsd response as if the user had just sent some
set of gpsd commands. That set of commands is the minimum for which
the incoming sentence is relevant — e.g., a GGA sentence ships a
"pdasm" response because it contains position, date, altitude, and GPS
mode data. Additionally, watching clients get notifications in
the form X=0 or X=1 when the online/offline status of the GPS
changes.
Sending SIGHUP to a running gpsd
forces it to close the GPS and all client connections. It will then
attempt to reconnect to the GPS and resume listening for client
connections. This may be useful if your GPS enters a wedged or
confused state but can be soft-reset by pulling down DTR.
xgps
xgps is a simple test client for
gpsd with an X interface. It displays
current GPS animation and (for GPSes that support the feature) the
locations of accessible satellites.
xgps accepts an -h option as for
gpsd, or a -v option to dump the package
version and exit. An optional argument may specify an
server to get data from; a colon-separated suffix is taken as a port
number. The misfeature of previous versions that allowed it to
direct-connect to the serial device has been removed.
The -speedunits option can be used to set the speed units for
display; follow the keyword with knots for nautical miles per hour,
kph for kilometres per hour, or mph for miles per hour. The default
is miles per hour. This option can also be set as the X resource
'speedunits'.
The -altunits option can be used to set the altitude units for
display; follow the keyword with 'meters' or 'feet'. The default
is feet. This option can also be set as the X resource 'altunits'.
xgpsspeed
xgpsspeed is a speedometer that uses
position information from the GPS. It accepts an -h option and
optional argument as for gps, or a -v
option to dump the package version and exit. Additionally, it accepts
-rv (reverse video) and -nc (needle color) options.
The -speedunits option can be used to set the speed units for
display; follow the keyword with knots for nautical miles per hour,
kph for kilometres per hour, or mph for miles per hour. The default
is miles per hour. This option can also be set as the X resource
'speedunits'.
LIMITATIONS
There is a limitation in the accuracy of
gpsd-using applications that stems from the
fact that gpsd waits passively for updates
from the sensor rather than actively polling for them (which can't be
done in a device-independent way). Most GPSes ship updates just once
per second. At 50km/h (31mi/h) that's 13.8 meters change in position
between updates. This is good enough if you're on foot or in a car
but not good enough for aviation applications.
APPLICABLE STANDARDS
The official NMEA protocol standard is available on paper from
the National Marine
Electronics Association. A description of the protocol is
available
on the Web. gpsd parses the following NMEA sentences: GPRMC,
GPGLL, GPVTG, GPGGA, GPGSA, GPGSV. Note that gpsd returns pure
decimal degrees, not the hybrid degree/minute format described in the
NMEA standard.
The Rockwell protocol is described as an addendum on this page about
NMEA.
SEE ALSO
libgps3
libgpsd3
gpsprobe1
gpsprof1
gpsfake1
AUTHORS
Remco Treffcorn, Derrick Brashear, Russ Nelson, Eric S. Raymond.
This manual page by Eric S. Raymond esr@thyrsus.com.
There is a project page, with xgps
screenshots, here.