gpsd isn't recognizing TSIP

View: New views
10 Messages — Rating Filter:   Alert me  

gpsd isn't recognizing TSIP

by David Severt :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I have been working with a Trimble Resolution SMT "starter kit." It's
not an end product but a way to evaluate their chipset. If I configure
and build the gpsd 2.39 source "as is," gpsd does not recognize the
packets as binary TSIP packets and eventually goes through all the baud
rates at 8N1, then again at 7E2 without ever recognizing any packets.
However, if I hack the "gpsd_open()" function in serial.c so that it
does "gpsd_set_speed(session, 9600, 'O', 1)" on line 276 to force the
correct baud rate and parity, it recognizes TSIP packets immediately.
Since my application is an embedded device with known GPS hardware, I
don't mind doing the hack to make it work, so this isn't a big issue for
me. But I thought I should report the issue because it appears to me
that gpsd is supposed to recognize TSIP at 8N1, then switch to odd
parity after it knows it's talking TSIP, but this is not happening in my
case. And I would prefer to use a standard unhacked version of gpsd if I
can.

The following is the output from my GPS receiver, captured with gpscat:

---------------------- Cut Here ---------------------------
\x10\x8f\xab\x00\x07\xdcy\x06\x09\x00\x0f\x00!\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x90\x85\xb1\xc3\xef%`\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xc1\xf4?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1H\x0d\xbd\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdcz\x06\x09\x00\x0f\x00"\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x90\xc1v\xc3\xef\xe4\xd5\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xc9Z?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12A\x0f\x0e\xe2\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc{\x06\x09\x00\x0f\x00#\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x90\xfd\x97\xc3\xef\x8a\xbb\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xd0`?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12>\xfb\x11\xc0\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc|\x06\x09\x00\x0f\x00$\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x919\x1d\xc3\xee^z\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xd7\x0c?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1f\xa5\xea\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc}\x06\x09\x00\x0f\x00%\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x91u\x0c\xc3\xeeu\xa0\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xddd?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\xe0\xfa\xc4\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc~\x06\x09\x00\x0f\x00&\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x91\xb1=\xc3\xee\xdd\xa4\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xe3j?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12?\x1dH\x00\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x7f\x06\x09\x00\x0f\x00'\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x91\xece\xc3\xeeV\xb6\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xea\xe4?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12Ai6\xbe\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x80\x06\x09\x00\x0f\x00(\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x92(\x0c\xc3\xeeg\x94\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xf0>?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@LE@\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x81\x06\x09\x00\x0f\x00)\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x92c\xbd\xc3\xee\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xf7\x14?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\xf1a\x98\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x82\x06\x09\x00\x0f\x00*\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x92\x9fi\xc3\xeez9\x00\x00\x00\x00\x00\x00\x00\x00B\x1d\xfd\x93?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12A4\x17\xb4\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x83\x06\x09\x00\x0f\x00+\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x92\xdb=\xc3\xee\xe8\xdc\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x01\xfe?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12?\xfd)\xb0\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x84\x06\x09\x00\x0f\x00,\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x93\x16\xa7\xc3\xee\xd4\xd0\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x07\xf1?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc19\xa9=\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x85\x06\x09\x00\x0f\x00-\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x93R\x84\xc3\xee\x9ah\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x0d\x98?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12A\x0a%q\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x86\x06\x09\x00\x0f\x00.\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x93\x8d\x87\xc3\xef\x13\xe4\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x12\xf6?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\xe3?\xd8\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x87\x06\x09\x00\x0f\x00/\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x93\xc9\x8d\xc3\xf0\x1b8\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x19\xd2?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1Y\x9c\x14\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x88\x06\x09\x00\x0f\x000\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x94\x056\xc3\xefhn\x00\x00\x00\x00\x00\x00\x00\x00B\x1e
V?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\x82\x00\xcc\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x89\x06\x09\x00\x0f\x001\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x94A\x9a\xc3\xee\xf9\xa9\x00\x00\x00\x00\x00\x00\x00\x00B\x1e(I?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\x1b\xa6\x88\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x8a\x06\x09\x00\x0f\x002\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x94{\xd6\xc3\xee\xc7\xae\x00\x00\x00\x00\x00\x00\x00\x00B\x1e.\x14?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\x9b\x0d\x0e\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x8b\x06\x09\x00\x0f\x003\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x94\xb7H\xc3\xee/;\x00\x00\x00\x00\x00\x00\x00\x00B\x1e5W?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1\x18\xbe\xb4\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x8c\x06\x09\x00\x0f\x004\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x94\xf2\xb3\xc3\xee\x07\x7f\x00\x00\x00\x00\x00\x00\x00\x00B\x1e<=?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\xe9x$\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x8d\x06\x09\x00\x0f\x005\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x95.\xb2\xc3\xedx^\x00\x00\x00\x00\x00\x00\x00\x00B\x1eB\xca?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0'\xac\x10\x10\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x8e\x06\x09\x00\x0f\x006\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x95j\xf7\xc3\xee{_\x00\x00\x00\x00\x00\x00\x00\x00B\x1eI\x04?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\xe6\x7f\xb8\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x8f\x06\x09\x00\x0f\x007\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x95\xa7\x15\xc3\xee\xb8\xe1\x00\x00\x00\x00\x00\x00\x00\x00B\x1eN\xee?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1h\x8a\x0f\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x90\x06\x09\x00\x0f\x008\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x95\xe2}\xc3\xee\xb8m\x00\x00\x00\x00\x00\x00\x00\x00B\x1eT\x8c?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\x1f\x97\xb8\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x91\x06\x09\x00\x0f\x009\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x96\x1f^\xc3\xee\x19\xef\x00\x00\x00\x00\x00\x00\x00\x00B\x1eY\xe2?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xbe\xf0\x1b\xa0\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x92\x06\x09\x00\x0f\x00:\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x96[\xd0\xc3\xeeD\x8e\x00\x00\x00\x00\x00\x00\x00\x00B\x1e^\xf4?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\xabD\x14\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x93\x06\x09\x00\x0f\x00;\x06\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x96\x97{\xc3\xees\xec\x00\x00\x00\x00\x00\x00\x00\x00B\x1ee\x87?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12Ab\xd7\xce\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x94\x06\x09\x00\x0f\x00\x00\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x96\xd2\xcc\xc3\xef\x84\x94\x00\x00\x00\x00\x00\x00\x00\x00B\x1ek\xc6?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\x04<h\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x95\x06\x09\x00\x0f\x00\x01\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x97\x0fH\xc3\xef\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x1eq\xb5?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\x1e\x99\xec\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x96\x06\x09\x00\x0f\x00\x02\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x97K\x9c\xc3\xee8\x89\x00\x00\x00\x00\x00\x00\x00\x00B\x1ey\x1b?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc18\xde#\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x97\x06\x09\x00\x0f\x00\x03\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x97\x86t\xc3\xed\xae\xb2\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x80"?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xbd\x9aX\x00\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x98\x06\x09\x00\x0f\x00\x04\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x97\xc1\xbe\xc3\xed\x8d,\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x86\xcf?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1l\xd4\x96\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x99\x06\x09\x00\x0f\x00\x05\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x97\xfd|\xc3\xed\xb4}\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x8d'?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\xa8.x\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x9a\x06\x09\x00\x0f\x00\x06\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x988\xf4\xc3\xed\xe3\x19\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x93.?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\xec~\xb3\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x9b\x06\x09\x00\x0f\x00\x07\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x98sg\xc3\xee*\x83\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\x98\xe8?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@#fL\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x9c\x06\x09\x00\x0f\x00\x08\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x98\xae\xe5\xc3\xee"\xd8\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xa0\x1a?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1%\x8c\xfe\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x9d\x06\x09\x00\x0f\x00\x09\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x98\xeac\xc3\xed\xac\xe9\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xa5.?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\xce\x9b
\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x9e\x06\x09\x00\x0f\x00\x0a\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x99%\xad\xc3\xed\xa2K\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xaa\x01?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1\x01\x06V\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\x9f\x06\x09\x00\x0f\x00\x0b\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x99a\x8a\xc3\xeeJ\xbb\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xae\x96?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12A_\x10\x10\xe0\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa0\x06\x09\x00\x0f\x00\x0c\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x99\x9d+\xc3\xee\xc4Z\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xb2\xf1?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@J\xce8\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa1\x06\x09\x00\x0f\x00\x0d\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x99\xd8'\xc3\xee\xb6\xd0\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xb8\xd6?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1]+\\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa2\x06\x09\x00\x0f\x00\x0e\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9a\x13\x02\xc3\xed\xae&\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xbep?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0P\xa3\xc4\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa3\x06\x09\x00\x0f\x00\x0f\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9aN\xb2\xc3\xee\x05\xef\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xc3\xc2?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1]\x16C\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa4\x06\x09\x00\x0f\x00\x10\x10\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9a\x8aN\xc3\xed\xff\xed\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xca\x94?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@\x99b\xac\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa5\x06\x09\x00\x0f\x00\x11\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9a\xc5k\xc3\xed\x8e\x83\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xd1\x0e?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eAî"@…@¦ÀƒÁ?
J\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa6\x06\x09\x00\x0f\x00\x12\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9b\x01w\xc3\xed\xe6\x9f\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xd5r?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12A.Y\x12\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa7\x06\x09\x00\x0f\x00\x13\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9b<\x95\xc3\xed\xc5\xbe\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xd9\x9d?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc0\xa5\x8a\x96\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa8\x06\x09\x00\x0f\x00\x14\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9bx0\xc3\xed\xcb\xd5\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xdfW?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12AX\x1c\x97\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xa9\x06\x09\x00\x0f\x00\x15\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9b\xb3W\xc3\xee\x09\xe3\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xe3\x04?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xbf\xc6\xf3\xb0\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xaa\x06\x09\x00\x0f\x00\x16\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9b\xee\xf0\xc3\xed\xf3\xe9\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xe8F?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1[E\xb8\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xab\x06\x09\x00\x0f\x00\x17\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9c)\xfe\xc3\xeeRW\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xedD?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12?\xa0!\xf0\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xac\x06\x09\x00\x0f\x00\x18\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9ce\x16\xc3\xed\x83\x93\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xf2\x02?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12Ab\xef>\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xad\x06\x09\x00\x0f\x00\x19\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9c\xa0C\xc3\xee0\xc9\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xf6\x84?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12>GS\x00\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xae\x06\x09\x00\x0f\x00\x1a\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9c\xdb\xa6\xc3\xed\xcb\xad\x00\x00\x00\x00\x00\x00\x00\x00B\x1e\xfa\xcc?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12\xc1d\x09\xb8\x00\x00\x00\x00\x10\x03\x10\x8f\xab\x00\x07\xdc\xaf\x06\x09\x00\x0f\x00\x1b\x07\x17\x15\x08\x07\xd9\x10\x03\x10\x8f\xac\x07\x00d\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xc8\x9d\x17\x0b\xc3\xee\x19O\x00\x00\x00\x00\x00\x00\x00\x00B\x1f\x00\xa0?\xea\x9c\x9e\xe4WD\xf6\xc0\x00d\xff\x1eA\xee"@\x85@\x02\xa6\xc0\x83\x12@S38\x00\x00\x00\x00\x10\x03


_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by Ed Wildgoose-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

David Severt wrote:
> I have been working with a Trimble Resolution SMT "starter kit." It's
> not an end product but a way to evaluate their chipset. If I configure
> and build the gpsd 2.39 source "as is," gpsd does not recognize the
> packets as binary TSIP packets and eventually goes through all the baud
> rates at 8N1, then again at 7E2 without ever recognizing any packets.
> However, if I hack the "gpsd_open()" function in serial.c so that it
> does "gpsd_set_speed(session, 9600, 'O', 1)" on line 276 to force the
> correct baud rate and parity, it recognizes TSIP packets immediately.
>  

Does it find the device is you use

gpsctl -f -D 99 /dev/whatever

What about if you use
    stty /dev/whatever ispeed 9600

My observation is that the gpsd isn't changing the speed whilst
scanning?  I can see some mode changing in driver_tsip.c, but it's not
obviously on your code path?

Ed W
_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by David Severt :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Ed;

I have tried using stty before running gpsd and that didn't help.  It
does start out with the baud rate set by stty (9600) but it always
forces "no parity" rather than using what stty set up.  I have not tried
the -f option.  The man page said that was deprecated, so I didn't look
at it very closely.  I'll take a look at the source for valid
devicenames (after guessing TSIP) and give it a try.

Regards,
David Severt

Ed W wrote:

> David Severt wrote:
>> I have been working with a Trimble Resolution SMT "starter kit." It's
>> not an end product but a way to evaluate their chipset. If I
>> configure and build the gpsd 2.39 source "as is," gpsd does not
>> recognize the packets as binary TSIP packets and eventually goes
>> through all the baud rates at 8N1, then again at 7E2 without ever
>> recognizing any packets. However, if I hack the "gpsd_open()"
>> function in serial.c so that it does "gpsd_set_speed(session, 9600,
>> 'O', 1)" on line 276 to force the correct baud rate and parity, it
>> recognizes TSIP packets immediately.  
>
> Does it find the device is you use
>
> gpsctl -f -D 99 /dev/whatever
>
> What about if you use
>    stty /dev/whatever ispeed 9600
>
> My observation is that the gpsd isn't changing the speed whilst
> scanning?  I can see some mode changing in driver_tsip.c, but it's not
> obviously on your code path?
>
> Ed W
>

_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by David Severt :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Ed;

Looks like I replied too soon.  The -f option is not present in 2.39.  
Yes, there is a speed change to 96008O1 in driver_tsip.c but that only
happens after it figures out that it needs to talk TSIP.

Regards,
David Severt

Ed W wrote:

> David Severt wrote:
>> I have been working with a Trimble Resolution SMT "starter kit." It's
>> not an end product but a way to evaluate their chipset. If I
>> configure and build the gpsd 2.39 source "as is," gpsd does not
>> recognize the packets as binary TSIP packets and eventually goes
>> through all the baud rates at 8N1, then again at 7E2 without ever
>> recognizing any packets. However, if I hack the "gpsd_open()"
>> function in serial.c so that it does "gpsd_set_speed(session, 9600,
>> 'O', 1)" on line 276 to force the correct baud rate and parity, it
>> recognizes TSIP packets immediately.  
>
> Does it find the device is you use
>
> gpsctl -f -D 99 /dev/whatever
>
> What about if you use
>    stty /dev/whatever ispeed 9600
>
> My observation is that the gpsd isn't changing the speed whilst
> scanning?  I can see some mode changing in driver_tsip.c, but it's not
> obviously on your code path?
>
> Ed W
>

