蓝牙架构

Fuchsia 蓝牙系统旨在为蓝牙主机子系统版本 4.2 和 5.0 及更高版本提供双模式实现。其中包括

  • 用于以核心、外围设备、广播方和扫描仪角色开发蓝牙低功耗应用的框架。

  • DDK 接口,用于构建具有高吞吐量要求的 LE 和传统服务驱动程序。

  • DDK surface,用于构建供应商专用 HCI 驱动程序,以支持各种蓝牙控制器和通用传输驱动程序。

  • 用于将系统与通用访问配置文件集成的政策和管理服务。

设备堆栈

蓝牙控制器以设备层次结构的形式出现在系统 Surface 上。在 x86 平台上,此层次结构可能如下所示:

[pci] pid=1633 /boot/driver/bus-acpi.so
   [00:14.0] pid=1633 /boot/driver/bus-pci.so
      <00:14.0> pid=2179 /boot/driver/bus-pci.proxy.so
         [xhci] pid=2179 /boot/driver/xhci.so
            [usb] pid=2179 /boot/driver/usb-bus.so
               [005] pid=2179 /boot/driver/usb-bus.so
                  [ifc-000] pid=2179 /boot/driver/usb-bus.so
                     [bt_transport_usb] pid=2179 /boot/driver/bt-transport-usb.so
                        [bthci-passthrough] pid=2179 /system/driver/bthci-passthrough.so
                           [bt-host] pid=2179 /system/driver/bthost.so

人机交互

通用 HCI 传输功能由 bt-transport 协议提供。Fuchsia 提供通过 USBUART 实现 HCI 传输的驱动程序。传输协议会抽象化 HCI 控件、ACL 和 SCO 信道(当前称为 Zircon 信道)。

传输驱动程序会发布 bt 传输设备(例如 /dev/class/bt-transport/000)。其中每一个设备仅表示传输,而不表示初始化的蓝牙控制器,因为大多数蓝牙控制器都需要供应商特定的协议才能进行设置(例如加载固件)。该逻辑由绑定到 bt-传输设备的供应商 HCI 驱动程序实现。

供应商驱动程序可以访问 HCI 事务的 bt-传输协议,以及该传输设备支持的其他底层协议。当蓝牙控制器完成初始化并可供主机子系统使用后,供应商驱动程序就会发布一个 bt-hci 设备。

系统提供 bthci-passthrough 驱动程序,该驱动程序会绑定到没有被任何供应商专用驱动程序声明的 bt-transport 设备。bthci-passthrough 只会发布 bt-hci 设备,而不需要执行特殊的初始化。

主机

bthost 驱动程序实现构成通用访问配置文件的核心蓝牙协议。bthost 绑定到 bt-hci 设备并发布 bt-host 设备。bt-host 设备声明底层 bt-hci 的 HCI 控件和数据端点,并实现:

  • 核心的双重模式 GAP 记账
  • 处理核心服务的 FIDL 消息
  • L2CAP 和固定信道协议(GATT、SMP、SDP)
  • 配对协议和委托
  • 其他类型的 IPC(例如 L2CAP 套接字)
  • 子设备的总线协议,用于作为设备驱动程序实现的服务

主机设备由蓝牙系统服务管理。在给定时间,该服务仅允许针对服务请求访问一个 bt-host。此 bt-host 表示为“活跃适配器”。host_watcher.fidl 提供了一个管理接口,以便在存在多个适配器时指定活跃适配器。

bt-host 设备实现 host.fidl 协议,以便与蓝牙系统服务进行通信。

主机总线

TODO(armansito):子设备

服务

蓝牙环境服务是实现蓝牙服务和应用的主要方式。

Sys FIDL 库适用于特权客户端,适用于设备级控制/政策。

TODO:描述其他服务