藍牙架構

Fuchsia 藍牙系統旨在提供雙模式, 藍牙主機子系統 4.2 和 5.0 以上版本。這包括

  • 用於集中開發藍牙低功耗應用程式的架構 週邊裝置、廣播器和掃描器角色

  • 用於建構 LE 和傳統服務驅動程式的 DDK 介面, 最高處理量需求

  • 用來建構供應商專屬 HCI 驅動程式,以支援各種範圍的 DDK 介面 以及一般傳輸驅動程式

  • 政策和管理服務,可整合系統與一般類別 存取設定檔。

裝置堆疊

系統表面上的藍牙控制器是 裝置。在 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 提供實作 HCI 傳輸的司機 USBUART。 此傳輸通訊協定會抽象化 HCI 控管機制、ACL 和 SCO 管道 (目前為 Zircon 頻道)。

傳輸驅動程式庫發布 bt 傳輸裝置 (例如 /dev/class/bt-transport/000)。 下列每部裝置都僅代表傳輸,而非初始化 藍牙控制器,因為大多數藍牙控制器都需要廠商專用的通訊協定 (例如載入韌體)。這個邏輯是由廠商 HCI 實作 繫結至 bt 傳輸裝置的驅動程式。

供應商驅動程式可存取 HCI 交易的 bt 傳輸通訊協定,如 以及傳輸裝置支援的其他基礎通訊協定我們 藍牙控制器已初始化,可供主機子系統使用。 廠商驅動程式庫發布了 bt-hci 裝置。

系統提供 bthci-passthrough 驅動程式庫,該驅動程式會繫結至 bt 傳輸 裝置,並未由任何供應商專屬驅動程式庫聲明擁有權。bthci-passthrough 只是發布 bt-hci 裝置,不需執行特殊初始化作業。

舉辦派對

bthost 驅動程式庫會實作核心藍牙通訊協定,在 一般存取設定檔。bthost 繫結至 bt-hci 裝置,並發布 bt-host 裝置。根主機裝置認領基礎的 HCI 控制和資料端點 bt-hci,並實作:

  • 核心雙模式 GAP 記帳
  • 處理核心服務的 FIDL 訊息
  • L2CAP 和固定管道通訊協定 (GATT、SMP、SDP)
  • 配對通訊協定和委派
  • 其他類型的 IPC (例如 L2CAP 通訊端)
  • 針對實作為裝置驅動程式的服務,適用於子裝置的 Bus 通訊協定

主機裝置是由 藍牙系統服務。 這項服務只允許針對特定的 bt-host 服務要求存取 讓應用程式從可以最快做出回應的位置 回應使用者要求此 bt-host 會表示為「主動轉接器」。 host_watcher.fidl 提供 透過管理介面在多個轉接程式執行時指定有效轉接程式 。

bt 主機裝置會實作 host.fidl 與藍牙系統服務通訊

主機匯流排

TODO(armansito):孩童裝置

服務

藍牙環境服務是實作藍牙的主要方式 服務與應用程式

Sys FIDL 程式庫是 適用於具有特殊權限的用戶端,用於裝置層級的控制/政策。

任務:說明其他服務