android蓝牙移植,Android Bluetooth 移植

Android's Bluetooth stack uses BlueZ for GAP, SDP, and RFCOMM

profiles, and is a SIG-qualified Bluetooth stack.

Bluez is GPL licensed, so the Android framework interacts with

userspace bluez code through D-BUS IPC to avoid proprietary

code.

Headset and Handsfree (v1.5) profiles are implemented in the

Android framework and are both tightly coupled with the Phone App.

These profiles are also SIG qualified.

The diagram below offers a library-oriented view of the

Bluetooth stack. Click Bluetooth Process Diagram for a process-oriented view.

a4c26d1e5885305701be709a3d33442f.png

Solid elements represent Android blocks and dashed elements

represent partner-specific blocks.

Porting

BlueZ is Bluetooth 2.1 compatible and should work with any 2.1

chipset and is backward compatibile with older Bluetooth versions.

There are two integration points:

UART driver

Bluetooth Power On / Off

UART Driver

The BlueZ kernel sub-system attaches to your hardware-specific

UART driver using the hciattach daemon.

For example, for MSM7201A, this is

drivers/serial/msm_serial.c. You may also need to edit

command line options to hciattach via

init.rc.

Bluetooth Power On / Off

The method for powering on and off your bluetooth chip varies

from Android V 1.0 to post 1.0.

1.0: Android framework writes a 0 or 1 to

/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on.

Post 1.0: Android framework uses the linux

rfkill API. See

arch/arm/mach-msm/board-trout-rfkill.c for an

example.

Compiling

To compile Android with Bluetooth support enabled, add the

following line to BoardConfig.mk.

BOARD_HAVE_BLUETOOTH := true

Troubleshooting

Debugging

To debug your bluetooth implementation, start by reading the

logs (adb logcat) and look for ERRROR and WARNING

messages regarding Bluetooth. Andoird uses Bluez, which comes with

some useful debugging tools. The snippet below provides examples in

a suggested order:

hciconfig -a # print BT chipset address and features. Useful to check if you can communicate with your BT chipset.

hcidump -XVt # print live HCI UART traffic.

hcitool scan # scan for local devices. Useful to check if RX/TX works.

l2ping ADDRESS # ping another BT device. Useful to check if RX/TX works.

sdptool records ADDRESS # request the SDP records of another BT device.

Deamon Logs

Deamon logs for hcid (STDOUT) and

hciattach (STDERR) are sent to

/dev/null by default. Edit init.rc and

init.PLATFORM.rc to run these daemons under

logwrapper, which redirects output to

logcat.

hciconfig -a and hcitool

If you compile your own system.img for Android, and

hciconfig -a works but hcitool scan

doesn't, try installing the firmware for the Bluetooth chipset.

This firmware isn't yet available in the open source codebase, but

you can adb pull and then adb pushit from

a stock T-Mobile G1 (located in

/etc/firmware/brf6300.bin).

Tools

BlueZ provides a rich set of command line tools for debugging

and interacting with the Bluetooth sub-system, including:

hciconfig

hcitool

hcidump

sdptool

dbus-send

dbus-monitor

Feature Support

This section provides a change history of Bluetooth features

added in each Android release and provides some rough guidance as

to future features.

Android 1.0 release

Platform features

Based on Bluez 3.36 and Linux Kernel 2.6.25

Bluetooth 2.0+EDR host stack

Headset Profile 1.0 in Audio Gateway role

Handsfree Profile 1.5 in Audio Gateway role

Three-way calling

Phonebook over AT commands

Qualifications

QDID B014524: Host stack (SDP, L2CAP, GAP, RFCOMM, SPP)

QDID B014624: EPL for HTC Dream (HSP, HFP)

Example products

HTC Dream / T-Mobile G1

Android 1.1 release

No Bluetooth changes since 1.0

Android 1.5 release (cupcake)

Platform features

Based on Bluez 3.36 with Linux Kernel 2.6.27

