蓝牙
Fuchsia的蓝牙系统旨在提供蓝牙主机子系统(5.0+)的双模实现,提供支持开发低功耗和传统配置文件的框架。
源代码快速链接: <!— - Public API
- Private API
- Tools
- Host Library
- Host Bus Driver
- HCI Drivers
- HCI Transport Drivers —>
- 公有API
- 私有API
- 工具
- 主机库
- 主机驱动程序
- HCI驱动
- HCI传输驱动 有关更多方面的内容,请参阅 <!— - System Architecture
- Detailed Source Layout —>
- 系统架构(英文原文)
- 详细的源码布局(英文原文)
入门
API示例
在Garnet和Topaz中,可以找到使用Fuchsia蓝牙低功耗API来处理所有四种LE角色的示例,目前所有这些示例程序都默认编译到Fuchsia中。 <!—
- LE scanner: see
eddystone_agent
. This is a suggestion agent that proposes URL links that are obtained from Eddystone beacons. This is built in topaz by default. —> - LE scanner:请参见
eddystone_agent
。这是一个从Eddystone信标处获得的URL链接的建议代理,在默认情况下,它内置于topaz中。 - LE broadcaster:请参见
eddystone_advertiser
。这是一个Flutter模块,它可以将任何输入的URL作为Eddystone信标进行广播。 - LE peripheral:请参见
ble_rect
和ble_battery_service
示例代码。 - LE central:请参见
ble_scanner
。
控制API
通过使用control.fidl API,来执行通常向特权客户端公开的双模(LE + Classic) GAP操作。此API用于管理本地适配器,设备发现和可发现性的配对/绑定以及其他设置。
bt-cli
是该API的命令行前端:
$ bt-cli
bluetooth> list-adapters
Adapter 0
id: bf004a8b-d691-4298-8c79-130b83e047a1
address: 00:1A:7D:DA:0A
bluetooth>
我们还提供了一个Flutter模块,该模块在topaz/app/bluetooth_settings上充当基于此API的蓝牙系统菜单。
工具
有关用于测试/调试的命令行工具的更多信息,请参见bluetooth/tools程序包。
运行测试
单元测试
bluetooth_tests
程序包中包含蓝牙测试的二进制文件。该程序包在tests模块的BUILD文件中定义。
而主机子系统的测试代码被编译为单个GoogleTest二进制文件,该文件安装在/system/test/bluetooth_unittests
目录中。
在真实硬件上运行
- 运行所有测试:
$ runtests -t bt-host-unittests
或者使用
--gtest_filter
标识运行部分测试:# 仅运行L2CAP单元测试。
$ /pkgfs/packages/bluetooth_tests/0/test/bt-host-unittests --gtest_filter=L2CAP_*
(在这种情况下,我们指定了完整的路径,因为runtests不允许我们传递给测试二进制文件任意参数。)
并使用
--verbose
标志设置log的详细程度:# 打印使用FXL_VLOG(level 2及其以上)的所有消息
$ /pkgfs/packages/bluetooth_tests/0/test/bt-host-unittests --verbose=2
在QEMU上运行
如果你没有可用的物理设备,那么可以使用与上面相同的命令在QEMU中运行测试。一些提示将有助于更快地运行测试。
- 运行具有硬件虚拟化支持的虚拟机:
fx run -k
- 禁用测试中不必要的日志记录:
$ /pkgfs/packages/bluetooth_tests/0/test/bt-host-unittests --quiet=10
如果使用这两个提示,完整的bt-host-unittests
套件可在约2秒内完成运行。
集成测试
TODO(armansito): 描述集成测试
控制日志的详细程度
bin/bt-gap
sysmgr调用蓝牙系统服务来解析服务请求,环境服务名称与其处理服务程序之间的映射在bin/sysmgr/config/services.config中定义。将”—verbose”选项添加到蓝牙项可以增加日志详细程度,例如:
...
"bluetooth::control::AdapterManager": [ "bluetooth", "--verbose=2" ],
"bluetooth::gatt::Server": [ "bluetooth", "--verbose=2" ],
"bluetooth::low_energy::Central": [ "bluetooth", "--verbose=2" ],
"bluetooth::low_energy::Peripheral": [ "bluetooth", "--verbose=2" ],
...
bthost
bthost驱动程序目前使用FXL日志系统。如果要启用最大日志详细程度,请在drivers/bluetooth/host/driver.cc中将BT_DEBUG
宏设置为1
。