Bluez 5未知连接标识符

时间:2017-04-20 20:29:44

标签: linux bluetooth bluez

我有一个Raspberry Pi 3运行最新的Raspbian,我有 从5.23升级bluez。到5.43。我正在尝试连接到BLE 以2秒间隔通告的设备。我写了一些代码 在gatttool上并试图连接到这些设备。我遇到了 LE连接请求在2秒后被取消。因此,我得到状态为0x02(未知连接标识符)

的LE连接完成消息

从我的研究中我大约15个月前在档案馆中遇到过这个问题,

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

然而,在跟踪线程后,我没有看到是否找到了解决方案。

我已经使用我的代码,gatttool实用程序以及使用来运行测试 bluetoothctl。我在列出的btmon中看到了相同类型的活动 下面:


 HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7                              [hci0] 21:45:51.917070
        Type: Passive (0x00)
        Interval: 60.000 msec (0x0060)
        Window: 30.000 msec (0x0030)
        Own address type: Public (0x00)
        Filter policy: Ignore not in white list (0x01)
> HCI Event: Command Complete (0x0e) plen 4                                             [hci0] 21:45:51.917819
      LE Set Scan Parameters (0x08|0x000b) ncmd 1
        Status: Success (0x00)
 HCI Event: Command Complete (0x0e) plen 4                                             [hci0] 21:45:51.918357
      LE Set Scan Enable (0x08|0x000c) ncmd 1
        Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 27                                               [hci0] 21:45:52.597503
      LE Advertising Report (0x02)
        Num reports: 1
        Event type: Connectable undirected - ADV_IND (0x00)
        Address type: Random (0x01)
        Address: D3:67:2D:D1:46:46 (Static)
        Data length: 15
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Company: FedEx Services (321)
          Data: 070a111080d28004
        RSSI: -63 dBm (0xc1)
 HCI Event: Command Complete (0x0e) plen 4                                             [hci0] 21:45:52.599626
      LE Set Scan Enable (0x08|0x000c) ncmd 1
        Status: Success (0x00)
 HCI Event: Command Status (0x0f) plen 4                                               [hci0] 21:45:52.600508
      LE Create Connection (0x08|0x000d) ncmd 1
        Status: Success (0x00)
 HCI Event: Command Complete (0x0e) plen 4                                             [hci0] 21:45:54.684146
      LE Create Connection Cancel (0x08|0x000e) ncmd 1
        Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 19                                               [hci0] 21:45:54.684361
      LE Connection Complete (0x01)
        Status: Unknown Connection Identifier (0x02)
        Handle: 64
        Role: Master (0x00)
        Peer address type: Random (0x01)
        Peer address: D3:67:2D:D1:46:46 (Static)
        Connection interval: 67.50 msec (0x0036)
        Connection latency: 0.00 msec (0x0000)
        Supervision timeout: 420 msec (0x002a)
        Master clock accuracy: 0x00
@ Connect Failed: D3:67:2D:D1:46:46 (2) status 0x02

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

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

此外,如果我将BLE设备的广告时间间隔更改为1秒。我可以连接得很好。 (2秒广告间隔的原因是省电)

最近有没有人遇到过这个问题,如果有的话,有没有解决过?

由于

1 个答案:

答案 0 :(得分:1)

遇到同样的问题。正如您所指出的,将广告间隔从10秒减少到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我在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秒广播间隔。希望这会有所帮助。