bluez/android
Andrei Emeltchenko 47f6853fa2 android/avdtp: Fix passing NULL pointer to memcpy
send_request can be called as
send_request(session, FALSE, NULL, AVDTP_DISCOVER, NULL, 0) with NULL
pointer which is passed to memcpy().
2014-02-10 14:08:45 +02:00
..
client android/haltest: Remove unneeded assignment 2014-02-10 14:08:45 +02:00
cutils android: The property_set wrapper is actually written by Intel 2014-01-14 12:35:42 -08:00
hardware android: Load bluetooth.default.so as a module 2014-01-10 15:07:23 +02:00
system android/audio: Add kitkat audio headers 2013-12-16 17:41:56 +02:00
a2dp.c android/a2dp: Fix audio deregistration 2014-02-10 13:22:57 +02:00
a2dp.h android/a2dp: Use generic IPC message handling for commands 2013-12-02 16:24:02 +02:00
android-tester.c android: Trivial replacement of tabs where spaces are expected 2014-01-27 21:48:02 +01:00
Android.mk android/build: Some whitespace fixes 2014-02-10 13:05:45 +01:00
audio-ipc-api.txt android: Update Audio IPC documentation 2014-01-24 22:59:45 +01:00
audio-ipc.c android: Fix leftover src/log.h include 2014-01-26 00:27:02 -08:00
audio-ipc.h android/A2DP: Add retry logic to Audio IPC 2014-01-21 16:20:54 +01:00
audio-msg.h android: Add MTU data to Open Stream Audio IPC 2014-01-23 11:34:19 +02:00
avctp.c audio/AVCTP: Lookup key name from key_map table 2014-02-05 16:23:42 +02:00
avctp.h audio/AVCTP: Add keys that can be mapped to uinput 2014-02-05 16:22:22 +02:00
avdtp.c android/avdtp: Fix passing NULL pointer to memcpy 2014-02-10 14:08:45 +02:00
avdtp.h android/AVDTP: Remove get_all parameter for get_capability callback 2013-12-23 16:29:31 +01:00
avrcp.c android/AVRCP: Fix possible invalid read 2014-02-06 14:32:18 +02:00
avrcp.h android/AVRCP: Add bt_avrcp_disconnect 2014-02-05 14:44:20 +01:00
bluetooth.c android/bluetooth: Send prop change event only if prop was changed 2014-02-05 09:46:33 +01:00
bluetooth.h android: Don't pass notification socket on services register 2013-11-28 18:02:27 +02:00
bluetoothd-snoop.c android/snoop: Drop capabilities on startup 2014-01-17 20:41:45 +01:00
hal-a2dp.c android/a2dp: Unregister ipc handlers if init fails 2013-12-08 17:47:42 +02:00
hal-audio.c android/hal-audio: Write SBC parameters to logcat 2014-02-10 13:22:57 +02:00
hal-avrcp.c android: Add initial skeleton for AVRCP in the HAL 2014-01-26 16:19:24 -08:00
hal-bluetooth.c android/handsfree: Add initial files 2014-02-05 09:53:53 +01:00
hal-handsfree.c android/hal-handsfree: Implement sending commands 2014-02-05 09:53:53 +01:00
hal-hidhost.c android/hidhost: Move set_report parameter check to daemon 2013-12-31 11:34:32 +02:00
hal-ipc-api.txt android/hidhost: Remove deprecated idle opcode from ipc document 2013-11-13 11:26:38 +02:00
hal-ipc.c android/hal: Update property used for start/stop services 2014-01-17 20:41:45 +01:00
hal-ipc.h android/hal: Add initial code for IPC message handlers 2013-11-19 16:42:01 +02:00
hal-log.h android/tester: Make HAL logging wrapper print to stderr instead of stdout 2013-12-11 13:10:07 +02:00
hal-msg.h android/handsfree: Add commands and events definition to IPC header 2014-02-05 09:53:53 +01:00
hal-pan.c android/pan: Fix control state change callback parameters order 2014-01-28 16:11:47 +01:00
hal-sock.c android/socket: Move logic from HAL to daemon in connect 2014-01-06 21:26:21 +02:00
hal-utils.c android: Remove support for old Android versions 2014-01-14 12:57:18 +01:00
hal-utils.h android/debug: Move debug functions to hal-utils.c 2013-11-14 10:27:15 +02:00
hal.h android/handsfree: Add initial files 2014-02-05 09:53:53 +01:00
handsfree.c android/handsfree: Fix memory leak 2014-02-05 14:44:20 +01:00
handsfree.h android/handsfree: Add initial files 2014-02-05 09:53:53 +01:00
hidhost.c android/hidhost: Use g_slist_free_full to free devices list 2014-02-06 15:23:00 +02:00
hidhost.h android/hidhost: Use generic IPC message handling for commands 2013-12-02 16:24:02 +02:00
init.bluetooth.rc android: Add sample init.bluetooth.rc file 2014-01-17 20:41:45 +01:00
ipc-tester.c android: Remove useless extra parenthesis 2014-01-27 21:48:02 +01:00
ipc.c android/ipc: Remove watches on cleanup 2014-02-03 14:15:00 +01:00
ipc.h android/A2DP: Add retry logic to Audio IPC 2014-01-21 16:20:54 +01:00
main.c android/handsfree: Add initial files 2014-02-05 09:53:53 +01:00
Makefile.am android/client-audio: Add sine generator as fallback 2014-02-05 15:08:24 +01:00
pan.c android/pan: Bring bridge interface down before removing it 2014-02-07 11:21:22 +02:00
pan.h android/pan: Use generic IPC message handling for commands 2013-12-02 16:24:02 +02:00
pics-a2dp.txt android/pics: Add PICS and PIXIT for A2DP 2014-01-13 11:04:26 +01:00
pics-avctp.txt android/pts: Update PICS and PTS for AVCTP 2014-02-05 10:46:59 +01:00
pics-avrcp.txt android/pics: Add PICS and PIXIT for AVRCP 2014-01-13 11:04:26 +01:00
pics-did.txt android/pics: Update PICS to PTS 5.0 for DID 2014-01-08 14:17:09 +01:00
pics-gap.txt android/pics: Update PICS to PTS 5.0 for GAP 2014-01-08 14:17:09 +01:00
pics-hid.txt android/pics: Update PICS to PTS 5.0 2014-01-08 14:17:09 +01:00
pics-l2cap.txt android/pics: Update PICS to PTS 5.0 2014-01-08 14:17:09 +01:00
pics-map.txt android/pts: Add PTS PICS and PIXIT for MAP 2013-12-17 13:34:40 +02:00
pics-opp.txt android/pics: Update PICS to PTS 5.0 2014-01-08 14:17:09 +01:00
pics-pan.txt android/pics: Update PICS to PTS 5.0 2014-01-08 14:17:09 +01:00
pics-pbap.txt android/pics: Update PICS to PTS 5.0 2014-01-08 14:17:09 +01:00
pixit-a2dp.txt android/pics: Add PICS and PIXIT for A2DP 2014-01-13 11:04:26 +01:00
pixit-avctp.txt android/pics: Add PICS and PIXIT for AVCTP 2014-01-16 09:04:41 +01:00
pixit-avrcp.txt android/pics: Add PICS and PIXIT for AVRCP 2014-01-13 11:04:26 +01:00
pixit-did.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pixit-gap.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pixit-hid.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pixit-l2cap.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pixit-map.txt android/pts: Add PTS PICS and PIXIT for MAP 2013-12-17 13:34:40 +02:00
pixit-opp.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pixit-pan.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pixit-pbap.txt android/pixit: Add PTS version to respective pixit 2014-01-08 15:50:23 +01:00
pts-a2dp.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
pts-avctp.txt android/pts: Update PICS and PTS for AVCTP 2014-02-05 10:46:59 +01:00
pts-avrcp.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
pts-did.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
pts-gap.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
pts-hid.txt android/pts: Correct typo 2014-01-31 14:41:38 +01:00
pts-l2cap.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
pts-map.txt android/pts: Update PTS results for MAP 2014-01-13 10:40:36 +02:00
pts-opp.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
pts-pbap.txt android/pts: Add Android version to PTS tests 2014-01-31 14:41:38 +01:00
README android/README: Update with kernel requirements 2014-01-29 04:01:47 +01:00
socket-api.txt android/doc: Add socket-api.txt document 2013-12-08 17:32:05 +02:00
socket.c android: Use src/log.h include instead of just log.h 2014-01-26 00:23:15 -08:00
socket.h android: Don't pass notification socket on services register 2013-11-28 18:02:27 +02:00
system-emulator.c android/system-emulator: Update property used for start/stop services 2014-01-17 20:41:45 +01:00
test-ipc.c android/unit: Some codestyle cleanups 2014-02-04 21:35:11 +01:00
utils.h android: Add helper functions for converting bdaddr transmitted over IPC 2013-10-28 16:10:42 +02:00

