蓝牙架构

Fuchsia 蓝牙系统旨在为 蓝牙主机子系统版本 4.2 和 5.0 及更高版本。这包括

  • 用于开发蓝牙低功耗蓝牙应用的框架, 外围设备、广播器和扫描程序角色。

  • 用于构建 LE 和具有 高吞吐量要求

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

  • 将系统与通用政策与管理相集成的服务 访问个人资料。

设备堆栈

作为层次结构在系统 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

通用 HCI 传输功能由 bt-transport 协议提供。 Fuchsia 提供通过 USBUART。 传输协议将 HCI 控件、ACL 和 SCO 抽象化 频道(目前称为 Zircon 频道)。

传输驱动程序发布 bt 传输设备(例如 /dev/class/bt-transport/000)。 这些设备中的每一个都仅代表传输,而不是初始化的 蓝牙控制器,因为大多数蓝牙控制器都需要供应商专用协议 (例如,加载固件)。该逻辑由供应商 HCI 实现 绑定至 bt-transport 设备的驱动程序。

供应商驱动程序可以访问 HCI 事务的 bt-transport 协议, 以及传输设备支持的其他底层协议。在 蓝牙控制器已初始化,可供主机子系统使用, 供应商驱动程序发布 bt-hci 设备。

系统提供绑定到 bt-transport 的 bthci-passthrough 驱动程序 未被任何供应商专用驱动程序声明的设备。双向直通 只发布 bt-hci 设备,而不进行特殊的初始化。

主机

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

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

主机设备由 蓝牙系统服务。 对于指定的 。该 bt 主机表示为“活动适配器”。 host_watcher.fidl 提供了 当有多个适配器时,用于管理接口来指定活动适配器 存在。

bt-host 设备会实现 host.fidl 与蓝牙系统服务进行通信。

主机总线

TODO(armansito):子设备

服务

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

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

TODO:描述其他服务