_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by Ed Wildgoose-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

David Severt wrote:
> Ed;
>
> Looks like I replied too soon.  The -f option is not present in 2.39.  
> Yes, there is a speed change to 96008O1 in driver_tsip.c but that only
> happens after it figures out that it needs to talk TSIP.

Yeah, I only started looking at the code 1 day ago, but my observation
is that it doesn't seem to proactively change port speed when scanning.  
For me this means that if I use a generic NMEA talker which only speaks
at 38400 then it's not detected by default and if I change the port
speed on a 4800 NMEA talker then it's not found if I first "break it"
using stty to change port speed to something other than 4800

The code gives the appearance it had baud setting in mind, but I think
we need the devs to answer the question as to whether this is intended
behaviour or not?  Perhaps move your question to the -dev list if you
don't get a response here?

Ed W
_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by Eric S. Raymond-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

David Severt <severtd@...>:

> I have been working with a Trimble Resolution SMT "starter kit." It's
> not an end product but a way to evaluate their chipset. If I configure
> and build the gpsd 2.39 source "as is," gpsd does not recognize the
> packets as binary TSIP packets and eventually goes through all the baud
> rates at 8N1, then again at 7E2 without ever recognizing any packets.
> However, if I hack the "gpsd_open()" function in serial.c so that it
> does "gpsd_set_speed(session, 9600, 'O', 1)" on line 276 to force the
> correct baud rate and parity, it recognizes TSIP packets immediately.
> Since my application is an embedded device with known GPS hardware, I
> don't mind doing the hack to make it work, so this isn't a big issue for
> me. But I thought I should report the issue because it appears to me
> that gpsd is supposed to recognize TSIP at 8N1, then switch to odd
> parity after it knows it's talking TSIP, but this is not happening in my
> case. And I would prefer to use a standard unhacked version of gpsd if I
> can.

