蓝牙,wifi,3g 作为移动端平台最常见的dongle,蓝牙现在应用越来越广泛,特别是现在流行智能终端,多点互控,wifi,3g等资源消耗大,红外又有距离和障碍物的限制,所以说蓝牙通信在未来其它的不说,单在智能TV上应用的情景将会越来越广泛.这里只是初步理解学习,之后将会一层一层从kernel直到application
撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/41283879
先看一张层次图:
可以看到大体分成了三个部分,
最上层就是 application framework,供应用程序使用的API,
java层的api类的 源码路径:framework/base/core/java/android/bluetooth
以及packages/apps/Bluetooth/src/com/android/bluetooth下的bluetooth services (以Bluetooth.apk形式编译进系统)
第二层由上面的packages/apps/Bluetooth下的service调用到的本地的JNI开始,调用到hardware中的定义(hardware/libhardware/include/hardware/bluetooth.h
hardware/libhardware/include/hardware/bt_*.h
),
bluetooth.default.so 的实现放在external/bluetooth/bluedroid
这里面就是bluetooth的核心协议栈
可以看到分为了几部分,后面介绍分别的代表的作用
其中还有一个抽象的接口协议层hci,用于与不同厂家的Vendor 连通,Vendor HCI中是需要实现必需的接口的
最下面 内核层,是linux的通用驱动了,这里的都是linux 对与蓝牙操作涉及到的驱动模块
之前的android版本我不熟,但是网上的说android4.2相对比之前的,蓝牙改动很大,把原来的BlueZ替换成了Bluedroid(也就是external中的),把原来放在framework中的bluetooth service jni 改放到了package中app中,
就我目前调试来看 之前的/system/bluetooth也没有用到.
这是来自google官网 http://source.android.com/devices/bluetooth.html 里面的一张图:
这就是从application到vendor,其中Bluetooth Stack中模块则由Bluetooth Application Layer(缩写为BTA)和Bluetooth Embedded System(缩写为BTE)两大部分组成。
BTA 实现了蓝牙设备管理、状态管理及一些应用规范,与Android framework 交互.
BTE 则通过HCI与厂商蓝牙芯片交互以实现了蓝牙协议栈的通用功能和相关协议。另外,BTE还包括一个统一内核接口(GKI),蓝牙芯片厂商可借助GKI快速轻松得移植蓝牙协议栈.
后续再来分析每个层次的模块运作与上下交互~