2

Problem: A python based BLE central program, when run on a Raspberry Pi, failed to connect to BLE peripheral device (a custom board based on Nordic processor). The same python program successfully connected to the BLE peripheral device when run on a Linux Laptop.

I was expecting the python program will work the same way on both platforms.

Raspberry Pi image is bullseye.

To investigate the issue I used the following on the two platforms (Raspberry Pi and Linux Laptop):

  1. btmon for monitoring
  2. bluetoothctl as the central program to connect to BLE Device
  3. A NRF52 DK running the standard HR monitor example from Zephyr as the BLE peripheral device

I noticed the same behaviour i.e. Raspberry PI failed (connects and immediately disconnects) to connect while Linux Laptop connected successfully.

See btmon logs for the two platforms below.

Observations to note:

  1. On connect btmon log for Raspberry Pi shows Flags: 0x00000008 (unknown device flag)
  2. Some additional HCI events which are not seen in the Linux btmon logs

The above raises a few questions for which I still don't have answers:

  1. What are DEVICE FLAGS (I googled but found no reference to this - all I got was pointers to Advertisement Flags and this Flag seem different)
  2. Why does the value switch from 0x00000000 (in @MGMT Device found event) to 0x00000008 (HCI Device connected event). Note: The valid values for DEVICE FLAGS are 0(Confirm Name),1(LegacyPairing),2(Not Connectable) (got this information from btmon source file packet.c). I found one reference to "unknown device flag"
  3. Who is responsible for the change from 0x00000000 to 0x00000008 - BLE Peripheral or the Central program?

btmon output from Raspberry Pi

Bluetooth monitor ver 5.55
= Note: Linux version 5.15.61-v8+ (aarch64)                                                                                                              15:51:01.286532
= Note: Bluetooth subsystem version 2.22                                                                                                                     15:51:01.286533

@ MGMT Event: Device Found (0x0012) plen 25 {0x0001} [hci0] 16:11:04.518347 LE Address: CA:13:47:69:08:05 (Static) RSSI: -36 dBm (0xdc) Flags: 0x00000000 Data length: 11 Flags: 0x06 LE General Discoverable Mode BR/EDR Not Supported 16-bit Service UUIDs (complete): 3 entries Heart Rate (0x180d) Battery Service (0x180f) Device Information (0x180a)

< HCI Command: LE Create Co.. (0x08|0x000d) plen 25 #34 [hci0] 16:11:12.743104 Scan interval: 60.000 msec (0x0060) Scan window: 60.000 msec (0x0060) Filter policy: White list is not used (0x00) Peer address type: Random (0x01) Peer address: CA:13:47:69:08:05 (Static) Own address type: Public (0x00) Min connection interval: 30.00 msec (0x0018) Max connection interval: 50.00 msec (0x0028) Connection latency: 0 (0x0000) Supervision timeout: 420 msec (0x002a) Min connection length: 0.000 msec (0x0000) Max connection length: 0.000 msec (0x0000) > HCI Event: Command Status (0x0f) plen 4 #35 [hci0] 16:11:12.743617 LE Create Connection (0x08|0x000d) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 19 #36 [hci0] 16:11:12.846266 LE Connection Complete (0x01) Status: Success (0x00) Handle: 64 Role: Master (0x00) Peer address type: Random (0x01) Peer address: CA:13:47:69:08:05 (Static) Connection interval: 48.75 msec (0x0027) Connection latency: 0 (0x0000) Supervision timeout: 420 msec (0x002a) Master clock accuracy: 0x00 @ MGMT Event: Device Connec.. (0x000b) plen 24 {0x0001} [hci0] 16:11:12.846310 LE Address: CA:13:47:69:08:05 (Static) Flags: 0x00000008 Unknown device flag (0x00000008) Data length: 11 Flags: 0x06 LE General Discoverable Mode BR/EDR Not Supported 16-bit Service UUIDs (complete): 3 entries Heart Rate (0x180d) Battery Service (0x180f) Device Information (0x180a)

< HCI Command: LE Read Remot.. (0x08|0x0016) plen 2 #37 [hci0] 16:11:12.846451 Handle: 64 > HCI Event: Command Status (0x0f) plen 4 #38 [hci0] 16:11:12.856641 LE Read Remote Used Features (0x08|0x0016) ncmd 1 Status: Success (0x00) > HCI Event: Command Complete (0x0e) plen 14 #39 [hci0] 16:11:12.856698 LE Read Remote Used Features (0x08|0x0016) ncmd 1 Status: Success (0x00) 00 00 00 00 00 00 00 00 00 00 ..........
> HCI Event: LE Meta Event (0x3e) plen 12 #40 [hci0] 16:11:13.186323 LE Read Remote Used Features (0x04) Status: Connection Failed to be Established (0x3e) Handle: 64 Features: 0x3f 0x00 0x00 0x08 0x00 0x00 0x00 0x00 LE Encryption Connection Parameter Request Procedure Extended Reject Indication Slave-initiated Features Exchange LE Ping LE Data Packet Length Extension Remote Public Key Validation > HCI Event: Disconnect Complete (0x05) plen 4 #41 [hci0] 16:11:13.186899 Status: Success (0x00) Handle: 64 Reason: Connection Failed to be Established (0x3e) @ MGMT Event: Device Disconn.. (0x000c) plen 8 {0x0001} [hci0] 16:11:13.198822 LE Address: CA:13:47:69:08:05 (Static) Reason: Unspecified (0x00)

