繫結程式庫規範

Fuchsia 命名空間和範圍

凡是在 Fuchsia 樹狀結構中定義的繫結程式庫 (fuchsia.git) 都必須遵循下列 命名空間的規則:

  • 如果繫結程式庫用於內部測試,並從 SDK 中排除,請執行下列操作: 頂層命名空間必須進行測試
  • 否則頂層命名空間必須是 fuchsia。這表示 繫結程式庫是開放原始碼 Fuchsia 專案的一部分。

繫結程式庫範圍

繫結程式庫應以下列任一項設定範圍:

  • 供應商平台
  • 硬體功能
  • 已淘汰的 Banjo 通訊協定

供應商平台

供應商平台範圍的繫結程式庫可定義相關聯的屬性 整合廠商的硬體例如,像 Amlogic 這樣的廠商 自己維護的產品 ID (PID) 資料庫。

大致來說,繫結程式庫的命名空間應遵循以下格式:

fuchsia.<vendor>.platform

繫結程式庫可根據特定硬體或功能進一步縮小範圍 透過命名空間建立巢狀結構例如:Amlogic 專屬的高階繫結程式庫 硬體的命名空間會是 fuchsia.amlogic.platform

如果需要 Amlogic Meson 首選頻道專用的繫結程式庫,可以在 fuchsia.amlogic.platform.meson 命名空間。如要在 2014 年 具有顯示功能的 Amlogic 硬體,我們可以在命名空間中定義該硬體 fuchsia.amlogic.platform.display

硬體功能

限定於硬體功能範圍的繫結程式庫含有屬性 與這項功能相關的所有資訊命名空間應符合下列格式:

fuchsia.<hardware function>

這些繫結程式庫被視為一般通用。因此 資源都能由任何供應商平台繫結程式庫擴充。

硬體功能命名空間可細分為更具體的繫結機制 透過巢狀結構管理程式庫例如,fuchsia.usb 繫結程式庫包含 USB 裝置的高階屬性如果要定義特定屬性 我們可以在 fuchsia.usb.massstorage 中定義 USB 大量儲存裝置 繫結程式庫。

已淘汰的 Banjo 通訊協定

範圍限定於 Banjo 通訊協定的繫結程式庫,會包含代表 實作此通訊協定的裝置。但由於舊版資料庫 並應逐步淘汰為硬體功能限定的程式庫。

命名

命名空間元件

每個名稱元件的名稱都使用小寫,而且必須與規則運算式相符 [a-z][a-z0-9]*

屬性鍵和值

最好對屬性鍵和值發出尖叫聲。這樣一來,您就能 可讀取語言繫結中產生的常數。

以下列繫結程式庫為例

library fuchsia.input;

enum DEVICE_CATEGORY {
  KEYBOARD,
  MOUSE,
};

產生的常數如下:

C++

// WARNING: This file is machine generated by bindc.

#ifndef BIND_FUCHSIA_INPUT_BINDLIB_
#define BIND_FUCHSIA_INPUT_BINDLIB_

#include <string>

namespace bind_fuchsia_input {

static const std::string DEVICE_CATEGORY = "fuchsia.input.DEVICE_CATEGORY";
static const std::string DEVICE_CATEGORY_KEYBOARD = "fuchsia.input.DEVICE_CATEGORY.KEYBOARD";
static const std::string DEVICE_CATEGORY_MOUSE = "fuchsia.input.DEVICE_CATEGORY.MOUSE";

}  // namespace bind_fuchsia_input

#endif  // BIND_FUCHSIA_INPUT_BINDLIB_

Rust

// WARNING: This file is machine generated by bindc.

pub const DEVICE_CATEGORY: &str = "fuchsia.example.library.DeviceCategory";
pub const DEVICE_CATEGORY_KEYBOARD: &str =
    "fuchsia.input.DEVICE_CATEGORY.KEYBOARD";
pub const DEVICE_CATEGORY_MOUSE: &str =
    "fuchsia.input.DEVICE_CATEGORY.MOUSE";

類型

針對邊界集,使用列舉類型優先於字串

如果屬性的值為一組有限的值,則建議使用列舉類型 靜態已知資料例如,fuchsia.hardware.gpio.FUNCTION 屬性 適合做為列舉類型,因為這組功能是以靜態方式得知 。

若有可能將新的值加到 仍建議使用列舉項目。屬性值可以依據 從新的繫結程式庫擴充屬性。

如果屬性值很大,且範圍很廣,就表示字串類型 其中一個範例是 ACPI HID 值,也就是 標明裝置的製造商和製造的具體裝置 (例如「PRP0001」)

針對外部註冊資料庫使用整數值

整數值更適合代表數字 例如由知名註冊資料庫在外部維護的值 PCI ID 註冊資料庫及 USB 註冊資料庫中的類別代碼。

避免在舊版繫結程式庫中新增屬性

舊版屬性是在 fuchsia 繫結程式庫binding_priv.h。因為這些 屬性皆已淘汰,正在進行逐步停用, 並盡可能在當中加入新的屬性

擴充屬性

繫結程式庫只能擴充來自其他繫結程式庫的屬性 從硬體命名空間或硬體範圍的程式庫中移除 功能。

如果繫結程式庫的範圍是受硬體功能限制,則應該僅 會從其命名空間中較高的繫結程式庫開始擴充舉例來說, fuchsia.usb.audio 繫結程式庫只能擴充 fuchsia.usbfuchsia 繫結程式庫。

供應商平台繫結程式庫可以從任何硬體功能繫結的程式庫延伸 程式庫

取自舊版資源

舊版 Fuchsia 繫結程式庫位於最高層級。所有繫結程式庫 然而,由於這些屬性已淘汰, 擴充屬性,並改用新屬性。