1. 主页
  2. 文档
  3. Fuchsia OS 简体中文文档 (2019年版)
  4. 开发
  5. API
  6. Fuchsia 设备接口规范

Fuchsia 设备接口规范

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.DeviceGetFifos/SetIOBuffer 方法),FIDL 目前不支持表示这些协议。

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

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

这篇文章对您有用吗?

我们要如何帮助您?

Comments

Leave a reply

您的电子邮箱地址不会被公开。