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.usb
和 fuchsia
繫結程式庫。
供應商平台繫結程式庫可以從任何硬體功能繫結的程式庫延伸 程式庫
取自舊版資源
舊版 Fuchsia 繫結程式庫位於最高層級。所有繫結程式庫 然而,由於這些屬性已淘汰, 擴充屬性,並改用新屬性。