TSIP is weird, and our standard hunt sequence is known to be failure-prone
on it.

Fortunately, you have an easy out.  Configure your build with

             --enable-fixed-port-speed=9600

and all should, in theory, be well.  I say "in theory" because that
build hasn't to my knowledge been tested for a while. Look for
FIXED_PORT_SPEED in drivers.c, gpsd.c, and serial.c to understand
what's going on.
--
                <a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by Chris Adams :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Once upon a time, Eric S. Raymond <esr@...> said:
> TSIP is weird, and our standard hunt sequence is known to be failure-prone
> on it.

I worked around this by adding a probe routine to the TSIP driver that
explicitly tries 9600-8-O-1.  I also added a little more initialization
and recognition of a few more TSIP report messages.

Let me get it all tested again and I'll send a patch to the list.
--
Chris Adams <cmadams@...>
Systems and Network Administrator - HiWAAY Internet Services
I don't speak for anybody but myself - that's enough trouble.
_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by David Severt :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Eric S. Raymond wrote:

> David Severt <severtd@...>:
>  
>> I have been working with a Trimble Resolution SMT "starter kit." It's
>> not an end product but a way to evaluate their chipset. If I configure
>> and build the gpsd 2.39 source "as is," gpsd does not recognize the
>> packets as binary TSIP packets and eventually goes through all the baud
>> rates at 8N1, then again at 7E2 without ever recognizing any packets.
>> However, if I hack the "gpsd_open()" function in serial.c so that it
>> does "gpsd_set_speed(session, 9600, 'O', 1)" on line 276 to force the
>> correct baud rate and parity, it recognizes TSIP packets immediately.
>> Since my application is an embedded device with known GPS hardware, I
>> don't mind doing the hack to make it work, so this isn't a big issue for
>> me. But I thought I should report the issue because it appears to me
>> that gpsd is supposed to recognize TSIP at 8N1, then switch to odd
>> parity after it knows it's talking TSIP, but this is not happening in my
>> case. And I would prefer to use a standard unhacked version of gpsd if I
>> can.
>>    
>
> TSIP is weird, and our standard hunt sequence is known to be failure-prone
> on it.
>
> Fortunately, you have an easy out.  Configure your build with
>
>     --enable-fixed-port-speed=9600
>
> and all should, in theory, be well.  I say "in theory" because that
> build hasn't to my knowledge been tested for a while. Look for
> FIXED_PORT_SPEED in drivers.c, gpsd.c, and serial.c to understand
> what's going on.
>  
Thanks Eric.  I did try this, along with disabling a bunch of protocols
but it did not help.  Probably because it still does not attempt odd
parity.  And I'll go along with "TSIP is weird."  I've seen lots of
serial devices in my years of programming but I've never seen a device
that uses odd parity or a device that uses parity with 8 data bits.
_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by Eric S. Raymond-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

