summaryrefslogtreecommitdiff
path: root/gpscat
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2006-11-16 09:08:38 +0000
committerEric S. Raymond <esr@thyrsus.com>2006-11-16 09:08:38 +0000
commit9818acb270e4dc6e7479e0f72e2baf96f117ad06 (patch)
tree209cf0c2bf3f82ae257c86d371dba90dfd2ed3af /gpscat
parent483ff0d81be0ef431ab69c14b2ba54a1f32a3e93 (diff)
downloadgpsd-9818acb270e4dc6e7479e0f72e2baf96f117ad06.tar.gz
Added gpscat to the distribution toolset.
Diffstat (limited to 'gpscat')
-rwxr-xr-xgpscat68
1 files changed, 68 insertions, 0 deletions
diff --git a/gpscat b/gpscat
new file mode 100755
index 00000000..83b249c6
--- /dev/null
+++ b/gpscat
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+#
+# Display GPS output. Hexify it if necessary.
+#
+import os, sys, termios, select, getopt, curses.ascii
+
+NMEA_MAX = 82
+
+def hexdump(str):
+ dmp = ""
+ for (i, ch) in enumerate(str):
+ if curses.ascii.isprint(ord(ch)):
+ dmp += ch
+ elif ch == '\r' and i+1 < len(str) and str[i+1] == '\n':
+ dmp += ch
+ elif ch == '\n' and i-1 >= 0 and str[i-1] == '\r':
+ dmp += ch
+ else:
+ dmp += "\\x%02x" % ord(ch)
+ return dmp
+
+if __name__ == '__main__':
+ buf = ""
+ try:
+ try:
+ (options, arguments) = getopt.getopt(sys.argv[1:], "hs:V")
+ except getopt.GetoptError, msg:
+ print "gpscat: " + str(msg)
+ raise SystemExit, 1
+
+ speed = -1
+ for (switch, val) in options:
+ if switch == '-s':
+ speed = int(val)
+ elif switch == '-h':
+ sys.stderr.write("usage: gpscat [-s] serial-port\n")
+ raise SystemExit, 0
+ elif switch == '-V':
+ sys.stderr.write("gpscat at svn revision $Rev$\n")
+ raise SystemExit, 0
+
+ tty = os.open(arguments[0], os.O_RDWR)
+ if speed != -1:
+ (iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(tty)
+ try:
+ ispeed = ospeed = eval("termios.B%d" % speed)
+ except AttributeError:
+ sys.stderr.write("gpscat: unknown baud rate %d\n" % speed)
+ raise SystemExit, 1
+ termios.tcsetattr(tty, termios.TCSANOW,
+ [iflag, oflag, cflag, lflag, ispeed, ospeed, cc])
+
+ poller = select.poll()
+ poller.register(tty, select.POLLIN)
+
+ while True:
+ (fd, event) = poller.poll()[0]
+ if fd == tty and event == select.POLLIN:
+ buf += os.read(tty, NMEA_MAX)
+ if not buf.endswith("\r"):
+ sys.stdout.write(hexdump(buf))
+ buf = ""
+ except KeyboardInterrupt:
+ sys.stdout.write("\n")
+ raise SystemExit, 0
+
+
+