libgpsmm中的GPSD给定模式0 我尝试在PPI上使用GPSD进行C++集成。如果我运行GPSMon,我可以验证我没有问题的完整修复,但是在我的C++程序中,我得到了一个固定的模式0,这意味着“模式更新还没有看到”。

libgpsmm中的GPSD给定模式0 我尝试在PPI上使用GPSD进行C++集成。如果我运行GPSMon,我可以验证我没有问题的完整修复,但是在我的C++程序中,我得到了一个固定的模式0,这意味着“模式更新还没有看到”。,c++,gps,raspberry-pi,gpsd,C++,Gps,Raspberry Pi,Gpsd,程序在套接字连接处没有出错,因此我不确定是什么原因导致断开连接。我想您使用的是libgps和libgpsmm。您的问题可能是由gpsd守护程序和libgps之间的版本不兼容引起的。 即,客户端(libgps)可能使用与gpsd守护进程不同的“API协议”版本。 如果您决定构建/链接libgps的静态版本(与gpsd的版本号不完全匹配),则可能会发生这种情况。或者,如果您的客户端运行在不同于gpsd服务器的计算机上 我遇到了同样的问题,花了我宝贵的时间来找出原因: libgps中的JSON解析器设

程序在套接字连接处没有出错,因此我不确定是什么原因导致断开连接。

我想您使用的是libgps和libgpsmm。您的问题可能是由gpsd守护程序和libgps之间的版本不兼容引起的。 即,客户端(libgps)可能使用与gpsd守护进程不同的“API协议”版本。 如果您决定构建/链接libgps的静态版本(与gpsd的版本号不完全匹配),则可能会发生这种情况。或者,如果您的客户端运行在不同于gpsd服务器的计算机上

我遇到了同样的问题,花了我宝贵的时间来找出原因:
libgps中的JSON解析器设计得很糟糕。它忽略/丢弃包含名称/值对的JSON对象,这些名称/值对是先验未知的。
因此,来自gpsd的整个TPV消息可能会被丢弃,并且您的客户端实现不会显示错误消息,libgps函数也不会返回错误代码。太糟糕了

这是(,第296+行,@2016-07-27):

这里(,第27行+,@2016-07-27):

使用
\u gpsmm->enable_debug(level,stderr)
level>=6
编译libgps,libgpsmm和
define CLIENTDEBUG\u enable
以获得调试跟踪输出

gpsd源代码的git Repository告诉我们gpsd_json协议最近不兼容更改的日期:

git提交:
2016-04-07将“状态”添加到TPV,以便DGPS通知
2016-01-04地址Savannah bug#46804:JSON卫星视图解析有点中断。
2015-04-04添加PPS精度的客户端库解析。
2015-01-24在客户端库中,ATT解析中缺少“dip”成员。

发布:
3.11 2014年8月23日
3.12 2015年2月22日不兼容
3.13 2015年2月26日
3.14 2015年3月14日
3.15 2015年6月3日不兼容
3.16 2016年1月8日不兼容
3.17 xx xxx xxxx不兼容

gpsd开发人员是否不关心跨版本的客户机-服务器兼容性?那么共享libgps库二进制API/ABI稳定性呢? 它缺少版本控制功能。也非常不安全。

(查看git对上述2015-04-04变更的评论:数据当前被丢弃,等待下一次gps数据结构中断。)

如果查询
?设备,您会得到什么或<代码>版本?你还记得你是否找到了解决这个问题的方法吗?
  if (cursor->attribute == NULL) {
      json_debug_trace((1,
                "Unknown attribute name '%s' (attributes begin with '%s').\n",
                attrbuf, attrs->attribute));
      /* don't update end here, leave at attribute start */
      return JSON_ERR_BADATTR;
  }
static int json_tpv_read(const char *buf, struct gps_data_t *gpsdata, const char **endptr)
{
    const struct json_attr_t json_attrs_1[] = {
      {"class",  t_check,   .dflt.check = "TPV"},
      {"device", t_string,  .addr.string = gpsdata->dev.path, .len = sizeof(gpsdata->dev.path)},
      {"time",   t_time,    .addr.real = &gpsdata->fix.time, .dflt.real = NAN},
      ...