Fuchsia 设备接口表示形式为 FIDL 接口。这些 FIDL 定义应符合 FIDL可读性规范(FIDL Readability Rubric)
标识符
应首选描述性的标识符。如果使用特定领域的术语缩写,需要描述其相关扩展内容或提供引用来获取更多信息。
接口中定义的每个标识符都必须有注释,用来阐释其含义(针对成员,类型和参数)或行为(针对方法)。
接口
所有设备接口必须使用 [Layout = "Simple"]
属性。这个限制允许在驱动开发中使用任何支持的语言轻松实现接口。
方法状态
使用 zx.status
作为方法返回值,表示成功和失败。当某个方法不可能失败,则无需返回 zx.status
。若方法中有多个返回值,zx.status
应第一个返回。
数组,字符串和向量
全部数组,字符串和向量必须限定长度。建议使用 const
修饰的标识符作为长度边界,方便接口使用者能够以编程的方式检查长度。
枚举
当字段表示非算术值约束集中某个值时,优先使用明确尺寸的枚举(例如: enum Foo : uint32 { ... }
)而不是普通整数类型。
位域
若接口中存在位域,使用 const
修饰其全部值。位域的值应具有相同前缀,并且在 FIDL 文件中被分组放在一起。例如:
// Bit definitions for Info.features field
// If present, this device represents WLAN hardware.
const uint32 INFO_FEATURE_WLAN = 0x00000001;
// If present, this device is synthetic (i.e. not backed by hardware).
const uint32 INFO_FEATURE_SYNTH = 0x00000002;
// If present, this device will receive all messages it sends.
const uint32 INFO_FEATURE_LOOPBACK = 0x00000004;
如果 FIDL 得到 bitfield 的支持,此指南将会更新。
基于非通道协议
某些接口为了性能优化可能会使用非通道协议(例如 zircon.ethernet.Device
的 GetFifos/SetIOBuffer
方法),FIDL 目前不支持表示这些协议。
现在,任何由 struct
定义,代表共享数据的结构,应提供其在协议中参与部分的详细文档。
目前不支持包装结构(Packed structures
)。
Comments