btmon output from Linux

Bluetooth monitor ver 5.53
= Note: Linux version 5.4.0-131-generic (x86_64)                                                                                                                    0.388161
= Note: Bluetooth subsystem version 2.22                                                                                                                            0.388162

@ MGMT Event: Device Found (0x0012) plen 50 {0x0002} [hci0] 7.498178 LE Address: CA:13:47:69:08:05 (Static) RSSI: -56 dBm (0xc8) Flags: 0x00000000 Data length: 36 Flags: 0x06 LE General Discoverable Mode BR/EDR Not Supported 16-bit Service UUIDs (complete): 3 entries Heart Rate (0x180d) Battery Service (0x180f) Device Information (0x180a) Name (complete): Zephyr Heartrate Sensor > HCI Event: LE Meta Event (0x3e) plen 19 #47 [hci0] 17.448221 LE Connection Complete (0x01) Status: Success (0x00) Handle: 3585 Role: Master (0x00) Peer address type: Random (0x01) Peer address: CA:13:47:69:08:05 (Static) Connection interval: 50.00 msec (0x0028) Connection latency: 0 (0x0000) Supervision timeout: 420 msec (0x002a) Master clock accuracy: 0x00 @ MGMT Event: Device Connected (0x000b) plen 24 {0x0002} [hci0] 17.448313 LE Address: CA:13:47:69:08:05 (Static) Flags: 0x00000000 Data length: 11 Flags: 0x06 LE General Discoverable Mode BR/EDR Not Supported 16-bit Service UUIDs (complete): 3 entries Heart Rate (0x180d) Battery Service (0x180f) Device Information (0x180a)

@ MGMT Command: Disconnect (0x0014) plen 7 {0x0001} [hci0] 28.148025 LE Address: CA:13:47:69:08:05 (Static) < HCI Command: Disconnect (0x01|0x0006) plen 3 #95 [hci0] 28.148111 Handle: 3585 Reason: Remote User Terminated Connection (0x13) > HCI Event: Command Status (0x0f) plen 4 #96 [hci0] 28.149253 Disconnect (0x01|0x0006) ncmd 1 Status: Success (0x00) > HCI Event: Disconnect Complete (0x05) plen 4 #97 [hci0] 28.174302 Status: Success (0x00) Handle: 3585 Reason: Connection Terminated By Local Host (0x16) @ MGMT Event: Command Complete (0x0001) plen 10 {0x0001} [hci0] 28.174386 Disconnect (0x0014) plen 7 Status: Success (0x00) LE Address: CA:13:47:69:08:05 (Static) @ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0002} [hci0] 28.174417 LE Address: CA:13:47:69:08:05 (Static) Reason: Connection terminated by local host (0x02)

sudo cat /var/log/syslog provided some specific messages relating to disconnect but I don't know how I can use that to solve the problem I am facing.

Nov 18 11:17:31 kosha bluetoothd[883]: src/adapter.c:connected_callback() hci0 device D0:5F:64:52:00:01 connected eir_len 31
Nov 18 11:17:32 kosha bluetoothd[883]: src/device.c:att_connect_cb() connect to D0:5F:64:52:00:01: Function not implemented (38)
Nov 18 11:17:32 kosha bluetoothd[883]: src/adapter.c:dev_disconnected() Device D0:5F:64:52:00:01 disconnected, reason 0
Nov 18 11:17:32 kosha bluetoothd[883]: src/adapter.c:adapter_remove_connection()
Nov 18 11:17:32 kosha bluetoothd[883]: plugins/policy.c:disconnect_cb() reason 0

Note: when I use my Python program and custom hardware as the BLE device - I see the same things in the btmon log as above. Based on this I suspect the bluetoothd version could be the reason for the problem mentioned above.

I am yet to try keeping the version of bluetoothd the same on both platforms to see if that makes a difference.

UPDATE 19/Nov/2022

I downloaded and compiled the following versions of bluez 5.64, 5.55, 5.65, 5.66 - none of them helped to solve the problem I was facing.

ugmurthy
  • 21
  • 3

1 Answers1

0

I re-imaged the Raspberry Pi with Ubuntu 22.10 and the problem was solved. Everything started to work as it worked on my laptop running Linux.

ugmurthy
  • 21
  • 3