藍牙架構

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 提供透過 USBUART 實作 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 程式庫適用於具有特殊權限的用戶端,適用於裝置層級控管/政策。

待辦事項:說明其他服務