Ok, I tried to look at OpenCPN code, but I'm not a CPP coder, but I couldn't find where you setup the the gpsd to send you enable
nmea data mode, ie, it starts out in json, with:
{"class":"VERSION","release":"3.6","rev":"3.6","pr oto_major":3,"proto_minor":7}
if you send it: ?WATCH={"enable":true,"nmea":true}\n
it responds with a couple of more json strings:
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/ttyUSB0","activated":"2012-06-30T22:47:36.333Z","flags":1,"driver":"Generic NMEA","native":0,"bps":4800,"parity":"N","stopbits ":1,"cycle":1.00}]}
{"class":"WATCH","enable":true,"json":false,"nmea" :true,"raw":0,"scaled":false,"timing":false}
and then it's off and running with nmea sentences....
I'm guessing libgps is suppose to hide the json part? but it seems more trouble than it's worth, it appears from the debug that you are getting json when you expect nmea.
Maybe instead of libgps mode, we need "GPSD Network mode" and just handle the initial handshake without the libgps dependency...opencpn has too many build dependencies for me to try to build it on my backlevel Lucid system.
Like you, I have no desire to upgrade to 12.X with the awful new gnome
desktop.
Thanks for looking at it....
Tom
Tom