gpt4 book ai didi

c++ - GPSD 在 libgpsmm 中给出模式 0

转载 作者:太空狗 更新时间:2023-10-29 22:59:02 25 4
gpt4 key购买 nike

我正在尝试在 Pi 上使用 C++ 与 GPSD 的集成。如果我运行 GPSMON,我可以验证我有一个没有问题的完整修复,但是在我的 C++ 程序中,我得到一个模式 0 的修复,这意味着“MODE UPDATE NOT SEEN YET”。

程序在套接字连接上没有出错,所以我不确定是什么导致断开连接。

最佳答案

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

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

在这里(json.c,第 296 行+,@2016-07-27):

  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;
}

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

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},
...

使用 _gpsmm->enable_debug( level, stderr )level>=6 并编译 libgps, libgpsmm 和 define CLIENTDEBUG_ENABLE 得到调试跟踪输出。

gpsd 源的 git 存储库告诉我们 gpsd_json 协议(protocol)最近不兼容更改的日期:

git commits:
2016-04-07 Add "status" to TPV for DGPS notification
2016-01-04 Address Savannah bug #46804: JSON satellite view parsing is somewhat broken.
2015-04-04 Add client-library parsing of PPS precision.
2015-01-24 In client library, "dip" member was missing from ATT parsing.

Releases:
3.11 23-Aug-2014
3.12 22-Feb-2015 incompatible
3.13 26-Feb-2015
3.14 14-Mar-2015
3.15 03-Jun-2015 incompatible
3.16 08-Jan-2016 incompatible
3.17 xx-xxx-xxxx incompatible

gpsd 开发人员不关心跨版本的客户端-服务器兼容性吗?那么共享 libgps 库二进制 API/ABI 稳定性如何呢?它缺少版本控制功能。也很不安全。
(查看上面提到的关于 2015-04-04 更改的评论 git 评论:Data is currently discarded, pending the next gps_data_t structure break.)

关于c++ - GPSD 在 libgpsmm 中给出模式 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com