Android 蓝牙学习 @# Android 蓝牙
目录
1. 架构
Android 8[引入HIDL] 开始蓝牙的架构就没怎么变化了。
上图是google 关于蓝牙架构的介绍哈,资料参考 蓝牙概览
1.1 应用框架
处于应用框架级别的是应用代码,它利用 android.bluetooth API 与蓝牙硬件进行交互。此代码在内部通过 Binder IPC 机制调用蓝牙进程。
1.2 蓝牙系统服务
蓝牙系统服务(位于 packages/apps/Bluetooth
中)被打包为 Android 应用,并在 Android 框架层实现蓝牙服务和配置文件。该应用通过 JNI 调用 HAL 层。
1.3 JNI
与 android.bluetooth 相关联的 JNI 代码位于 packages/apps/Bluetooth/jni
中。当发生特定蓝牙操作时(例如发现设备时),JNI 代码会调用 HAL 层并从 HAL 接收回调。
1.4 HAL
硬件抽象层定义了 android.bluetooth API 和蓝牙进程会调用的标准接口,并且您必须实现该接口才能使蓝牙硬件正常工作。蓝牙 HAL 的头文件是 hardware/libhardware/include/hardware/bluetooth.h
。另外,请查看所有 hardware/libhardware/include/hardware/bt_*.h
文件。
1.5 蓝牙堆栈
系统为您提供了默认蓝牙堆栈(位于 system/bt
中)。该堆栈会实现常规蓝牙 HAL,并通过扩展程序和更改配置对其进行自定义。
1.6 供应商扩展程序
要添加自定义扩展程序和用于跟踪的 HCI 层,您可以创建一个 libbt-vendor 模块并指定这些组件。
2. 代码结构
上面是google定义的模块结构,研发人员习惯从代码层次来定义架构
1. APP包括TVSettings APK和 Bluetooth APK
2. Framwork 包括为标准的android API,被系统app调用;
3. JNI为Bluetooth APK提供操作协议栈控制底层硬件的接口;
4. HAL包括
4.1 HIDL框架为Android原生提供的HAL框架;
4.2 Bluedroid 为蓝牙协议栈
4.3 Vendor HAL为蓝牙芯片厂商提供的操作驱动的接口
5. Driver 包括蓝牙驱动,硬件接口(蓝牙和主CPU硬件连接)驱动
6. Hardware同样对应蓝牙芯片和蓝牙和主CPU连接硬件