通过驱动程序传输使用新的 C++ 绑定

如果协议具有 @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++ 绑定正在迭代中。目前,这些测试可作为使用绑定的示例