BlueDroid代码分析之BlueDroid简介


Android4.2之前,Google一直使用的是Linux官方蓝牙协议栈,即知名老牌开源
项目BlueZ。BlueZ实际上是 高通 公司在2001年5月基于GPL协议发布的一个开源项目,该 项目仅发布一个月后就被Linux之父Linux Torvalds纳入了Linux内核,并做为Linux 2.4.6内核的官方蓝牙协议栈。随着Android设备的流行,BlueZ也得到了极大的完善和扩展。例如Android 4.1中BlueZ的版本升级为4.93,它支持蓝牙核心规范4.0,并实现了绝大部分的Profiles。 但是从Android 4.2即Jelly Bean开始,Google便在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ。虽然因为时间及成熟度的原因,大部分手机厂商在Android 4.2中仍继续使用BlueZ。但是BlueZ的创始者,高通公司也将在基于其芯片的Android参考设计中去除BlueZ,并仅支持BlueDroid。BlueZ的未来如何笔者姑且不论。不过,能让高通改弦易辙,BlueDroid自有其合理之处。相比BlueZ,BlueDroid最值得称道的地方就是其框架结构变得更为简洁和清晰。另外,借助HAL(Hardware Abstraction Layer,硬件抽象层),BlueDroid终于不再和dbus有任何瓜葛。下图所示为Android 4.2中BlueDroid的框架结构图。

BlueDroid代码分析之BlueDroid简介_第1张图片

bluedroid 整体协议栈架构:

BlueDroid代码分析之BlueDroid简介_第2张图片

下面逐一进行讲解:
1.Applications:Android蓝牙应用程序,就是使用了蓝牙的API的程序 java Framework:提供给应用使用的API,我们平时使用的BluetoothAdapter,BluetoothDevice,BluetoothSocket等。
2.BluetoothAPP:其实说起来,这个应该也是属于java framework范畴,不过由于它比较特殊,所以独立出来了,提供所有的上层服务以及与Bluedroid底层进行交互。
3.其中btAdapter主要提供蓝牙的基本操作,比如enable, disable, discovery, pair, unpair, createRfcomm等,其他的就都是Profile的各自的Service了。

4.Bluedroid:蓝牙协议栈,提供所有蓝牙的实际操作,开关蓝牙,HCI,ACL,SCO,L2CAP,RFComm,蓝牙的所有Profile等。


这里Bluedroid分为三部分:
BTIF(Bluetooth Interface):提供所有Bluetooth.apk需要的API(使用HAL)
BTA(Bluetooth Application):蓝牙应用,一般是指蓝牙的Profile的Bluedroid实现。
Stack:这个很复杂,实现的所有蓝牙底层的操作,其中还要分为btm(Bluetooth manager),btu(Bluetooth Upper Layer)等。

整个系统的架构很简单,因为大多的事情都是在Bluedroid层里面做的,上层只管去Call和Callback就是了。接下来我会通过bluedroid的初始化和hid profile的enable,以及hid set report数据流,来分析和熟悉bluedroid。

你可能感兴趣的:(蓝牙,BlueTooth)