- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在 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/
我有一个 GPS 模块,通过 USB 连接到 Raspberry Pi。 出于某种原因,我似乎无法使用以下方法进行修复: cgps 它似乎没有得到修复并终止。 我也尝试过: sudo killall
我需要重放 gpsd 收集的 gps 数据以进行测试。我知道我可以通过 tcp 提供 gpsd,例如:gpsd -N tcp://127.0.0.1:6000,但我找不到正确的提供格式。我应该使用什么
我正在使用来自 Ubuntu 的 Bionic 存储库的 GPSd v3.17-5。 我遇到了 GPSd 拒绝响应新客户端连接的问题。 以下是来自 lsof 的转储这表明 gpsmon已连接(您可以看
我目前正在使用 gspd 库,并注意到我得到的时间在两个值之间切换 - 实际值(今天)和 1991 年的某个日期。 当显示 gpsmon 时,它通常会显示正确的时间。使用 cgps -s 显示错误的时
我正在编写一个 Python 脚本,该脚本将与应用程序交互并将 GPSD 数据提取到应用程序中。这显然涉及到一个外部库。 我在用于部署代码的 Raspberry Pi 上设置了如下配置: sudo a
我正在开发一个 C++ 应用程序,它应该使用 gpsd 检索接收到的 $GPGGA 类型的 NMEA 语句。我的想法是大约每秒从 gpsd 读取一次并解析最后收到的 $GPGGA 语句,提取我感兴趣的
我有一 block 板子,上面运行着 Linux Ångström。现在我不想在我的程序中获取 GPS 数据。所以我设置了一个 gpsdeamon 从调制解调器获取他的 gps 信息。守护进程运行良好
我需要来自在我的 NTP 主服务器上运行的 GPSD 服务器的一些信息。 它看到的卫星数量 它使用哪些卫星进行定位(可能还有 SNR) 它看到了哪些卫星,因为它们有很多(这可能吗?) 我要把它输出到P
我正在尝试为 Gpsd 编写一个非常简单的 python 客户端,但是我有执行脚本一段时间后出现此错误: Traceback (most recent call last): File "gps_c
我使用的是 adafruit 的 GPS 帽子。 根据文档 Start gpsd and direct it to use HW UART. Simply entering the following
gpsd程序可以让 Linux 用户干净地组织他们的 GPS 外围数据,这样像 cgps 这样的命令行程序或像 xgps 这样的图形程序就可以读取数据,并写入套接字,就像/var/run/gpsd.s
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
我是使用 gpsd 和 C 的新手。我实现了我的第一个客户端,它使用 gps_stream 函数。如果我理解正确的话,它就像一个 pub/sub 函数,您可以使用 gps_read 读取 gps 数据
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在尝试从 http://developer.berlios.de/project/showfiles.php?group_id=2116 安装 gpsd但是当我在文件夹上运行 scons 时,我得
我想配置 GPSD 以将 UDP 多播流作为输入。我有一个后台服务,它在 UDP 多播端口 5098 (254.0.0.50:5098) 上发送 NMEA 帧 我试过了: gpsd udp://254
我想使用 libgps 与 gpsd 守护进程交互。这就是为什么我实现了一个小测试应用程序以从特定卫星中提取值(value)的原因。 HOWTO 页面上的文档告诉我们 The tricky part
我已使用 USB 适配器将 adafruit ultimate gps v3 连接到树莓派。 gps 单元似乎有一个修复,因为 led(在 gps 单元上)以缓慢的速度闪烁(可能每 10 秒)。如果我
我有一台带有 GPS 的计算机连接到一个串行端口,该端口以非常基本的配置运行 gpsd。这是/etc/default/gpsd 的内容: START_DAEMON="true" USBAUTO="fa
我必须制作一个能够在 Google map 中显示汽车位置的 Android 客户端。车辆上安装了 Raspberry。我见过一些应用程序将 GPSD 数据显示为 NMEA 形式,但这对我来说还不够
我是一名优秀的程序员,十分优秀!