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 提供通过 USB 和 UART 实现 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:描述其他服务