David Severt <severtd@...>:
> Thanks Eric.  I did try this, along with disabling a bunch of protocols  
> but it did not help.  Probably because it still does not attempt odd  
> parity.

Hm.  You're probably right.  Time for an --enable-fixed-parity option, maybe.
--
                <a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users

Re: gpsd isn't recognizing TSIP

by Chris Adams :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Once upon a time, Chris Adams <cmadams@...> said:
> I worked around this by adding a probe routine to the TSIP driver that
> explicitly tries 9600-8-O-1.  I also added a little more initialization
> and recognition of a few more TSIP report messages.

Here is my patch, against SVN trunk.  It does several things:

- add a probe routine to look for TSIP at 9600-8-O-1
- fixed length checking of TSIP DLE stuffed packets in packet_parse()
- add a couple of additional config requests to TSIP initialization;
  needed for my old sveesix and after running ntpd libparse driver which
  sets single-satellite mode
- recognize a few additional TSIP report packets (mostly not handled,
  just recognized to avoid errors in debugging)

--
Chris Adams <cmadams@...>
Systems and Network Administrator - HiWAAY Internet Services
I don't speak for anybody but myself - that's enough trouble.

diff --exclude .svn -ur gpsd-trunk/driver_tsip.c gpsd-cmadams/driver_tsip.c
--- gpsd-trunk/driver_tsip.c 2009-08-31 19:03:35.000000000 -0500
+++ gpsd-cmadams/driver_tsip.c 2009-08-31 19:04:04.000000000 -0500
@@ -9,6 +9,14 @@
 #include <unistd.h>
 #include <math.h>
 #include "gpsd_config.h"
