Android Bluetooth 移植

来源:互联网 发布:能写作的软件 编辑:程序博客网 时间:2024/06/08 17:24

Android 的蓝牙协议栈使用BlueZ实现来对GAP, SDP以及RFCOMM等应用规范的支持,并获得了SIG认证。由于Bluez使用GPL授权, 所以Android 框架通过D-BUS IPC来与bluez的用户空间代码交互以避免使用未经授权的代码。

Android 在应用框架framework中实现HSP和HFP(v1.5)规范,并且与电话应用(Phone App)配合紧密。

下图展示了蓝牙软件栈面向库的视图,在它下面是面向进程的视图。

图1 面向库的视图

图中使用实线的块是在android中实现的,而虚线的部分则由合作伙伴具体定制。

图2 面向进程的视图(基于1.0版本)

移植

BlueZ兼容bluetooth 2.1, 支持任意基于蓝牙2.1的芯片组, 并且后向兼容早期的版本。移植中有两个与芯片的结合点:

·        UART 驱动

·        蓝牙电源开关

UART 驱动

BlueZ内核子系统通过守护进程hciattach 与特定硬件的UART驱动进行绑定。

以MSM7201A为例,参考drivers/serial/msm_serial.c。你可能还需要编辑init.rc 中hciattach 的命令行选项。

蓝牙电源开关

Android V1.0与之前的版本采用不同的方式控制蓝牙芯片的电源开关。

1.0: Android 框架向/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on 写0或1.

Post 1.0: Android 框架使用linux中 rfkill 的API。

可以参考 arch/arm/mach-msm/board-trout-rfkill.c。

编译

为了使能Android的蓝牙功能,在编译时需要在 BoardConfig.mk中加入

BOARD_HAVE_BLUETOOTH := true

 

疑难解答

调试

在开始时,可以通过读log(adb logcat)并寻找蓝牙相关的 ERRROR 和 WARNING 信息来调试你的蓝牙实现, Bluez中也包含了一些十分有用的调试工具。下面按照推荐顺序提供了一些例子。

hciconfig -a                 #print BT chipset address and features. Useful to check if you can communicatewith 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 theSDP records of another BT device.

后台进程的Log

后台进程hcid (STDOUT)和 hciattach (STDERR)的log默认输出到/dev/null。可以编辑 init.rc 和 init.PLATFORM.rc 来使这些进程在 logwrapper下运行,从而将输出重定向到logcat.

hciconfig -a 和 hcitool

当使用你自己编译的system.img时, 如果 hciconfig -a 可以正常工作但hcitool 却不能正确扫描, 可以尝试为蓝牙芯片组安装固件。目前的开源代码库中并不提供该固件, 但是你可以通过使用 adb pull 然后 adb push从早期的T-MobileG1中获取 (位于 /etc/firmware/brf6300.bin).

工具

BlueZ 提供了一套丰富的基于命令行的工具用于调试与并与蓝牙子系统进行交互,其中包括:

·        hciconfig

·        hcitool

·        hcidump

·        sdptool

·        dbus-send

·        dbus-monitor

支持特性

下面这一节总结了Android各个release版本所支持得蓝牙特性的变化情况,并对未来可能支持的特性做了一个粗略的展望。

Android 1.0 release

平台特性(Platform features)

·   基于 Bluez 3.36 和 Linux Kernel 2.6.25

·   Bluetooth 2.0+EDR 主机协议栈

·   HSP 1.0 (作为AG端)

·   HFP 1.5 (作为AG端)

··  三方通话

··   基于AT命令的电话本

 

认证(Qualifications)

·   QDID B014524: 主机协议栈(SDP, L2CAP, GAP, RFCOMM, SPP)

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

实例产品

·   HTC Dream / T-Mobile G1

 

Android 1.1 release

没有相对1.0版的修改

 

Android 1.5 release (cupcake)

平台特性

·    基于 Bluez 3.36 和 Linux Kernel 2.6.27

·    Bluetooth 2.0+EDR 主机协议栈

··   支持'0000'的PIN码的设备自动配对

·    HSP 1.1 (作为AG端)

·    HFP 1.5 (作为AG端)

··   三方通话

··   基于AT命令的电话本

··   音量同步

··    eSCO

··    显著的bug修复及兼容性的提高

·     蓝牙立体声 (A2DP 1.2) 源端

··    AVDTP 1.2 的发起端和接受端

··    GAVDTP 1.0的发起端和接受端

··    44.1 khz, 立体声, 软件SBC 编解码

·     远程控制(AVRCP 1.0) 的目标端

··    AVCTP 1.3 的目标端

··    播放/暂停/停止/跳到上一首/跳到下一首

 

认证

·     QDID B015261: 主机协议栈(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)

平台特性

·     基于 Bluez 4.47 和 Linux Kernel 2.6.29

·     Bluetooth 2.1+EDR主机协议栈

··    支持'0000'的PIN码的设备自动配对

··    支持简单安全配对(Simple Secure Pairing)

·     HSP 1.1 (作为AG端)

·     HFP 1.5 (作为AG端)

··    三方通话

··    基于AT命令的电话本

··    音量同步

··    eSCO

··    显著的bug修复及兼容性的提高

·     蓝牙立体声 (A2DP 1.2) 源端

··    AVDTP 1.2 的发起端和接受端

··    GAVDTP 1.0的发起端和接受端

··    44.1 khz, 立体声, 软件SBC 编解码

·     远程控制(AVRCP 1.0) 的目标端

··    AVCTP 1.3 的目标端

··    播放/暂停/停止/跳到上一首/跳到下一首

·     OPP规范 1.1版

··    增加传输图片、视频文件的能力

··    这一版本尚不支持用于传输通信录的vCard

·     PBAP 1.0版

··    不支持作为电话本服务器设备(PSE)

·     通过 Java Bluetooth API, 一个Android应用程序可以做到下面这些:

··    扫描其它蓝牙设备

··    向本地蓝牙适配器查询已配对的蓝牙设备

··    建立RFCOMM信道

··    通过SDP链接其它设备

··    与其它设备的数据传输

··    管理多个连接

·     支持与车载或桌面蓝牙设备的对接

··    框架支持电话语音通道的选通以及与车载或桌面蓝牙设备进行A2DP音频流传输

 

Android 2.2 release (Froyo)

平台特性

·     基于 Bluez 4.47 和 Linux Kernel 2.6.32

·     这一版没有添加新的应用规范

·     增加使用共享通信录的功能

·     增加导出所有联系人的功能-可以用于向car kits

·     提高对耳机和车载设备的兼容性

 

未来的发布

下面这一部分针对目前正在开发中的下一版本的支持特性提供了一个粗略的指南。 下表中的特性可能未经提醒就被修改。在邮件列表中发布规划方面的建议是不可能的。

·     支持更多的应用规范...

·     提高对耳机和车载设备的兼容性

·     蓝牙模拟器的支持

·     蓝牙低功耗


原创粉丝点击