加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

蓝牙应用程序 Android Bluetooth架构

发布时间:2022-12-05 14:31:24 所属栏目:应用 来源:互联网
导读: Android Bluetooth架构
Android系统蓝牙的整体架构

Applications:Android蓝牙应用程序,就是使用蓝牙的API的程序;
Framework:提供给应用使用的API,我们平时使用的BluetoothAdapter,B

Android Bluetooth架构

Android系统蓝牙的整体架构

蓝牙应用广不_蓝牙应用程序_蓝牙40 应用

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

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!