mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-30 15:44:21 +08:00
133 lines
5.0 KiB
Plaintext
133 lines
5.0 KiB
Plaintext
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-apc-api.txt file.
|
|
|
|
===============================
|
|
Building and running on Android
|
|
===============================
|
|
|
|
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/android-bluez.glib/
|
|
|
|
- Bionic support - BlueZ requires signalfd and timerfd APIs to be provided
|
|
by libc library. Currently only 'master' branch available at
|
|
https://android.googlesource.com/platform/bionic provides all required
|
|
functionality and running BlueZ on older branch requires backporting missing
|
|
features. Sample Bionic for Android on Intel Architecture (Android-IA) with all
|
|
required features backported is available at
|
|
https://code.google.com/p/android-bluez.bionic/
|
|
|
|
Runtime requirements
|
|
====================
|
|
|
|
BlueZ HAL library requires 'bluetoothd' service to be available on Android
|
|
system. This can be done by defining service in init.rc file of targeted board:
|
|
|
|
service bluetoothd /system/bin/logwrapper /system/bin/bluetoothd
|
|
class main
|
|
group bluetooth net_admin
|
|
disabled
|
|
oneshot
|
|
|
|
It is required that bluetooth user could start and stop bluetoothd service by
|
|
setting 'ctl.start' or 'ctl.stop' property. This can be achieved by
|
|
whitelisting bluetooth user and bluetoothd service in init source code.
|
|
|
|
Required Android init system modifications can be found at
|
|
https://code.google.com/p/android-bluez.system-core/
|
|
|
|
Downloading and building
|
|
========================
|
|
|
|
Building for Android requires full Android AOSP source tree. Sample Android-IA
|
|
tree with all required components present is available at
|
|
http://code.google.com/p/android-bluez/
|
|
|
|
Downloading:
|
|
repo init -u https://code.google.com/p/android-bluez.manifest/ -m topics/bluez
|
|
repo sync
|
|
|
|
Build for Intel ultrabook:
|
|
'source build/envsetup.sh'
|
|
'lunch core_mesa-eng'
|
|
'make allimages -j8'
|
|
|
|
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.
|
|
|
|
=============================
|
|
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.
|