+
+#if defined (HAVE_SYS_SELECT_H)
+#include <sys/select.h>
+#endif
+#if defined(HAVE_SYS_TIME_H)
+#include <sys/time.h>
+#endif
+
 #include "gpsd.h"
 #include "bits.h"
 
@@ -49,6 +57,57 @@
     return 0;
 }
 
+/* tsip_detect()
+ *
+ * see if it looks like a TSIP device (speaking 96008O1) is listening and
+ * return 1 if found, 0 if not
+ */
+static bool tsip_detect(struct gps_device_t *session)
+{
+    char buf[BUFSIZ];
+    unsigned int n, ret = 0;
+    int myfd;
+    fd_set fdset;
+    struct timeval to;
+
+    gpsd_report(LOG_PROG, "Probing TSIP\n");
+
+    gpsd_set_speed(session, 9600, 'O', 1);
+
+    /* request firmware revision and look for a valid response */
+    putbyte(buf, 0, 0x10);
+    putbyte(buf, 1, 0x1f);
+    putbyte(buf, 2, 0x10);
+    putbyte(buf, 3, 0x03);
+    myfd = session->gpsdata.gps_fd;
+    if (write(myfd, buf, 4) == 4) {
+ for (n = 0; n < 3; n++) {
+    FD_ZERO(&fdset);
+    FD_SET(myfd, &fdset);
+    to.tv_sec = 1;
+    to.tv_usec = 0;
+    if (select(myfd + 1, &fdset, NULL, NULL, &to) != 1)
+ break;
+    if (generic_get(session) >= 0) {
+ if(session->packet.type == TSIP_PACKET) {
+    gpsd_report(LOG_RAW, "tsip_detect found\n");
+    ret = 1;
+    break;
+ }
+    }
+ }
+    }
+
+    if (ret == 0)
+ /* return serial port to original settings */
+ gpsd_set_speed(session,
+       session->gpsdata.baudrate,
+       session->gpsdata.parity,
+       session->gpsdata.stopbits);
+
+    return ret;
+}
+
 static void tsip_probe_subtype(struct gps_device_t *session, unsigned int seq)
 {
     unsigned char buf[100];
@@ -69,9 +128,13 @@
  (void)tsip_write(session, 0x1f, NULL, 0);
  /* Request Current Time */
  (void)tsip_write(session, 0x21, NULL, 0);
+ /* Set Position Fix Mode (auto 2D/3D) */
+ putbyte(buf,0,0x00);
+ (void)tsip_write(session, 0x22, buf, 1);
  /* Request GPS Systems Message */
  (void)tsip_write(session, 0x28, NULL, 0);
  /* Request Current Datum Values */
+ (void)tsip_write(session, 0x37, NULL, 0);
  putbyte(buf,0,0x15);
  (void)tsip_write(session, 0x8e, buf, 1);
  /* Request Navigation Configuration */
@@ -194,6 +257,60 @@
  f5 = getbef(buf,16); /* time-of-fix */
  gpsd_report(LOG_INF, "GPS Velocity XYZ %f %f %f %f %f\n",f1,f2,f3,f4,f5);
  break;
+    case 0x44: /* Non-Overdetermined Satellite Selection */
+ /* treat the same as 0x6d; some receivers send both */
+ u1 = getub(buf,0); /* nsvs/dimension */
+ if (10 < u1)
+    u1 -= 10;
+ switch (u1) /* dimension */
+ {
+ case 1:
+    session->gpsdata.status = STATUS_NO_FIX;
+    session->gpsdata.fix.mode = MODE_NO_FIX;
+    count = 1;
+    break;
+ case 3:
+    session->gpsdata.status = STATUS_FIX;
+    session->gpsdata.fix.mode = MODE_2D;
+    count = 3;
+    break;
+ case 4:
+    session->gpsdata.status = STATUS_FIX;
+    session->gpsdata.fix.mode = MODE_3D;
+    count = 4;
+    break;
+ default:
+    session->gpsdata.status = STATUS_NO_FIX;
+    session->gpsdata.fix.mode = MODE_NO_FIX;
+    count = 0;
+    break;
+ }
+ session->gpsdata.satellites_used = count;
+ session->gpsdata.pdop = getbef(buf,5);
+ session->gpsdata.hdop = getbef(buf,9);
+ session->gpsdata.vdop = getbef(buf,13);
+ session->gpsdata.tdop = getbef(buf,17);
+ /*@ -evalorder @*/
+ session->gpsdata.gdop = sqrt(pow(session->gpsdata.pdop,2)+pow(session->gpsdata.tdop,2));
+ /*@ +evalorder @*/
+
+ memset(session->gpsdata.used,0,sizeof(session->gpsdata.used));
+ buf2[0] = '\0';
+ /*@ +charint @*/
+ for (i = 0; i < count; i++)
+    (void)snprintf(buf2+strlen(buf2), sizeof(buf2)-strlen(buf2),
+ " %d",session->gpsdata.used[i] = getub(buf,1 + i));
+ /*@ -charint @*/
+
+ gpsd_report(LOG_INF, "Sat info: mode %d, satellites used %d: %s\n",
+    session->gpsdata.fix.mode, session->gpsdata.satellites_used,buf2);
+ gpsd_report(LOG_INF,
+    "Sat info: DOP P=%.1f H=%.1f V=%.1f T=%.1f G=%.1f\n",
+    session->gpsdata.pdop, session->gpsdata.hdop,
+    session->gpsdata.vdop, session->gpsdata.tdop,
+    session->gpsdata.gdop);
+ mask |= HDOP_SET | VDOP_SET | PDOP_SET | TDOP_SET | GDOP_SET | STATUS_SET | MODE_SET | USED_SET;
+ break;
     case 0x45: /* Software Version Information */
  if (len != 10)
     break;
@@ -248,6 +365,8 @@
  buf[len] = '\0';
  gpsd_report(LOG_PROG, "GPS System Message: %s\n",buf);
  break;
+    case 0x49: /* Almanac Health Page */
+ break;
     case 0x4a: /* Single-Precision Position LLA */
  if (len != 20)
     break;
@@ -289,6 +408,8 @@
  }
 #endif /* USE_SUPERPACKET */
  break;
