原文链接地址:http://source.android.com/porting/bluetooth.html#androidBluetoothPorting

本文涵盖以下方面

· 移植

· 编译

· 疑难解答

· 工具

· 支持特性

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

Android 在应用框架framework中实现HSPHFP(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 01.

Post 1.0: Android 框架使用 linuxrfkill 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 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.

后台进程的Log

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

hciconfig -a hcitool

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

工具

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

· hciconfig

· hcitool

· hcidump

· sdptool

· dbus-send

· dbus-monitor

更多相关文章

  1. ProGuard Eclipse Android
  2. Android(安卓)- Rerofit-RxJava(转载)
  3. Activity属性设置大全
  4. Android(安卓)使用WebView
  5. 考虑Android向后兼容的几条黄金法则
  6. Android(安卓)ApiDemos示例解析(160):Views->Layouts->TableLayo
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)启动模拟器是出现“Failed
  2. Android之Styles And Themes学习
  3. Android Framework系列之IPC(一)
  4. Android(安卓)判断网络状态及开启网路
  5. android实现底部菜单栏(FragmentTabHost)
  6. 畅享英特尔® 移动科技 开启Android 应用
  7. 美化你的android程序:自定义ListView背景
  8. 微软发布 mircosft remote desktop for a
  9. Android实例剖析笔记(五)
  10. 手势识别兼容Android 1.x和2.x的代码