Fuchsia 设备接口规范

Fuchsia 设备接口表示形式为 FIDL 协议。这些 FIDL 定义应符合 FIDL Style RubricFIDL API Rubric. <!—

Identifiers

Prefer descriptive identifiers. If you are using domain-specific abbreviations, document the expansion or provide a reference for further information.

Every identifier that is defined as part of a protocol must be documented with a comment explaining its interpretation (in the case of fields, types, and parameters) or behavior (in the case of methods). —>

标识符

应首选描述性的标识符。如果使用特定领域的术语缩写,需要描述其相关扩展内容或提供引用来获取更多信息。

接口中定义的每个标识符都必须有注释,用来阐释其含义(针对成员,类型和参数)或行为(针对方法)。

协议

所有设备协议必须使用 [Layout = "Simple"] 属性。这个限制允许在驱动开发中使用任何支持的语言轻松实现接口。

方法状态

使用 zx.status 作为方法返回值,表示成功和失败。当某个方法不可能失败,则无需返回 zx.status。若方法中有多个返回值,zx.status 应第一个返回。

数组,字符串和向量

全部数组,字符串和向量必须限定长度。建议使用 const 修饰的标识符作为长度边界,方便协议使用者能够以编程的方式检查长度。

枚举

当字段表示非算术值约束集中某个值时,优先使用明确大小的枚举(例如: enum Foo : uint32 { ... })而不是普通整数类型。

位域

如果您的协议具有位字段,请使用“位”值表示其值。有关详细信息,请参见可读性规则中的“bits”主题。

基于非通道协议

某些协议为了性能优化可能会使用非通道协议(例如 zircon.ethernet.DeviceGetFifos/SetIOBuffer 方法),FIDL 目前不支持表示这些协议。

现在,任何由 struct 定义,代表共享数据的结构,应提供其在协议中参与部分的详细文档。

目前不支持包装结构(Packed structures)。