Search code examples
linuxbluetoothbluez

Bluez 5 Unknown Connection Identifier


I have a Raspberry Pi 3 running the latest Raspbian, and I have upgraded bluez from 5.23. to 5.43. I am attempting to connect to BLE devices that advertise at 2 second interval. I wrote some code based on gatttool and attempted to connect to these devices. I run into the LE connect request being cancelled after 2 seconds. Thus I get a LE Connection Complete messages with a status of 0x02 (Unknown Connection Identifier)

From my research I ran across this from about 15 months ago in the archives,

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

However after following the threads, I did not see if a resolution was found.

I have ran tests with my code, the gatttool utility and well as using bluetoothctl. I see the same type of activity in btmon that is listed below:


 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

It looks like there is a 2 second timeout somewhere in the code, perhaps kernel side.

One thing to note is if I use hcitool to connect, I am able to connect most all of the time. I know this is not the L2CAP layer, but I can see that I am able to connect.

Also, if I change the advertising interval of the BLE devices to 1 second. I can connect just fine. (Reason for 2 sec advertising interval is power savings)

Has anyone recently ran into this issue, and if so has there been any resolution?

Thanks


Solution

  • Having the same issue. Reducing the advertisement interval, as you've noted, from 10s to 0.5s does fix the issue. I, also, need a longer interval to conserve battery. I know that using an older build of Raspbian ( 2016-03-18-raspbian-jessie kernel 4.1.19-v7+ #858 SMP, bluez 5.23 ) works fine, however, I have yet to get a newer build to work.

    UPDATE After discovering this post: https://www.spinics.net/lists/linux-bluetooth/msg67800.html I changed the following values in 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 */

    recompiled, and all is working now with a 10.24 second broadcast interval from my device on the latest version of Raspbian kernel 4.4.50 with bluez 5.45. Hope this helps.