BlueZ for Android status update

In past few months there has been significant amount of work put into supporting Android. This post outlines currently implemented features as well as other additions aimed at making BlueZ for Android integration as smooth as possible.

Android specifies the Bluetooth HAL and a number of profile HALs that shall be implemented by the Bluetooth stack. Each of the HALs is responsible for supporting one or more Bluetooth Profiles. The currently implemented HALs are:

  • bluetooth  – Generic Access Profile (GAP), Device ID Profile 1.3 (DID)
  • handsfree  – Headset Profile 1.2, Handsfree Profile 1.6 with Wideband Speech (HFP)
  • a2dp – Advanced Audio Distribution Profile 1.3 (A2DP)  and Audio/Video Remote Control Profile 1.0 (AVRCP)
  • socket – Phone Book Access Profile 1.1 (PBAP), Message Access Profile 1.1 (MAP), Object Push Profile 1.0 (OPP), RFCOMM
  • hidhost – Human Interface Device Profile 1.1 (HID)
  • avrcp – Audio/Video Remote Control Profile 1.5 (AVRCP)

Some profile’s optional functionality requires support from other Android components. For A2DP support media system (i.e. mediaserver) needs to use BlueZ provided audio.a2dp library. For Wideband Speech support in HFP it is required that BT chip assumes mSBC codec for transparent data.

Integration with Android system

Supported Android version is AOSP 4.4.2. Reference sources for Nexus 4 and Nexus 7 2013 with BlueZ integrated as replacement for default Bluetooth stack are provided at

Qualification documentation

Bluetooth qualification can be a tough process. To make it easier PTS PICS and PIXIT configurations for all supported profiles are provided. Those can be found in pics-*.txt and pixit-*.txt files in android folder. Tests results are also provided in pts-*.txt files. If test requires non-obvious preconditions or execution steps comments on those are also provided.

Future work

Future work includes support for Bluetooth Low Energy and Health Device Profile (health HAL). Low energy support is complex and requires implementation in multiple HALs. LE discovery and pairing (bluetooth HAL), GATT (gatt HAL) and HID over GATT (hidhost HAL) support.

Advanced Audio Distribution Profile

Release of BlueZ 5.17

This is mostly a bug fix release with issues fixed in OBEX, dual-mode device pairing, and LE related areas.

On the Android side a major new feature is Handsfree Profile 1.6 support, including Wideband Speech capability.


Release of BlueZ 5.16

Here’s 5.16. For the most part it’s a bug fix release with a couple of regressions fixed regarding the “Paired” property that had crept into 5.15. People using 5.15 are strongly recommended to upgrade because of these fixes. There is also a fix for HID over GATT (LE) device creation.

As far as new non-Android features are concerned this release supports the New Signature Resolving Key mgmt event which will make its debut in the 3.15 kernel release.

On the Android side by far the biggest feature addition is full support for A2DP 1.3 and AVRCP 1.5. Several other profiles, such as HFP and GATT have continued receiving a fair amount of patches as well, but they are not considered complete yet.


Release of BlueZ 5.15

This release contains bug fixes in various areas, including LE background scanning when LE is enabled after powering on, setting proper attributes for HID over GATT input devices and storing of LE Long Term Keys for slave role operation.

Besides the fixes a notable feature addition is the support for LE Identity Resolving Keys which enable the resolving of devices with Resolvable Private Addresses (one prominent example of such devices are all iOS based ones). This feature requires a kernel with Privacy support enabled and the patches for it are right now being targeted for the 3.15 kernel release. For people wanting to experiment already now the bluetooth-next tree can be used.

On the Android side the rate of new patches keeps going strong and is still accounting for over half of the patches since the previous release. The most important area that has made significant progress is audio where basic A2DP support is now starting to be in place.


Chrome OS qualified as a Host Subsystem for Bluetooth 4.0 + Low Energy

A message to the BlueZ mailing list from Scott James Remnant from Google announced that Chrome OS with BlueZ 5.x has successfully passed Bluetooth 4.0 + Low Energy qualification.

Congrats to Scott and the Chrome OS team. Nicely done.

Release of sbc-1.2

With this release the SBC library now allows to enable a high precision encoding and also support special setup functions to initialize the encoder and decoder for A2DP streams.


Release of BlueZ 5.14

As far as user visible features are concerned the biggest highlight of this release is the improved/fixed support for PS3 remote controls as well as the added support for PS4 remote controls (DualShock 4). Besides this we’ve got various fixes here and there, much more Android functionality as well as more complete automated test tools (bringing among other things fairly complete pairing tests).


Release of BlueZ 5.13

This release consists mostly of further features added to the various Android HALs (Core, Socket, PAN and HID), but a few non-Android changes have crept in too:

  • Fix issue with PS3 controller detection
  • HCI event decoding improvements to btmon