Bluez 5 未知连接标识符
Posted
技术标签:
【中文标题】Bluez 5 未知连接标识符【英文标题】:Bluez 5 Unknown Connection Identifier 【发布时间】:2017-09-17 16:00:21 【问题描述】:我有一个运行最新 Raspbian 的 Raspberry Pi 3,并且我有 从 5.23 升级 bluez。到 5.43。我正在尝试连接到 BLE 以 2 秒间隔发布广告的设备。我写了一些基于代码 在 gatttool 上并尝试连接到这些设备。我碰到 LE 连接请求在 2 秒后被取消。因此,我收到状态为 0x02(未知连接标识符)的 LE 连接完成消息
根据我的研究,我在大约 15 个月前的档案中遇到了这个问题,
https://www.spinics.net/lists/linux-bluetooth/msg65434.html
但是在关注线程之后,我没有看到是否找到了解决方案。
我已经使用我的代码、gatttool 实用程序以及使用 蓝牙控制。我在 btmon 中看到列出的相同类型的活动 下面:
HCI 命令:LE 设置扫描参数 (0x08|0x000b) plen 7 [hci0] 21:45:51.917070 类型:被动(0x00) 间隔:60.000 毫秒 (0x0060) 窗口:30.000 毫秒 (0x0030) 自有地址类型:Public (0x00) 过滤策略:忽略不在白名单中 (0x01) > HCI 事件:命令完成 (0x0e) plen 4 [hci0] 21:45:51.917819 LE 设置扫描参数 (0x08|0x000b) ncmd 1 状态:成功 (0x00) HCI 事件:命令完成 (0x0e) plen 4 [hci0] 21:45:51.918357 LE 设置扫描启用 (0x08|0x000c) ncmd 1 状态:成功 (0x00) > HCI 事件:LE 元事件 (0x3e) plen 27 [hci0] 21:45:52.597503 LE 广告报告 (0x02) 报告数量:1 事件类型:可连接无向 - ADV_IND (0x00) 地址类型:随机(0x01) 地址:D3:67:2D:D1:46:46(静态) 数据长度:15 标志:0x06 LE 通用可发现模式 不支持 BR/EDR 公司:联邦快递服务 (321) 资料:070a111080d28004 RSSI:-63 dBm (0xc1) HCI 事件:命令完成 (0x0e) plen 4 [hci0] 21:45:52.599626 LE 设置扫描启用 (0x08|0x000c) ncmd 1 状态:成功 (0x00) HCI 事件:命令状态 (0x0f) plen 4 [hci0] 21:45:52.600508 LE 创建连接 (0x08|0x000d) ncmd 1 状态:成功 (0x00) HCI 事件:命令完成 (0x0e) plen 4 [hci0] 21:45:54.684146 LE 创建连接取消 (0x08|0x000e) ncmd 1 状态:成功 (0x00) > HCI 事件:LE 元事件 (0x3e) plen 19 [hci0] 21:45:54.684361 LE 连接完成 (0x01) 状态:未知连接标识符 (0x02) 手柄:64 角色:大师(0x00) 对等地址类型:随机 (0x01) 对端地址:D3:67:2D:D1:46:46(静态) 连接间隔:67.50 毫秒 (0x0036) 连接延迟:0.00 毫秒 (0x0000) 监督超时:420 毫秒 (0x002a) 主时钟精度:0x00 @ 连接失败:D3:67:2D:D1:46:46 (2) 状态 0x02代码中的某处似乎有 2 秒超时,可能是内核端。
需要注意的是,如果我使用 hcitool 连接,我可以连接 大多数时候。我知道这不是 L2CAP 层,但我可以 看看我可以连接。
另外,如果我将 BLE 设备的广播间隔更改为 1 秒。我可以正常连接。 (2秒广告间隔的原因是省电)
最近有没有人遇到过这个问题,如果有,有解决办法吗?
谢谢
【问题讨论】:
【参考方案1】:有同样的问题。正如您所指出的,将广告间隔从 10 秒减少到 0.5 秒确实可以解决问题。我也需要更长的时间来节省电池。我知道使用旧版本的 Raspbian ( 2016-03-18-raspbian-jessie kernel 4.1.19-v7+ #858 SMP, bluez 5.23 ) 可以正常工作,但是,我还没有更新的版本可以工作。
更新 发现这篇帖子后:https://www.spinics.net/lists/linux-bluetooth/msg67800.html我在include/net/bluetooth/hci.h中更改了以下值:
#define HCI_LE_CONN_TIMEOUT msecs_to_jiffies(22000) /* 22 seconds WAS 2 seconds */
#define HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(22000) /* 22 seconds WAS 2 seconds */
重新编译,现在一切正常,我的设备在最新版本的 Raspbian 内核 4.4.50 和 bluez 5.45 上的广播间隔为 10.24 秒。希望这会有所帮助。
【讨论】:
您应该将电子邮件发送到正确的人挂在的邮件列表中:bluez.org/development/lists 这听起来像是我的解决方案。只是想仔细检查一下这是一个内核参数并且需要重新编译内核吗? 我最初在linux-bluetooth列表上发帖,一直没有收到回复.....以上是关于Bluez 5 未知连接标识符的主要内容,如果未能解决你的问题,请参考以下文章
Angular AOT Build:内部错误:未知标识符未定义
HTTP 状态代码:404 收到错误:代码:47,e.displayText() = DB::Exception:未知标识符:TableauSQL.cnt,e.what() = DB::Excepti
从 Bluez 5.48 开始,iPhone 在连接 BLE GAP 外围设备时需要配对,为啥?
BlueZ 5.4 DBus API ConnectProfile GATT 服务 UUID