当前位置: 首页>移动开发>正文

android 13蓝牙框架 android蓝牙架构

Android默认提供的蓝牙栈包括两个部分

BTE(Bluetooth Embedded System)

实现蓝牙的核心功能

BTA(Bluetooth Application Layer )

和Android framework交互

还需要实现Android 6.0 蓝牙HCI,以便更从分的使用在Android5.0添加的低功耗API

结构

系统蓝牙服务使用JNI与蓝牙栈交互,与应用程序使用Binder IPC。开发人员通系统服务访问蓝牙的各种配置文件(profile)。下图展示蓝牙的结构。

ape_fwk_bluetooth.png

应用层

应用层软件通过蓝牙API与蓝牙硬件交互,应用层通过Binder IPC调用蓝牙API

蓝牙系统服务

蓝牙系统服务作为Android APP,位于packages/apps/Bluetooth目录,还实现了位于Android framework层的蓝牙服务以及profiles接口。通过jni调用HAL层。

应用层Bluetooth APP,作为系统bluetooth的核心进程,主要任务是通过JNI调用Bluetooth HAL层,完成蓝牙请求.

JNI

和蓝牙相关的jni代码位于packages/apps/Bluetooth/jni路径下。JNI调用HAL层代码,当发生某些蓝牙操作发生时,还会接受来自HAL层的回调;比如当发现蓝牙设备时。

HAL

硬件抽象层定义的蓝牙API和蓝牙进程调用的标准接口,实现这些标准接口可保证蓝牙设备的正常工作。硬件抽象层的相关的头文件放在

hardware/libhardware/include/hardware/bt_*.h

HAL 由蓝牙核心规范抽象层和蓝牙应用规范硬件抽象层组成.

Bluetooth stack

默认实现的蓝牙栈位于system/bt 目录下面。该栈实现了通用的蓝牙HAL,通过扩展和更改配置可实现蓝牙的定制。

BTA实现蓝牙设备管理,状态管理和一下规范,与应用程序交互;BTE通过HCI与厂商蓝牙芯片交互,实现蓝牙协议栈的通用功能;而且BTE还包括同意内核接口(GKI ??)

Vendor extensions

通过创建libbt-vendor模块以及制定这些组件,可以实现自定义扩展和HCI层的追踪(??)。

厂商自定义实现的功能和组件

HAL实现

蓝牙HAL位于/hardware/libhardware/include/hardware/bluetooth.h。为与实现与蓝牙栈的交互,需要实现bluetooth.h文件中包含的基本接口。

蓝牙profile文件也位于该目录,详情参看HAL File Reference

部分相关profile,如下

bt_av.h :定义A2dp profile 接口

bt_gatt.h, bt_gatt_client.h, and bt_gatt_server.h :这些文件定义了GATT profile接口

bt_hf.h : 定义HFP profile接口

bt_hh.h : 定义了HID profile接口

bt_pan.h: 定义了 PAN profile接口

bt_rc.h: 定义了AVRCP profile 接口

bt_sock.h :当以RFCOMM sockets 接口

蓝牙的实现不局限于HAL中定义的功能和配置。在system/bt目录下,能找到蓝牙栈的默认实现,即实现HAL的默认实现以及额外的功能和配置。

自定义蓝牙栈(Customizing the Native Bluetooth Stack)

通过一下步骤可以实现蓝牙默认栈的自定义功能

自定义蓝牙配置文件

如果你提供的蓝牙profiles,在android HAL层没有接口,需要以SDK形式提供给开发者,便于开发者使用这些profile,确保这些API在蓝牙系统进程中可用,并将它们添加到默认堆栈中。

自定义扩展和配置

通过创建libbt-vendor模块,可以添加额外的AT命令或特定于设备的配置更改。例子位于 /hardware/broadcom/libbt目录

主机控制器接口(HCI)

通过创建libbt-hci模块,提供自主的HCI,多用于调试。例子位于 external/bluetooth/hci目录下

翻译仅供参考

参考


https://www.xamrdz.com/mobile/4hs1961417.html

相关文章: