Android蓝牙协议栈
Android蓝牙协议栈使用的是BlueZ,支持GAP, SDP, and RFCOMM规范,是一个SIG认证的蓝牙协议栈。
Bluez 是GPL许可的,因此Android的框架内与用户空间的bluez代码通过D-BUS进程通讯进行交互,以避免专有代码。
Headset和Handsfree(v1.5)规范就在Android框架中实现的,它是跟Phone App紧密耦合的。这些规范也是SIG认证的。
下面的图表提供了一个以库为导向的蓝牙栈视图。
实线框的是Android模块,红色虚线部分为合作伙伴指定模块(译者注:芯片商提供)。
下面的图表是以进程为导向视图:
移植
BlueZ是兼容蓝牙2.1的,可以工作在任何2.1芯片以及向后兼容的旧的蓝牙版本。有要有两个方面:
∙串口驱动 UART driver
∙蓝牙电源开/关 Bluetooth Power On/Off
串口驱动
BlueZ核心子系统使用hciattach守护进程添加你的指定硬件串口驱动。
例如,MSM7201A,这个文件是在drivers/serial/msm_serial.c。你还需要通过修改init.rc为hciattach来编辑命令
行选项。
蓝牙电源开/关
蓝牙芯片的电源开关方法1.0和Post 1.0是不同的,具体如下:
∙ 1.0:Android框架写0或1到/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on
∙Post 1.0:Android框架使用linux rfkill API,参考 arch/arm/mach-msm/board-trout-rfkill.c例子。
编译
编译Android打开蓝牙支持,添加下面这行内容到BoardConfig.mk。
BOARD_HAVE_BLUETOOTH :=true
解决问题
调试
调试你的蓝牙实现,可以通过读跟蓝牙相关的logs(adb logcat)和查找ERROR和警告消息。Android使用Bluez,同时
会带来一些有用的调式工具。下面的片段为了提供一个建议的例子:
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.
守护进程日志
hcid(STDOUT)和hciattach(STDERR)的守护进程日志缺省是被写到/dev/null。编辑init.rc和init.PLATFORM.rc在logwrapper下运行这些守护进程,把它们输出到logcat。
hciconfig -a 和 hcitool
如果你编译你自己的system.img,除了hcitool扫描不行,hciconfig -a是可以工作的,尝试安装固件到蓝牙芯片。XXX TBD
工具
BlueZ为调试和与蓝牙子系统通信提供很多设置命令行工具,包含下面这些:
hciconfig
hcitool
hcidump
sdptool
dbus-send
dbus-monitor
特性支持
这一部分提供在每个android版本中的蓝牙的一些变化,主要是一些性能参数上的东西,就不翻译了。
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
o Three-way calling
o 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
o Support for auto-pairing with '0000' devices
∙Headset Profile 1.1 in Audio Gateway role
∙Handsfree Profile 1.5 in Audio Gateway role
o Three-way calling
o Phonebook over AT commands
o Volume synchronization
o eSCO
o Extensive bug fixes and compatibility improvements
∙Stereo Bluetooth (A2DP 1.2) in Source role
o AVDTP 1.2 in Acceptor and Initiator roles
o GAVDTP 1.0 in Acceptor and Initiator roles
o44.1 khz, stereo, software SBC codec
∙Remote Control (AVRCP 1.0) in Target role
o AVCTP 1.3 in Target role
o 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
o Support for auto-pairing with '0000' devices
o Support for Simple Secure Pairing
∙Headset Profile 1.1 in Audio Gateway role
∙Handsfree Profile 1.5 in Audio Gateway role
o Three-way calling