Android 蓝牙

Android Bluetooth

2017-05-22  本文已影响104人  Galileo_404

原文地址:
https://source.android.com/devices/bluetooth

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

还需要实现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,如下

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

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

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

翻译仅供参考

参考

上一篇下一篇

猜你喜欢

热点阅读