Bluez 5未知连接标识符



我有一个Raspberry Pi 3运行最新的Raspbian,我有从5.23升级了Bluez。至5.43。我试图连接到ble以2秒间隔广告的设备。我写了一些基于代码的在Gatttool上,试图连接到这些设备。我遇到了LE Connect请求在2秒后被取消。因此,我获得了一个le连接完整消息,状态为0x02(未知连接标识符(

从我的研究中,我从大约15个月前的档案中遇到了这一点,

https://www.spinics.net/lists/linux-bluetooth/msg65434.html

但是,在遵循线程后,我没有看到是否找到了分辨率。

我已经使用我的代码,gatttool实用程序进行了测试以及使用蓝牙我在列出的BTMON中看到了相同类型的活动下图:

HCI命令:LE SET扫描参数(0x08 | 0x000b(PLEN 7 [HCI0] 21:45:51.917070        类型:被动(0x00(        间隔:60.000毫秒(0x0060(        窗口:30.000毫秒(0x0030(        自己的地址类型:公共(0x00(        过滤策略:忽略在白色列表中(0x01(> HCI事件:命令完成(0x0E(PLEN 4 [HCI0] 21:45:51.917819      LE SET扫描参数(0x08 | 0x000b(NCMD 1        状态:成功(0x00( HCI事件:命令完成(0x0E(PLEN 4 [HCI0] 21:45:51.918357      LE SET扫描启用(0x08 | 0x000c(NCMD 1        状态:成功(0x00(> HCI活动:LE META活动(0x3E(PLEN 27 [HCI0] 21:45:52.597503      LE广告报告(0x02(        NUM报告: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 SET扫描启用(0x08 | 0x000c(NCMD 1        状态:成功(0x00( HCI事件:命令状态(0x0f(PLEN 4 [HCI0] 21:45:52.600508      le Create Connection(0x08 | 0x000d(NCMD 1        状态:成功(0x00( HCI事件:命令完成(0x0E(PLEN 4 [HCI0] 21:45:54.684146      LE创建连接取消(0x08 | 0x000e(NCMD 1        状态:成功(0x00(> HCI活动:LE META事件(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:46(2(状态0x02

看来代码中某个地方有一个2秒的超时,也许是内核方。

要注意的一件事是,如果我使用hcitool进行连接,我可以连接大多数时间。我知道这不是L2CAP层,但是我可以看到我能够连接。

另外,如果我将BLE设备的广告间隔更改为1秒。我可以很好地连接。(2秒广告间隔的原因是节省功率(

最近有人遇到了这个问题,如果有任何解决方案?

谢谢

有相同的问题。如您所指出的那样,将广告间隔从10s减少到0.5,确实可以解决该问题。我还需要更长的间隔来节省电池。我知道,使用Raspbian的较旧版本(2016-03-18-Raspbian-Jessie内核4.1.19-V7 #858 SMP,Bluez 5.23(效果很好,但是,我还没有获得更新的构建。

更新发现这篇文章后:https://www.spinics.net/lists/linux-bluetooth/msg67800.html我更改了以下值,包括/net/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 */

重新编译,现在所有人都在我的设备上使用10.24秒的广播间隔,最新版本的Raspbian内核4.4.4.50,Bluez 5.45。希望这会有所帮助。

正如Troy E. Lanes所述,这是由于内核中定义的简短hci_le_autoconn_timeout。如果发送LE Create Connection命令后的超时到期,则主机发送命令LE Create Connection Cancel

但是您可以更改超时值而无需重新编译内核。我制作了一个工具来更改le autoconnect超时https://gist.github.com/mironovdm/cb7f47e8d898e98e9a3977fc88888888888888888A9

最新更新