Android蓝牙驱动开发总结

Android之蓝牙驱动开发总结一 Bluetooth基本概念1二 Android Bluetooth架构12.1 Bluetooth架构图12.2 Bluetooth代码层次结构3三 Bluetooth协议栈分析43.1 蓝牙协议栈43.2 Android与蓝牙协议栈的关系5四 Bluetooth之HCI层分析54.1 HCI层与基带的通信方式64.2 包的分析及研究74.3 通信过程的研究与分析8五 Bluetooth之编程实现85.1 HCI层编程85.2 L2CAP层编程105.3 SDP层编程12六 Bluetooth之启动过程实现136.1 Bluetooth启动步骤146.2 Bluetooth启动流程146.3 Bluetooth数据流向146.4 Bluez控制流程146.5 Bluetooth启动过程分析15七 Bluetooth之驱动移植157.1 android系统配置157.2 启动项修改167.3 电源管理rfkill驱动167.4 Rebuild Android image and reboot167.5 实现BT睡眠唤醒机制167.6 系统集成17八 Bluetooth之调试与编译178.1 Bluetooth驱动调试178.2 Bluetooth 调试工具18九 Bluetooth之应用程序开发189.1 Bluetooth的API开发189.2 The Basics开发189.3 Bluetooth Permissions开发199.4 Setting Up Bluetooth服务199.5 Finding Devices服务209.6 Connecting Devices服务229.7 Managing a Connection服务269.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, rfcommbluez层:这是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/java/android/bluetooth/包含了bluetooth的JAVA类。(2)JNI层frameworks/base/core/jni/android_bluetooth_开头的文件定义了bluez通过JNI到上层