赞
踩
Android系统蓝牙的整体架构
Applications:Android蓝牙应用程序,就是使用蓝牙的API的程序;
Framework:提供给应用使用的API,我们平时使用的BluetoothAdapter,BluetoothDevice,BluetoothSocket等;
Bluetooth Service:即Bluetooth APP(Bluetooth.apk)这个应该也是属于java framework范畴,不过由于它比较特殊,所以独立出来,提供所有的上层服务以及与Bluedroid底层进行交互。其中btAdapter主要提供蓝牙的基本操作,比如enable, disable, discovery, pair, unpair, createRfcomm等,其他的就都是Profile的各自的Service了;
Bluedroid:蓝牙协议栈,提供所有蓝牙的实际操作,开关蓝牙,蓝牙的管理,搜索管理,链路管理,各种profile的实现,包括HCI,ACL,SCO,L2CAP,各种profile等;
整个系统的架构很简单,因为大多的事情都是在Bluedroid层里面做的,上层只管去Call和Callback就是了,这部分我们在后面分析代码做详细分析。
Bluetooth framework层的作用只要是连接bluetooth service,为其它应用提供使用蓝牙的接口,起连接上下层的作用,没有太多的逻辑,下面只给出概要框图,不做过多描述。
From: https://blog.csdn.net/zjli321/article/details/52402968
From: https://blog.csdn.net/zjli321/article/details/52402968
BlueDroid主要分为3个部分:BTIF, BTA, Stack
BTIF:作为bluedroid与上层java framework的通道,提供bluedroid对外的接口,提供所有Bluetooth.apk需要的API
BTA:提供各种profile的实现和处理
Stack:协议实现与连接管理
BTE:提供具体芯片相关的fops
BTU:承接BTA与HCI
BTM:蓝牙配对与链路管理
HCI:读取或写入数据到蓝牙hw
下文未标注部分均来自: https://segmentfault.com/a/1190000002982295
Bluetooth app运行于Java层,并通过JNI和协议栈的接口(stack’s Interface Layer,BTIF)进行如下交互:
JNI层的作用是将Java调用转化为C函数的调用,同时为应用和协议栈提供了调用/回调的交互能力。
作为bluedroid与上层java framework的通道,提供了操作接口.
Bluetooth Profile Interface在Bluetooth Application task (BTA)和JNI层之间充当了胶水层的角色,对上层(JNI)提供了所有profile功能性的接口。这一层上有一个Bluetooth Interface Instance,所有Profile的操作函数都注册在其中(GAP, AV, DM, PAN, HF,HH, HL, Storage, Sockets)。Client应用通过操作这个Instance来操作Profile。
BTA用于和Bluetooth Application层交互,实现蓝牙设备管理、状态管理以及一些Profile的操作和状态机。
BTA是Bluetooth Application的缩写,从上层下来的请求都要经过这个BTA层,通过发送消息的方式将请求丢到BTA层中处理。
所有BTA消息送到BTU_TASK中,由bta_sys_event来处理;如果是Gatt相关的消息,由bta_gatt_hdl_event处理。
Profile状态机包含以下几个主要组成部分:
BTA_profilexx_act.c:包含对应Profile的“Action”函数,一般来说由Profile状态机调用。
BTA_profilexx_api.c: 对应Profile的API的具体实现。通常它们是提供给用户使用,完成usecase的函数和回调
BTA_profilexx_ci.c:对应Profile的“call-in”函数的实现(供Profile以外的模块调用)
BTA_profilexx_co.c: 对应Profile的“call-out”函数的实现(调用Profile以外的模块)
BTA_profilexx_main.c: 对应Profile的状态机和处理协议栈上传消息的handler的具体实现。主要负责维护Profile状态的变化及其引起的“Action”
BTE提供具体芯片相关的fops。通过HCI与厂商蓝牙芯片交互以实现了蓝牙协议栈的通用功能和相关协议。BTE还包括一个统一内核接口(GKI)。
HCI层由libbt-hci共享库组成,负责通讯层(transport layer,如UART H4或者SMD channel)和协议栈之间的交互。HCI层抽象了BTE的ops,将BTE的ops抽象成bluedroid的接口。
HAL层libbt-vendor共享库组成,是各厂商的解决方案的特定实现。HAL层实现了各厂商对OPCODE的处理逻辑,这些OPCODE声明在HCI层的bt_vendor_lib.h中。
核心协议栈(Core Stack)会被编译成一个linux动态库,其中包含的模块如下图所示。每一个模块都由api函数和函数回调接口组成。
Bluedroid中,协议栈,蓝牙规范和蓝牙应用都运行在一个用户进程"com.android.bluetooth"之中。
蓝牙代码在以下四种task代表的上下文(context)中运行:
内核统一接口。该层是一个适配层,适配了OS相关的进程、内存相关的管理,还可以用于线程间传递消息 。主要通过变量gki_cb实现对进程的统一管理。GKI模块在Bluedroid中主要用于线程间通信。
从流程图我们可以看出来 蓝牙应用通过binder和系统蓝牙Service进行通讯 ,然后通过Jin与蓝牙HAL层进行通讯.
From: https://blog.csdn.net/ChaoLi_Chen/article/details/108285847
From: https://blog.csdn.net/javon_hzw/article/details/48731281
From: https://blog.csdn.net/xiaojsj111/article/details/12647923
HAL :HardwareAbstraction Layer
Btif :Bluetooth interface
Bta :Bluetooth application
Btu :Bluetooth uper layer
Bte :Bluetooth embedded layer
Btm :Bluetooth device manager
CO : callout\CI: call in
HF : Handsfree Profile
HH :HID Host Profile
HL :Health Device Profile
AV :audio\vidio
Ag :audiogateway
Ar :audio/videoregi stration
Gattc :GATT client
Gatts :GATT server
BLE :Bluetooth Low Energy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。