1.5 HAL 层移植 Bluetooth 的 HAL 层主要有 Bluedroid 协议栈与 MT6620 vendor 提供底层库文件组成。 需要我们重点关注的有 bluetooth.default.so 该动态库文件提供了 Framework 层调用 HAL 层的 API 接口,同时向下调用 libbt-hci.so 。 bluetooth.default.so 包含两个静态库:libbt-brm_stack.a libbt-brm_bta.a . libbt-brm_stack.a 提 供 Bluetooth 各种 profiles 的支持, 比如 a2dp,hid,pan 等等, libbt-brm_bta.a 用于与 framdwork 层进行通信. libbt-hci.so 该动态库提供 bluetooth.default.so 的底层支持,另外他会调用 libbt-vendor.so 接口, 通过串口发送,接收命令,数据的操作也是通过该动态库实现的。他位于 bluedroid 源码目录 hci 文件夹下。 libbt-vendor.so 厂 商 库 文 件 , 用 于 实 现 厂 商 提 供 的 蓝 牙 模 块 特 性 支 持 , 库 文 件 位 于 android4.4/iTop4412_KK4.4/hardware/mediatek/bt/combo_mt66 目录下。 1.5.1 Bluedroid 从 Android 4.2 开始,Bluetooth stack 发生了重大改变:从 Bluez 换成了由 Google 和 Broadcom 联合开发的 Bluedroid(当然,核心的部分还是 Broadcom 的,Google 主要是做了和上层 Framework 相关的部分)。 Bluedroid 和 Bluez 相比,有如下优点: ■ 层次结构清晰。各个 profile 对上层接口统一,便于增加新的 profile; ■ 增加了 HAL 层,便于移植。 ■ 去掉了 DBus,Framework 的 Java 代码直接调用到 Bluedroid 的 Native 代码。 但是 Android 4.2 中的 Bluedroid 与 Android 4.0 中的 Bluez 相比,功能要少,例如不支持 AVRCP 1.3, Bug较多,例如某些蓝牙耳机不能重拨最后一个电话。最重要的是4.2的Bluedroid不支持BLE。 不过在刚刚发布的 Android 4.3 中已经有了很多改进,AVRCP 1.3 和 BLE 都得到了支持。 目前有一些Android 4.1或4.2的设备是支持BLE的,但是都是采用的Vendor自己的解决方案, 比如 Bluetooth stack 采用 Bluez 5.x,再提供 Vendor BLE Android SDK. 现在 Android 4.4 已经发布, 从未来发展趋势来看,如果有人要学习 Bluetooth in Android,建议不要再研究 Bluez,最好转向 Bluedroid。 以下是 Android 4.4 中 Bluetooth 相关代码之分布: 笔者在进行 Bluetooth 的调试过程中,使用 Logcat 命令输出 Android 的调试信息,在 Android 的Setting界面开启蓝牙功能,根据打印信息的输出,发现Enable Bluetooth的过程中出现了问题, 最后查找原因是因为 MT6620 芯片工作前需要需要下载固件补丁,这个过程需要花费一定的时间, 然后 bluetooth.default.so 库文件代码中对开启 Bluetooth 有一定的时间限制,默认情况下是 3000 毫秒的超时时间,超时后会 disable 蓝牙,后经笔者修改为 20 000 毫秒,这样即可 enable 蓝牙 芯片,从而进入工作状态. 修改文件: iTop4412_KK4.4/external/bluetooth/bluedroid/Android.mk 1.5.2 init.connectivity.rc 文件 init.connectivity.rc 文件路径: iTop4412_KK4.4/hardware/mediatek/config/combo_mt66xx/ init.combo_mt66xx.rc 原始文件名称为 init.combo_mt66xx.rc,拷贝到 ramdisk 的 root 目录下面名称变更为 init.connectivity.rc 文件 。 我们在该文件增加了加载驱动模块库操作,运行 wmt_lanucher 服务操作,另外需要注意 文件原有的创建 bluetooth 相关目录操作,及修改权限,变更拥有者,这些 command 非常 的重要,比如: # Load Blue module insmod /system/lib/modules/mtk_stp_bt.ko chmod 0660 /dev/stpbt chown bluetooth system /dev/stpbt mkdir /data/bluetooth 0711 bluetooth bluetooth mkdir /data/misc/bluedroid 0771 bluetooth bluetooth 1.5 总结 用户在移植 HAL 层之前可以先使用 MTK 提供的蓝牙测试工具 autobt 进行测试,该测试 工具脱落复杂的 HAL 层,直接调用 libbt-vendor.so 也就是厂商自己的库文件,在 Android 的 命令行中执行即可,可以使用该命令查询其他的蓝牙设备,发送,接收文件等等。是判断蓝 牙硬件是否正常工作的有力工具,使用autobt测试通过后,再调试Android HAL及上层部分。 autobt 工具的源码位于: iTop4412_KK4.4/hardware/mediatek/utility/hw_test_tool/bluetooth/src/tool 另外 MTK 官方提供了 Bluetooth 的多个补丁,路径: APEX_Android_4.4_MP_SW_package_V2.0/Document/BT_patch_description(must read) 这些补丁是比较重要的,有关于蓝牙基础连接方面的,也有关于蓝牙文件发送接收,蓝 牙鼠标,蓝牙耳机方面的,需要根据您的产品需求打对应的补丁,我们发布的 Android4.4 代码中已经打上了蓝牙基础连接,和文件发送接收方面的补丁,其他的补丁未处理.
HAL 层修改完成后在 Android4.4 的 Setting 里面打开 Bluetooth,就可以扫描到其他蓝牙 设备,然后进行配对,配对完成后就可以进行文件的传输操作了,笔者仅测试了蓝牙的文件 发送与接收功能,其他的蓝牙功能比如蓝牙耳机,蓝牙鼠标的使用均未进行测试,不过有了 文件发送接收的测试基本说明了蓝牙的 Porting 是 OK 的,如果您有兴趣或者需求,可以移 植蓝牙其他更丰富的功能与应用。
|