BlueZ for Android
*****************

Since Android 4.2 there exists a well standardized HAL interface that the
Bluetooth stack is expected to provide and which enables the easy replacement
of the stack of choice on Android. Android BlueZ is intended as a drop-in
replacement to Android provided Bluetooth stack.

More details about BlueZ for Android architecture and components can be found
in android/hal-ipc-api.txt file.

Supported Android version: 4.4

===============================
Building and running on Android
===============================

Steps needed to build and run Android Open Source Project 4.4.2 with
integrated BlueZ.

Build requirements
==================

- GLib - Android 4.2 or later don't provide GLib and one must provide it in
'external/bluetooth/glib' folder of Android tree. Sample Android GLib port
is available at https://code.google.com/p/aosp-bluez.glib/

- SBC - A2DP code requires SBC library (version 1.2 or higher) present in
'external/bluetooth/sbc' directory. Library is build from Android.mk provided
by BlueZ. SBC code is available at git://git.kernel.org/pub/scm/bluetooth/sbc

- Bionic support - Currently only 'master' branch available at
https://android.googlesource.com/platform/bionic provides all required
functionality and running BlueZ on release branch requires backporting missing
features (currently only epoll_create1 call for Android 4.4.2). Sample
Bionic for Android 4.4.2 with all required features backported is available at
https://code.google.com/p/aosp-bluez.platform-bionic/