+    case 0x54: /* One Satellite Bias */
+ break;
     case 0x55: /* IO Options */
  if (len != 4)
     break;
@@ -354,6 +475,8 @@
  d1 = getbed(buf,17); /* Time of Measurement */
  gpsd_report(LOG_PROG, "Raw Measurement Data %d %f %f %f %f\n",getub(buf,0),f1,f2,f3,d1);
  break;
+    case 0x5b: /* Satellite Ephemeris Status */
+ break;
     case 0x5c: /* Satellite Tracking Status */
  if (len != 24)
     break;
@@ -384,6 +507,8 @@
  session->gpsdata.satellites = i;
  }
  break;
+    case 0x5e: /* Additional Fix Status Report */
+ break;
     case 0x6d: /* All-In-View Satellite Selection */
  u1 = getub(buf,0); /* nsvs/dimension */
  count = (int)((u1 >> 4) & 0x0f);
@@ -393,15 +518,15 @@
  switch (u1 & 7) /* dimension */
  {
  case 3:
-    //session->gpsdata.status = STATUS_FIX;
+    session->gpsdata.status = STATUS_FIX;
     session->gpsdata.fix.mode = MODE_2D;
     break;
  case 4:
-    //session->gpsdata.status = STATUS_FIX;
+    session->gpsdata.status = STATUS_FIX;
     session->gpsdata.fix.mode = MODE_3D;
     break;
  default:
-    //session->gpsdata.status = STATUS_NO_FIX;
+    session->gpsdata.status = STATUS_NO_FIX;
     session->gpsdata.fix.mode = MODE_NO_FIX;
     break;
  }
