openvela 蓝牙概述
openvela 蓝牙已经通过 Bluetooth 5.4 认证。openvela 蓝牙目前还能够支持多种开源、闭源协议栈,如Zephyr、Bluez、Bluedroid、Barrot等。
一、简介
openvela 蓝牙已经通过 Bluetooth 5.4 认证。目前支持的蓝牙能力包括:
- Core
- BR/EDR/BLE
- GAP
- L2CAP
- GATT Client/Server
- A2DP SRC/SNK
- AVRCP CT/TG
- HFP AG/HF
- PAN
- SPP
- HID
- HOGP
- LEA
- TMAP
- CAP
- BAP/ASCS/PACS/BASS
- CSIP/CSIS
- MCP/MCS
- CCP/TBS
- VCP/VCS
- Mesh
openvela 蓝牙目前还能够支持多种开源、闭源协议栈,如Zephyr、Bluez、Bluedroid、Barrot等。
二、架构图
- openvela 蓝牙 Framework 为 Android Native、可穿戴、音箱和 IoT 等应用提供了统一的编程接口 API。
- 这些 API 提供的蓝牙能力包括开关、扫描、连接、配对等,均由一套完善的蓝牙服务组件来完成。
- 为了支持多种协议栈,蓝牙 Framework 定义了一套统一的协议栈适配层接口 SAL API,使各个三方协议栈,可以方便地接入 openvela。接入新的协议栈时,除了适配 SAL API,还需要针对 NuttX 的 POSIX API 来适配,从而使其可以更高效地运行在 NuttX 上。
三、代码目录
frameworks_bluetooth 仓库下载后,会映射到文件夹 frameworks/connectivity/bluetooth,其代码目录结构如下图所示:
├── Android.bp * Android 编译配置文件 *
├── CMakeLists.txt * CMake 编译配置文件 *
├── feature * 目录:快应用 Feature API *
│ ├── include
│ ├── jidl
│ └── src
├── framework * 目录:蓝牙Framework API *
│ ├── api
│ ├── binder
│ ├── common
│ ├── dbus
│ ├── include ** 蓝牙Framework API声明(可被APP引用) **
│ └── socket
├── frameworkBluetooth.go * Android 编译 go 文件 *
├── img * README.md 使用到的图形文件 *
├── Kconfig * 编译配置描述文件 *
├── LICENSE * License 文件 *
├── Make.defs * 在NuttX中增加Bluetooth Framework *
├── Make.dep * 编译依赖关系 *
├── Makefile * 编译规则配置文件 *
├── Makefile.host * 编译规则配置文件 *
├── README.md * 仓库说明文档(英文) *
├── README_zh-cn.md * 仓库说明文档(中文) *
├── service * 目录:蓝牙Services *
│ ├── common
│ ├── ipc
│ ├── profiles
│ ├── src
│ ├── stacks
│ ├── utils
│ ├── vendor
│ └── vhal
├── tests * 目录:测试Samples代码 *
└── tools * 目录:bttool工具代码 *
四、开发指南
1、蓝牙应用开发
对于第三方应用开发者,可以使用 openvela 快应用 QuickApp Feature ,它是基于 QuickJS 引擎使用 C++ 实现的一系列 API 接口,为三方应用提供系统访问能力,更多详情请参见蓝牙接口。
另外,蓝牙 Framework 还提供了 NDK 接口来使用蓝牙系统的所有能力。可以参阅目录 framework/include 中的头文件获取更多信息。
2、蓝牙驱动开发
openvela 蓝牙支持多种驱动架构,下文将以目前常用的 BTH4 驱动架构为例,介绍如何实现并注册一个蓝牙驱动。
实现驱动
芯片厂商可以实现一个 struct bt_driver_s 结构体类型的变量,并为其初始化以下成员函数:
- CODE int (*open)(FAR struct bt_driver_s *btdev)
- CODE int (*send)(FAR struct bt_driver_s *btdev, enum bt_buf_type_e type, FAR void *data, size_t len)
- CODE int (*ioctl)(FAR struct bt_driver_s *btdev, int cmd, unsigned long arg)
- CODE void (*close)(FAR struct bt_driver_s *btdev)
这些成员函数的实现依赖于 HCI 的实际工作方式,也就是 Host 和 Controller 之间的物理总线。
注册驱动
实现上述结构体类型的变量后,需要通过 API bt_driver_register**() 注册该驱动实例。
- int bt_driver_register**(FAR struct bt_driver_s *drv)
类型定义可参考头文件 nuttx/include/nuttx/wireless/bluetooth/bt_driver.h。调用关系如下图所示:
备注
对于 receive() 成员函数,芯片厂商无需定义,BTH4 驱动会为其初始化。
- CODE int (*receive)(FAR struct bt_driver_s *btdev, enum bt_buf_type_e type, FAR void *data, size_t len)
当收到来自芯片的 HCI 数据时,只要调用 bt_netdev_receive() 即可,它会调用这个 receive() 函数来保存收到 HCI 数据。
五、相关仓
- frameworks_bluetooth:该仓库旨在为应用程序开发者提供丰富的蓝牙应用编程接口,包括 API 接口层、各种 Service 服务组件层、SAL 协议栈适配层和 HAL 硬件适配层。此外,仓库还配备了 bttool 等工具,一方面可直接用于用于测试蓝牙功能;另一方面可用于蓝牙应用编程时相关 API 的 Sample 参考代码。
- external_zblue:该仓库源自于 Zephyr 社区,但 openvela 对很多功能进行了补充和增强。
- docs:该仓库提供更多关于蓝牙模块的技术文档。

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)