Android之蓝牙驱动开发总结

一 Bluetooth基本概念1

二 Android Bluetooth架构1

2.1 Bluetooth架构图1

2.2 Bluetooth代码层次结构3

三 Bluetooth协议栈分析4

3.1 蓝牙协议栈4

3.2 Android与蓝牙协议栈的关系5

四 Bluetooth之HCI层分析5

4.1 HCI层与基带的通信方式6

4.2 包的分析及研究7

4.3 通信过程的研究与分析8

五 Bluetooth之编程实现8

5.1 HCI层编程8

5.2 L2CAP层编程10

5.3 SDP层编程12

六 Bluetooth之启动过程实现13

6.1 Bluetooth启动步骤14

6.2 Bluetooth启动流程14

6.3 Bluetooth数据流向14

6.4 Bluez控制流程14

6.5 Bluetooth启动过程分析15

七 Bluetooth之驱动移植15

7.1 android系统配置15

7.2 启动项修改16

7.3 电源管理rfkill驱动16

7.4 Rebuild Android image and reboot16

7.5 实现BT睡眠唤醒机制16

7.6 系统集成17

八 Bluetooth之调试与编译17

8.1 Bluetooth驱动调试17

8.2 Bluetooth 调试工具18

九 Bluetooth之应用程序开发18

9.1 Bluetooth的API开发18

9.2 The Basics开发18

9.3 Bluetooth Permissions开发19

9.4 Setting Up Bluetooth服务19

9.5 Finding Devices服务20

9.6 Connecting Devices服务22

9.7 Managing a Connection服务26

9.8 Working with Profiles服务28

十 总结与疑问29

一 Bluetooth基本概念

蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。它的传输距离为10cm~10m,如果增加功率或是加上某些外设便可达到100m的传输距离。它采用2.4GHz ISM频段和调频、跳频技术,使用权向纠错编码、ARQ、TDD和基带协议。TDMA每时隙为0.625μs,基带符合速率为1Mb/s。蓝牙支持64kb/s实时语音传输和数据传输,语音编码为CVSD,发射功率分别为1mW、2.5mW和100mW,并使用全球统一的48比特的设备识别码。由于蓝牙采用无线接口来代替有线电缆连接,具有很强的移植性,并且适用于多种场合,加上该技术功耗低、对人体危害小,而且应用简单、容易实现,所以易于推广。

蓝牙技术的系统结构分为三大部分:底层硬件模块、中间协议层和高层应用。底层硬件部分包括无线跳频(RF)、基带(BB)和链路管理(LM)。无线跳频层通过2.4GHz无需授权的ISM频段的微波,实现数据位流的过滤和传输,本层协议主要定义了蓝牙收发器在此频带正常工作所需要满足的条件。基带负责跳频以及蓝牙数据和信息帧的传输。链路管理负责连接、建立和拆除链路并进行安全控制。

二 Android Bluetooth架构

2.1 Bluetooth架构图

Android蓝牙系统分为四个层次,内核层、BlueZ库、BlueTooth的适配库、BlueTooth的JNI部分、Java框架层、应用层。下面先来分析Android的蓝牙协议栈。

图1 面向库的架构视图

Linuxkernel层:

bluez协议栈、uart驱动, h4协议, hci,l2cap, sco, rfcomm

bluez层:

这是bluez用户空间的库,开源的bluetooth代码,包括很多协议,生成libbluetooth.so。

library层:

libbluedroid.so等

framework层:

实现了Headset /Handsfree 和 A2DP/AVRCP profile,但其实现方式不同Handset/Handfree是直接 在bluez的RFCOMM Socket上开发的,没有利用bluez的audio plugin,而A2DP/AVRCP是在bluez的audio plugin基础上开发的,大大降低了实现的难度。

Android的蓝牙协议栈采用BlueZ来实现,BlueZ分为两部分:内核代码和用户态程序及工具集。

图2 面向进程的架构视图

2.2 Bluetooth代码层次结构

(1)JAVA层

frameworks/base/core/jav