@@ -892,7 +1017,7 @@
     .trigger        = NULL, /* no trigger */
     .channels       = TSIP_CHANNELS, /* consumer-grade GPS */
     .probe_wakeup   = NULL, /* no wakeup to be done before hunt */
-    .probe_detect   = NULL, /* no probe */
+    .probe_detect   = tsip_detect, /* probe for 96008O1 device*/
     .probe_subtype  = tsip_probe_subtype, /* no more subtype discovery */
     .get_packet     = generic_get, /* use the generic packet getter */
     .parse_packet   = tsip_parse_input, /* parse message packets */
diff --exclude .svn -ur gpsd-trunk/packet.c gpsd-cmadams/packet.c
--- gpsd-trunk/packet.c 2009-08-10 15:01:18.000000000 -0500
+++ gpsd-cmadams/packet.c 2009-08-31 19:49:44.000000000 -0500
@@ -1126,7 +1126,21 @@
 #endif /* ONCORE_ENABLE */
 #if defined(TSIP_ENABLE) || defined(GARMIN_ENABLE)
  else if (lexer->state == TSIP_RECOGNIZED) {
+    unsigned int pos, dlecnt;
     size_t packetlen = lexer->inbufptr - lexer->inbuffer;
+#ifdef TSIP_ENABLE
+    /* don't count stuffed DLEs in the length */
+    dlecnt = 0;
+    for (pos = 0; pos < packetlen; pos ++)
+ if (lexer->inbuffer[pos] == DLE)
+    dlecnt ++;
+    if (dlecnt > 2) {
+ dlecnt -= 2;
+ dlecnt /= 2;
+ gpsd_report(LOG_RAW, "Unstuffed %d DLEs\n", dlecnt);
+ packetlen -= dlecnt;
+    }
+#endif /* TSIP_ENABLE */
     if ( packetlen < 5) {
  lexer->state = GROUND_STATE;
     } else {
@@ -1191,14 +1205,21 @@
  * 0x41, GPS time, data length 10
  * 0x42, Single Precision Fix, data length 16
  * 0x43, Velocity Fix, data length 20
+ * 0x44, Non-Overdetermined Satellite Selection, data length 21
  * 0x45, Software Version Information, data length 10
  * 0x46, Health of Receiver, data length 2
+ * 0x47, Signal Levels for All Satellites
  * 0x48, GPS System Messages
+ * 0x49, Almanac Health Page, data length 28
  * 0x4a, LLA Position, data length 20
  * 0x4b, Machine Code Status, data length 3
+ * 0x54, One Satellite Bias, data length 12
  * 0x56, Velocity Fix (ENU), data length 20
+ * 0x57, Information About Last Computed Fix, data length 8
  * 0x5a, Raw Measurements
+ * 0x5b, Satellite Ephemeris Status, data length 16
  * 0x5c, Satellite Tracking Status, data length 24
+ * 0x5e, Additional Fix Status Report, data length 2
  * 0x6d, All-In-View Satellite Selection, data length 16+numSV
  * 0x82, Differential Position Fix Mode, data length 1
  * 0x83, Double Precision XYZ, data length 36
@@ -1207,6 +1228,7 @@
  * 0xbc, Receiver Port Configuration
  *
  * <DLE>[pkt id] [data] <DLE><ETX>
+ * any <DLE> in the [data] will be "stuffed" to <DLE> <DLE>
  */
  /*@ +charint @*/
  pkt_id = lexer->inbuffer[1]; /* packet ID */
@@ -1220,28 +1242,42 @@
     /* pass */;
  else if ((0x41 == pkt_id) && (0x0e == packetlen))
     /* pass */;
- else if ((0x42 == pkt_id) && (0x14 == packetlen ))
+ else if ((0x42 == pkt_id) && (0x14 == packetlen))
     /* pass */;
  else if ((0x43 == pkt_id) && (0x18 == packetlen))
     /* pass */;
+ else if ((0x44 == pkt_id) && (0x19 == packetlen))
+    /* pass */;
  else if ((0x45 == pkt_id) && (0x0e == packetlen))
     /* pass */;
  else if ((0x46 == pkt_id) && (0x06 == packetlen))
     /* pass */;
+ else if ((0x47 == pkt_id) && ((0x05 <= packetlen) && (0x41 >= packetlen)))
+    /* pass */;
  else if ((0x48 == pkt_id) && (0x1a == packetlen))
     /* pass */;
+ else if ((0x49 == pkt_id) && (0x20 == packetlen))
+    /* pass */;
  else if ((0x4a == pkt_id) && (0x18 == packetlen))
     /* pass */;
  else if ((0x4b == pkt_id) && (0x07 == packetlen))
     /* pass */;
+ else if ((0x54 == pkt_id) && (0x10 == packetlen))
+    /* pass */;
  else if ((0x55 == pkt_id) && (0x08 == packetlen))
     /* pass */;
  else if ((0x56 == pkt_id) && (0x18 == packetlen))
     /* pass */;
+ else if ((0x57 == pkt_id) && (0x0c == packetlen))
+    /* pass */;
  else if ((0x5a == pkt_id) && ((0x1d <= packetlen) && (0x1f >= packetlen)))
     /* pass */;
+ else if ((0x5b == pkt_id) && (0x14 == packetlen))
+    /* pass */;
  else if ((0x5c == pkt_id) && ((0x1c <= packetlen) && (0x1e >= packetlen)))
     /* pass */;
+ else if ((0x5e == pkt_id) && (0x06 == packetlen))
+    /* pass */;
  else if ((0x5f == pkt_id) && (70 == packetlen))
     /* pass */;
  else if ((0x6d == pkt_id) && ((0x14 <= packetlen) && (0x20 >= packetlen)))
@@ -1250,8 +1286,6 @@
     /* pass */;
  else if ((0x84 == pkt_id) && ((0x28 <= packetlen) && (0x29 >= packetlen)))
     /* pass */;
- else if ((0x8e == pkt_id))
-    /* pass */;
  else if ((0x8f == pkt_id))
     /* pass */;
  else if ((0xbb == pkt_id) && (0x2c == packetlen))

_______________________________________________
Gpsd-users mailing list
Gpsd-users@...
https://lists.berlios.de/mailman/listinfo/gpsd-users