I'm running 3.16 on a raspberry pi zero w with adafruit gps hat as a gps
server, and also 3.16 on a laptop running fedora 25 with gpsd as a client
to the rpi's gpsd.
On both I've compiled from source.
On the rpi I'm running with the following;
address@hidden:~/gpsd-3.16 $ ./gpsd -N -n -D 4 -G /dev/ttyAMA0
On fedora, I'm, running with this;
address@hidden gpsd-3.16]$ ./gpsd -N -D 5 gpsd://pizwcam.local
pizwcam.local, of course, resolves to the ip address of the rpi.
When I start gpsmon on the fedora laptop, it gives me this output, MOST of
the time;
//////////////////////////////////
tcp://localhost:2947 JSON slave driver>
(82)
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":11
}
(119)
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"gpsd://pizwcam.local","a
ctivated":"2017-06-27T21:40:05.560Z"}]}
(122)
{"class":"WATCH","enable":true,"json":false,"nmea":false,"raw":2,"scaled":false,
"timing":false,"split24":false,"pps":true}
(114)
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":1
1,"remote":"gpsd://pizwcam.local"}
(53) {"class":"ERROR","message":"Unrecognized request ''"}
//////////////////////////////////
At the same time, gpsd ON FEDORA, gives me this;
//////////////////////////////////
gpsd:CLIENT: => client(0):
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":11}\x0d\x0a
gpsd:PROG: checking client(0)
gpsd:CLIENT: <= client(0): ?WATCH={"raw":2,"pps":true}\x0d\x0a
gpsd:PROG: no /etc/gpsd/device-hook present, skipped running ACTIVATE hook
gpsd:INFO: opening remote gpsd feed at pizwcam.local, port 2947.
gpsd:INFO: gpsd_activate(2): activated GPS (fd 7)
gpsd:IO: => GPS: ?
gpsd:IO: => GPS: WATCH={"raw":2,"pps":true}\x0d\x0a
gpsd:CLIENT: => client(0):
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"gpsd://pizwcam.local","activated":"2017-06-27T21:40:05.560Z"}]}\x0d\x0a{"class":"WATCH","enable":true,"json":false,"nmea":false,"raw":2,"scaled":false,"timing":false,"split24":false,"pps":true}\x0d\x0a
gpsd:PROG: switching to match packet type 18:
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":11}
gpsd:PROG: switch_driver(JSON slave driver) called...
gpsd:PROG: selecting JSON slave driver driver...
gpsd:INFO: gpsd://pizwcam.local identified as type JSON slave driver, 0 sec
@ 0bps
gpsd:IO: <= GPS:
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":11}
gpsd:PROG: JSON, passing through
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":11,"remote":"gpsd://pizwcam.local"}
gpsd:PROG: device 0 (fd=7, path gpsd://pizwcam.local) already active.
gpsd:CLIENT: => client(0):
{"class":"VERSION","release":"3.16","rev":"3.16","proto_major":3,"proto_minor":11,"remote":"gpsd://pizwcam.local"}\x0d\x0a
gpsd:IO: <= GPS: {"class":"ERROR","message":"Unrecognized request ''"}
gpsd:PROG: JSON, passing through {"class":"ERROR","message":"Unrecognized
request ''"}
gpsd:CLIENT: => client(0): {"class":"ERROR","message":"Unrecognized request
''"}\x0d\x0a
//////////////////////////////////
And gpsd on the rpi gives this;
//////////////////////////////////
gpsd:CLIENT: <= client(0): ?\x0a
gpsd:ERROR: ERROR response: {"class":"ERROR","message":"Unrecognized
request ''"}\x0d\x0a
gpsd:CLIENT: => client(0): {"class":"ERROR","message":"Unrecognized request
''"}\x0d\x0a
gpsd:PROG: checking client(0)
gpsd:CLIENT: <= client(0): WATCH={"raw":2,"pps":true}\x0d\x0a
gpsd:CLIENT: => client(0): =
//////////////////////////////////
But very occasionally, if I restart gpsmon several times, then on the rpi,
I will get this instead;
//////////////////////////////////
gpsd:CLIENT: <= client(0): ?WATCH={"raw":2,"pps":true}\x0d\x0a
//////////////////////////////////
... and then, of course, gpsmon will work as expected. Note that there is
nothing different visible on the output from gpsd or gpsmon on the fedora
laptop up to that point, including the '?' and 'WATCH' appearing on
separate lines.
So clearly, somewhere between the gpsd's running on fedora and the rpi,
there is a line break being added after the '?' character. Since I can
consistently run '?WATCH=....' via telnet, it appears to be in the client
code running on the fedora machine.