Fuchsia 藍牙系統旨在提供藍牙主機子系統 4.2 和 5.0 以上版本的雙模式實作。這包括
從中央、週邊裝置、廣播器和掃描器角色開發藍牙低功耗應用程式的架構。
DDK 介面,用於建構有高處理量需求的 LE 和傳統服務驅動程式。
DDK 介面,用於建構廠商專屬的 HCI 驅動程式,以支援各種藍牙控制器和一般傳輸驅動程式。
用於整合系統與「一般存取設定檔」的政策及管理服務。
裝置堆疊
以裝置階層的形式顯示在系統介面上的藍牙控制器。在 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 提供透過 USB 和 UART 實作 HCI 傳輸的驅動程式。傳輸通訊協定會抽象化 HCI 控制項、ACL 和 SCO 管道 (目前為 Zircon 管道)。
傳輸驅動程式庫會發布 Bt 傳輸裝置 (例如 /dev/class/bt-transport/000
)。每部裝置都代表傳輸,而非初始化的藍牙控制器,因為大部分的藍牙控制器都需要設定供應商的通訊協定 (例如載入韌體)。該邏輯是由繫結至 bt 傳輸裝置的廠商 HCI 驅動程式實作。
供應商驅動程式可以存取 HCI 交易的 bt-傳輸通訊協定,以及傳輸裝置支援的其他基礎通訊協定。一旦藍牙控制器初始化並準備好用於主機子系統,廠商驅動程式庫就會發布 bt-hci
裝置。
系統提供 bthci-passthrough
驅動程式庫,這類驅動程式會繫結至未由任何供應商專用驅動程式庫宣告的 bt-傳輸裝置。迴路傳遞是指在未進行特殊初始化的情況下發布 bt-hci 裝置。
主機
bthost
驅動程式庫會實作構成一般存取設定檔的核心藍牙通訊協定。bthost 繫結至 bt-hci 裝置,並發布 bt-host
裝置。Bt 主機裝置聲明瞭基礎 bt-hci
的 HCI 控制項和資料端點,並實作以下項目:
- 核心雙模式 GAP 簿記
- 處理核心服務的 FIDL 訊息
- L2CAP 和固定管道通訊協定 (GATT、SMP、SDP)
- 配對通訊協定與委派
- 其他類型的 IPC (例如 L2CAP 通訊端)
- 針對以裝置驅動程式實作的服務,使用子裝置的 Bus 通訊協定
主機裝置是由藍牙系統服務管理,這項服務僅允許在特定時間存取一個 bt-host 服務要求。這個 bt-host 會表示為「使用中的轉接程式」。host_watcher.fidl 提供管理介面,可在存在多個轉接程式時指定使用中的轉接程式。
bt 主機裝置會實作 host.fidl 通訊協定,以便與藍牙系統服務進行通訊。
主機公車
TODO(armansito):孩童裝置
服務
藍牙環境服務是實作藍牙服務和應用程式的主要方式。
Sys FIDL 程式庫適用於具有特殊權限的用戶端,適用於裝置層級控管/政策。
待辦事項:說明其他服務