Fuchsia 命名空间和范围
在 Fuchsia 树 (fuchsia.git
) 中定义的所有绑定库都必须遵守这些
命名空间规则:
- 如果绑定库用于内部测试并从 SDK 中排除, 顶级命名空间必须经过测试
- 否则,顶级命名空间必须为
fuchsia
。这表明 绑定库是开源 Fuchsia 项目的一部分。
绑定库范围
绑定库的范围应限定为以下其中一项:
- 供应商平台
- 硬件功能
- 已弃用的 Banjo 协议
供应商平台
绑定库(按供应商平台限定范围)会定义 供应商的硬件例如,Amlogic 这样的供应商 拥有自己维护的产品 ID (PID) 的数据库。
概括来讲,绑定库的命名空间应遵循以下格式:
fuchsia.<vendor>.platform
绑定库可以根据特定的硬件或功能进一步缩小范围
通过命名空间嵌套例如,Amlogic 的高级绑定库
则具有命名空间 fuchsia.amlogic.platform
。
如果我们需要一个用于 Amlogic Meson 频道组的绑定库,可以在
fuchsia.amlogic.platform.meson
命名空间。如果我们要一个绑定库,
具有显示功能的 Amlogic 硬件,我们可以在命名空间中定义
fuchsia.amlogic.platform.display
。
硬件功能
按硬件功能限定范围的绑定库包含属性 与功能相关命名空间应遵循以下格式:
fuchsia.<hardware function>
这些绑定库属于高级通用库。因此, 属性可以由任何供应商平台绑定库扩展。
硬件功能命名空间可划分为更具体的绑定
通过嵌套创建库例如,fuchsia.usb
绑定库包含
高级属性。如果我们要定义特定的属性
至 USB 大容量存储设备,我们可以在 fuchsia.usb.massstorage
中定义它们。
绑定库
已弃用的 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”)。
对外部注册表使用整数值
整数值更适合表示基于数字的属性 由知名注册表在外部维护的值,如 以及 USB 注册表中的类代码。
避免向旧版绑定库添加新属性
旧版属性是在
fuchsia
绑定库和
binding_priv.h
。由于这些
属性已被弃用且正在逐步淘汰,
尽可能为其添加新属性
扩展属性
绑定库应仅扩展来自其他绑定库的属性, 或位于由硬件作用域限定的库中 功能
如果绑定库的范围由硬件功能限定,那么它应该仅
从其命名空间中更高级别的绑定库进行扩展。例如,
fuchsia.usb.audio
绑定库只能扩展来自
fuchsia.usb
和 fuchsia
绑定库。
供应商平台绑定库可以从任何硬件功能绑定进行扩展 库。
从旧版媒体资源扩展
旧版 fuchsia 绑定库位于最高级别。所有绑定库 扩展。不过,由于这些属性已弃用, 并倾向于改为引入新属性。