蓝牙应用程序 Android Bluetooth架构
Android系统蓝牙的整体架构
Applications:Android蓝牙应用程序,就是使用蓝牙的API的程序;
Framework:提供给应用使用的API,我们平时使用的BluetoothAdapter,B
Android Bluetooth架构 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 framework层的作用只要是连接bluetooth service,为其它应用提供使用蓝牙的接口,起连接上下层的作用,没有太多的逻辑,下面只给出概要框图,不做过多描述。 From: BlueDroid架构介绍 From: BlueDroid主要分为3个部分:BTIF, BTA, Stack BTIF:作为bluedroid与上层java framework的通道,提供bluedroid对外的接口,提供所有Bluetooth.apk需要的API BTA:提供各种profile的实现和处理 Stack:协议实现与连接管理 BTE:提供具体芯片相关的fops BTU:承接BTA与HCI BTM:蓝牙配对与链路管理 HCI:读取或写入数据到蓝牙hw 下文未标注部分均来自: Java Application/JNI Bluetooth app运行于Java层,并通过JNI和协议栈的接口(stack’s Interface Layer,BTIF)进行如下交互: JNI层的作用是将Java调用转化为C函数的调用,同时为应用和协议栈提供了调用/回调的交互能力。 BTIF (Bluetooth Profile Interface) 作为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 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 BTE提供具体芯片相关的fops。通过HCI与厂商蓝牙芯片交互以实现了蓝牙协议栈的通用功能和相关协议。BTE还包括一个统一内核接口(GKI)。 HCI and HAL Layers 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 核心协议栈(Core Stack)会被编译成一个linux动态库蓝牙应用程序,其中包含的模块如下图所示。每一个模块都由api函数和函数回调接口组成。 TASK管理 Bluedroid中,协议栈,蓝牙规范和蓝牙应用都运行在一个用户进程"com.android.bluetooth"之中。 蓝牙代码在以下四种task代表的上下文(context)中运行: GKI模块 内核统一接口。该层是一个适配层,适配了OS相关的进程、内存相关的管理,还可以用于线程间传递消息 。主要通过变量gki_cb实现对进程的统一管理。GKI模块在Bluedroid中主要用于线程间通信。 蓝牙总体流程图 从流程图我们可以看出来 蓝牙应用通过binder和系统蓝牙Service进行通讯 ,然后通过Jin与蓝牙HAL层进行通讯. From: Bluetooth各模块总图 From: bluedroid的通用架构框图 From: 名词解释 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 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |