当前位置:   article > 正文

Android蓝牙协议栈fluoride(一) - 概述_蓝牙的hal层

蓝牙的hal层

发展

Android 4.2之前的版本采用Linux官方的蓝牙协议栈BlueZ,Android 4.2开始使用google和Broadcom共同开发的Bluedroid来替代BlueZ,但早期的Bluedroid并不完善,存在较多问题,更新迭代后将其更名为fluoride。接下来的系列文章将逐步分析该协议栈的实现。

蓝牙框架

Android 7.x 及更低版本的架构

Android 7.x 及更低版本的架构

  • 应用框架
    处于应用框架级别的是应用代码,它利用 android.bluetooth API 与蓝牙硬件进行交互。此代码在内部通过 Binder IPC 机制调用蓝牙进程。
  • 蓝牙系统服务
    蓝牙系统服务(位于 packages/apps/Bluetooth 中)被打包为 Android 应用,并在 Android 框架层实现蓝牙服务和配置文件。该应用通过 JNI 调用 HAL 层。
  • JNI
    与 android.bluetooth 相关联的 JNI 代码位于 packages/apps/Bluetooth/jni 中。当发生特定蓝牙操作时(例如发现设备时),JNI 代码会调用 HAL 层并从 HAL 接收回调。
  • HAL
    硬件抽象层定义了 android.bluetooth API 和蓝牙进程会调用的标准接口,并且您必须实现该接口才能使蓝牙硬件正常工作。蓝牙 HAL 的头文件是 hardware/libhardware/include/hardware/bluetooth.h。此外,请查看所有 hardware/libhardware/include/hardware/bt_*.h 文件。
  • 蓝牙协议栈
    系统为您提供了默认蓝牙协议栈(位于 system/bt)。该协议栈实现常规蓝牙 HAL,并通过扩展程序和更改配置对其进行自定义。
  • 供应商扩展
    如需添加自定义扩展程序和用于跟踪的 HCI 层,您可以创建一个 libbt-vendor 模块并指定这些组件。

Android 8.0及以后的框架

Android 8.0及以后的框架

  • 应用框架
    处于应用框架级别的是应用代码,它使用 android.bluetooth API 与蓝牙硬件进行交互。此代码在内部通过 Binder IPC 机制调用蓝牙进程。
  • 蓝牙系统服务
    蓝牙系统服务(位于 packages/apps/Bluetooth 中)被打包为 Android 应用,并在 Android 框架层实现蓝牙服务和配置文件。此应用通过 JNI 调用原生蓝牙协议栈。
  • JNI
    与 android.bluetooth 相关联的 JNI 代码位于 packages/apps/Bluetooth/jni 中。当发生特定蓝牙操作时(例如发现设备时),JNI 代码会调用蓝牙协议栈。
  • 蓝牙协议栈
    AOSP 中提供了默认蓝牙协议栈(位于 system/bt 中)。该协议栈实现常规蓝牙 HAL,并通过扩展程序和更改配置对其进行自定义。
  • 供应商实现
    供应商设备使用硬件接口设计语言 (HIDL) 与蓝牙协议栈交互。

fluoride

fluoride 实现了框架中的蓝牙协议栈,单独获取源码的方法为:

mkdir ~/fluoride
cd ~/fluoride
git clone https://android.googlesource.com/platform/system/bt
  • 1
  • 2
  • 3

该系列文章使用 6e3c984806aa0ba9e8a836ef9fed12c1207a161e 提交的源码,即:

git checkout -b branch_tmp 6e3c984806aa0ba9e8a836ef9fed12c1207a161e
  • 1

目录结构

主要目录如下:

.
├── audio_a2dp_hw  -- audio相关
├── audio_bluetooth_hw  -- audio相关
├── audio_hal_interface  -- audio相关
├── audio_hearing_aid_hw   -- audio相关
├── binder -- binder接口定义
├── bta  -- Bluetooth Application
├── btcore -- Bluetooth Core,蓝牙数据类型定义和对这些数据类型的操作。
├── btif  -- Bluetooth Interface,JNI接口
├── hci  -- Host Controller Interface,通过HCI协议实现和蓝牙芯片的通信
├── main  -- Main stack entrypoint,访问协议栈的入口
├── osi  -- Operating System Interface,操作系统接口
├── service  -- 服务进程
├── stack -- BT Host 实现
├── tools -- Tools,常用工具
└── vnd -- Vendor,厂商实现的API
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/326532
推荐阅读
相关标签
  

闽ICP备14008679号