gpscat is a simple program for logging and packetizing GPS data streams. It takes input from a specified file or serial device (presumed to have a GPS attached) and reports to standard output. The program runs until end of input or it is interrupted by ^C or other means. It does not terminate on a bad backet; this is intentional.
In raw mode (the default) gpscat simply dumps its input to standard output. Nonprintable characters other than ASCII whitespace are rendered as hexadecimal string escapes.
In packetizing mode, gpscat uses the same code as gpsd(8)'s packet sniffer to break the input into packets. Packets are reported one per line; line breaks in the packets themselves are escaped.
This program is useful as a sanity checker when examining a new device. It can be used as a primitive NMEA logger, but beware that (a) interrupting it likely to cut off output in mid-sentence, and (b) to avoid displaying incomplete NMEA sentences right up next to shell prompts that often contain a $, raw mode always emits an extra final linefeed.
Also, be aware that packetizing mode will produce useless results — probably consuming the entirety of input and appearing to hang — if it is fed data that is not a sequence of packets of one of the known types.
The program accepts the following options:
Invoke packetizer mode.
Set the port's baud rate (and optionally its parity and stop bits) before reading. Argument should begin with one of the normal integer baud rates (300, 1200, 4800, 9600, 19200, 38400, etc.). It may be followed by an optional suffix [NOE] to set parity (None, Even, Odd) and stop bits (1 or 2).
Invoke packetizer mode, with the packet type and length (in parentheses) reported before a colon and space on each line.
In packetizer mode, enable progress messages from the packet getter. Probably only of interest to developers testing packet getter changes.
Display program usage and exit.
Specifying -s 4800N1 is frequently helpful with unknown devices.
gpsd(8), gps(1), libgps(3), libgpsmm(3), gpsfake(1). gpsprof(1), gpsctl(1), gpsdctl(8), gpsmon(1).
Eric S. Raymond