Runtime requirements
====================

BlueZ HAL library requires 'bluetoothd' and 'bluetoothd-snoop' services to be
available on Android system. Some permissions settings are also required.

This can be done by importing init.bluetooth.rc file in init.rc file of targeted
board:
import init.bluetooth.rc

For convenience examples are provided at:
https://code.google.com/p/aosp-bluez.device-lge-mako/    (Nexus 4)
https://code.google.com/p/aosp-bluez.device-asus-flo/    (Nexus 7 2013)

Downloading and building
========================

Building for Android requires full Android AOSP source tree. Sample Android
4.4.2 tree with all required components present is available at
http://code.google.com/p/aosp-bluez/

This tree provides support for Nexus4 (target aosp_mako-userdebug) and
Nexus 7 2013 (target aosp_flo-userdebug). Tree does not provide binary blobs
needed to run Android on supported devices. Those can be obtained from
https://developers.google.com/android/nexus/drivers. Binary blobs needs to be
unpacked (EULA acceptance required) into 'vendor' directory of Android tree.

Downloading:
repo init -u https://code.google.com/p/aosp-bluez.platform-manifest -b kitkat
repo sync

Building:
source build/envsetup.sh
lunch aosp_mako-userdebug    or    lunch aosp_flo-userdebug
make -j8

Flashing:
adb reboot bootloader
fastboot flashall -w

After full build is done it is possible to rebuild only BlueZ:
'cd external/bluetooth/bluez/android/'
'mm' (or 'mm -B' to force rebuilding of all files)
'adb sync' to update target device.

Linux Kernel requirements
=========================

BlueZ for Android uses Linux Bluetooth subsystem and it must be enabled in
kernel. Minimal required version of management interface is 1.3. This
corresponds to Linux 3.9 but latest available version is recommended. Other
requirements include UHID and network bridge support.

Following kernel options should be enabled:
CONFIG_BT
CONFIG_BT_RFCOMM
CONFIG_BT_RFCOMM_TTY
CONFIG_BT_BNEP
CONFIG_BT_BNEP_MC_FILTER
CONFIG_BT_BNEP_PROTO_FILTER
CONFIG_BRIDGE
CONFIG_UHID

Also BT chip driver needs to be enabled e.g:
CONFIG_BT_HCIBTUSB

If it is not possible to use new enough Linux kernel one can use updated
bluetooth subsytem from Backports project. More information about Backports can
be found at https://backports.wiki.kernel.org. Sample kernels using backports
for running BlueZ on Android are available at
https://code.google.com/p/aosp-bluez.

=============================
Building and running on Linux
=============================

It is possible to build and test BlueZ for Android daemon on Linux (eg. PC).
Simply follow instructions available at README file in BlueZ top directory.
Android daemon binary is located at android/bluetoothd. See next section on
how to test Android daemon on Linux.

============
Testing tool
============

BT HAL test tools located in android/haltest is provided for HAL level testing
of both Android daemon and HAL library. Start it with '-n' parameter and type
'bluetooth init' in prompt to initialize HAL library. Running without parameter
will make haltest try to initialize all services after start. On Android
required bluetoothd service will be started automatically. On Linux it is
required to start android/bluetoothd manually before init command timeout or
use provided android/system-emulator, which takes care of launching daemon
automatically on HAL library initialization. To deinitialize HAL library and
stop daemon type 'bluetooth cleanup'. Type 'help' for more information. Tab
completion is also supported.

===========================
Implementation shortcomings
===========================

It is possible that some of HAL functionality is missing implementation due to
reasons like feature feasibility or necessity for latest Android Framework.
This sections provides list of such deficiencies. Note that HAL library is
always expected to fully implement HAL API so missing implementation might
happen only in daemon.

HAL Bluetooth
=============

methods:
dut_mode_send                      never called from Android Framework
le_test_mode                       never called from Android Framework
get_remote_service_record          never called from Android Framework

callbacks:
dut_mode_recv_cb
le_test_mode_cb

properties:
BT_PROPERTY_SERVICE_RECORD         not supported for adapter and device, for
                                   device this property is to be returned as
                                   response to get_remote_service_record,
                                   not sure what to return on get_property
                                   calls (records of all services?)

BT_PROPERTY_REMOTE_VERSION_INFO    information required by this property (LMP
                                   information) are not accessible from mgmt
                                   interface, also marking this property as
                                   settable is probably a typo in HAL header

Socket HAL
==========

Support only for BTSOCK_RFCOMM socket type.