如果协议具有 @transport("Driver") 属性,则该协议通过驱动程序传输而非 Zircon 通道传输运行:
library fuchsia.example;
@transport("Driver")
protocol Protocol {
TwoWay(struct {
request uint32;
}) -> (struct {
response uint32;
});
};
驱动程序传输基于 Fuchsia 驱动程序运行时构建,与 Zircon 渠道相比,它具有不同的内存管理限制和不同的线程处理模型。因此,FIDL 客户端和服务器类型与 Zircon 通道上的协议中的类型不同,以提供量身定制的 API。
fidl:: 命名空间下的大多数客户端/服务器类型在 fdf:: 命名空间中都有对应的类型,这些类型提供相同的功能,但专门针对驱动程序运行时。例如,虽然可以使用 fidl::Client 通过 Zircon 渠道传输声明异步客户端,但若要使用上述示例协议,则应编写 fdf::Client<fuchsia_example::Protocol>。生成的 FIDL 标头的格式为 #include <fidl/fuchsia.example/cpp/driver/fidl.h>。
同样,在使用仅限于线类型的客户端和服务器 API 时,虽然可以编写 fidl::WireClient 来声明通过 Zircon 渠道传输的异步客户端,但若要使用上述示例协议,则需要编写 fdf::WireClient<fuchsia_example::Protocol>。一种方法是在 #include <fidl/fuchsia.example/cpp/driver/wire.h> 中包含有线子集标头。
基于驱动程序传输的 C++ 绑定正在迭代中。目前,这些测试可作为使用绑定的示例。