蓝牙


英文原文快照


Fuchsia的蓝牙系统旨在提供蓝牙主机子系统(5.0+)的双模实现,提供支持开发低功耗和传统配置文件的框架。

源代码快速链接: <!— - Public API

入门

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_rectble_battery_service示例代码。
  • LE central:请参见ble_scanner

控制API

通过使用control.fidl API,来执行通常向特权客户端公开的双模(LE + Classic) GAP操作。此API用于管理本地适配器,设备发现和可发现性的配对/绑定以及其他设置。

bt-cli是该API的命令行前端:

  1. $ bt-cli
  2. bluetooth> list-adapters
  3. Adapter 0
  4. id: bf004a8b-d691-4298-8c79-130b83e047a1
  5. address: 00:1A:7D:DA:0A
  6. bluetooth>

我们还提供了一个Flutter模块,该模块在topaz/app/bluetooth_settings上充当基于此API的蓝牙系统菜单。

工具

有关用于测试/调试的命令行工具的更多信息,请参见bluetooth/tools程序包。

运行测试

单元测试

bluetooth_tests程序包中包含蓝牙测试的二进制文件。该程序包在tests模块的BUILD文件中定义。

而主机子系统的测试代码被编译为单个GoogleTest二进制文件,该文件安装在/system/test/bluetooth_unittests目录中。

在真实硬件上运行
  • 运行所有测试:
    1. $ runtests -t bt-host-unittests
  • 或者使用--gtest_filter标识运行部分测试:

    1. # 仅运行L2CAP单元测试。
    2. $ /pkgfs/packages/bluetooth_tests/0/test/bt-host-unittests --gtest_filter=L2CAP_*

    (在这种情况下,我们指定了完整的路径,因为runtests不允许我们传递给测试二进制文件任意参数。)

  • 并使用--verbose标志设置log的详细程度:

    1. # 打印使用FXL_VLOG(level 2及其以上)的所有消息
    2. $ /pkgfs/packages/bluetooth_tests/0/test/bt-host-unittests --verbose=2
    在QEMU上运行

如果你没有可用的物理设备,那么可以使用与上面相同的命令在QEMU中运行测试。一些提示将有助于更快地运行测试。

  • 运行具有硬件虚拟化支持的虚拟机:fx run -k
  • 禁用测试中不必要的日志记录:
    1. $ /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”选项添加到蓝牙项可以增加日志详细程度,例如:

  1. ...
  2. "bluetooth::control::AdapterManager": [ "bluetooth", "--verbose=2" ],
  3. "bluetooth::gatt::Server": [ "bluetooth", "--verbose=2" ],
  4. "bluetooth::low_energy::Central": [ "bluetooth", "--verbose=2" ],
  5. "bluetooth::low_energy::Peripheral": [ "bluetooth", "--verbose=2" ],
  6. ...

bthost

bthost驱动程序目前使用FXL日志系统。如果要启用最大日志详细程度,请在drivers/bluetooth/host/driver.cc中将BT_DEBUG宏设置为1