Bluetooth 2.0+EDR host stack

Support for auto-pairing with '0000' devices

Headset Profile 1.1 in Audio Gateway role

Handsfree Profile 1.5 in Audio Gateway role

Three-way calling

Phonebook over AT commands

Volume synchronization

eSCO

Extensive bug fixes and compatibility improvements

Stereo Bluetooth (A2DP 1.2) in Source role

AVDTP 1.2 in Acceptor and Initiator roles

GAVDTP 1.0 in Acceptor and Initiator roles

44.1 khz, stereo, software SBC codec

Remote Control (AVRCP 1.0) in Target role

AVCTP 1.3 in Target role

play/pause/stop/prev/next

Qualifications

QDID B015261: Host stack (SDP, L2CAP, GAP, RFCOMM, SPP, AVCTP,

AVRCP, GAVDP, AVDTP, A2DP)

QDID B015262: EPL for HTC Sapphire (HSP, HFP)

Android 2.0/2.1 release (eclair)

Platform features

Based on Bluez 4.47 with Linux Kernel 2.6.29

Bluetooth 2.1+EDR host stack

Support for auto-pairing with '0000' devices

Support for Simple Secure Pairing

Headset Profile 1.1 in Audio Gateway role

Handsfree Profile 1.5 in Audio Gateway role

Three-way calling

Phonebook over AT commands

Volume synchronization

eSCO

Extensive bug fixes and compatibility improvements

Stereo Bluetooth (A2DP 1.2) in Source role

AVDTP 1.2 in Acceptor and Initiator roles

GAVDTP 1.0 in Acceptor and Initiator roles

44.1 khz, stereo, software SBC codec

Remote Control (AVRCP 1.0) in Target role

AVCTP 1.3 in Target role

play/pause/stop/prev/next

Object Push Profile version 1.1

Adds ability to transfer pictures, videos

Transfer of contacts using vCard is not supported in this

release.

Phone Book Address Profile version 1.0

Phone Book Server Equipment (PSE) role supported

Using Java Bluetooth APIs, an Android application can peform

the following:

Scan for other Bluetooth devices

Query the local Bluetooth adapter for paired Bluetooth

devices

Establish RFCOMM channels

Connect to other devices through service discovery

Transfer data to and from other devices

Manage multiple connections

Support for Bluetooth enabled car and desk docks

Framework support for routing Phone Call Audio and A2DP

streaming using car and desk docks.

Android 2.2 release (Froyo)

Platform features

Based on Bluez 4.47 with Linux Kernel 2.6.32

No new profiles added.

Added ability to share contacts using vCard

Added ability to export all contacts - useful to transfer

contacts to car kits

Improved compatibility with headsets and car kits.

Future releases

This section offers a rough guide of which features the team is

developing for the next release. This feature list may change

without notice. It isn't possible to post scheduling advice to the

mailing lists.

More profiles...

Improved compatibility with headsets and car kits

Bluetooth emulator support

Bluetooth Low Energy

Development Notes

HID Support Cupcake features some early

work—Bluez has an HID plugin,

external/bluez/utils/input/Android.mk, which gets

compiled.

You can interact directly with this plugin using

dbus-send and dbus-monitor. While not

officially supported, you should be able to connect and use a HID

keyboard and mouse using the Bluez HID plugin API. Next steps

include plumbing the plugin API in the Android Java framework and

offering better support for HID input methods (new keymaps and

mouse support).

Tethering - DUN and PAN Support

Cupcake features some early work—Bluez has has DUN and PAN daemons

which get compiled and external/bluez/utils/dun/Android.mk

external/bluez/utils/pan/Android.mk BNEP support is compiled

into the kernel with cupcake.

While not officially supported, you should be able to run

dund or pand daemons and, using

pppd or iptables, test tethering support.

Next steps include plubming the DBUS APIs to these daemons up into

the Android Java framework and adding code to setup the network

paths via pppd and / or

iptables.

你可能感兴趣的:(android蓝牙移植)