[Arm-dev] bluez-5.44 needs support for RaspberryPi 3 B

Fri Jul 27 07:42:48 UTC 2018
Jordi Sanfeliu <jordi at fibranet.cat>

Hello,

The current package 'bluez-5.44-4.el7' doesn't include full support for 
the Bluetooth device on the Raspberry Pi 3 Model B (BCM43430). That's 
the reason why you get the Bluetooth MAC address as 'AA:AA:AA:AA:AA:AA' 
executing 'hciconfig -a'.

As stated here 
<https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=176348>, we 
need to patch the 'bluez' package with the following 4 patches listed 
here <https://gist.github.com/pelwell/c8230c48ea24698527cd>, as the 
Fedora guys do in their 'bluez.spec' file:

[...]
# Pi3B
Patch50: 0050-bcm43xx-Add-bcm43xx-3wire-variant.patch
Patch51: 0051-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch
Patch52: 0052-Increase-firmware-load-timeout-to-30s.patch
Patch53: 0053-Move-43xx-firmware-to-lib-firmware.patch
[...]

Once applied such patches the real Bluetooth MAC address appears 
successfully:

# hciconfig -a
hci0:	Type: Primary  Bus: UART
	BD Address: B8:27:EB:37:2C:0D  ACL MTU: 1021:8  SCO MTU: 64:1
	UP RUNNING PSCAN
	RX bytes:1550 acl:0 sco:0 events:50 errors:0
	TX bytes:1045 acl:0 sco:0 commands:50 errors:0
	Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
	Link policy: RSWITCH SNIFF
	Link mode: SLAVE ACCEPT
	Name: 'XXXXXXXXX-rpi3'
	Class: 0x000000
	Service Classes: Unspecified
	Device Class: Miscellaneous,
	HCI Version: 4.1 (0x7)  Revision: 0xb6
	LMP Version: 4.1 (0x7)  Subversion: 0x2209
	Manufacturer: Broadcom Corporation (15)

Also, in order to complement the above patching, it is recommended to 
add the '--experimental' argument to the Bluetooth daemon in the systemd 
unit file:

# cat /usr/lib/systemd/system/bluetooth.service
[Unit]
Description=Bluetooth service
Documentation=man:bluetoothd(8)
ConditionPathIsDirectory=/sys/class/bluetooth

[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/libexec/bluetooth/bluetoothd --experimental
NotifyAccess=main
#WatchdogSec=10
#Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
LimitNPROC=1
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service


Regards.

-- 
Jordi Sanfeliu
FIBRANET Network Services Provider
https://www.fibranet.cat