當通訊協定具有 @transport("Driver")
屬性時,通訊協定會以驅動程式傳輸而非作業時傳輸:
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,而其中一個 API 會寫入 fidl::WireClient
以在 Zircon 通道傳輸中宣告非同步用戶端,而使用上方的範例通訊協定將寫入 fdf::WireClient<fuchsia_example::Protocol>
。一個可以包含位於 #include <fidl/fuchsia.example/cpp/driver/wire.h>
的接線器標頭。
驅動程式傳輸的 C++ 繫結仍在疊代。測試目前可用做繫結的範例。