USB 虛擬匯流排架構是一種 實用架構,方便將 USB 功能驅動程式庫 USB 裝置驅動程式庫,用於測試。
以下檔案正在測試 USB 裝置驅動程式庫。三者 這些檔案應儲存在相同的目錄中:
{driver}.cc
:要測試的 USB 裝置驅動程式庫。{driver}-function.cc
:可模擬底層的 USB 函式驅動程式庫 USB 裝置硬體。{driver}-test.cc
:測試程式,用於設定驅動程式庫並執行測試。
usb-virtual-bus 將 USB 週邊裝置匯流排連接至 USB 匯流排,如圖所示 如下圖所示:
usb-peripheral-bus -> {Your usb-function driver}
^
|
usb-virtual-bus
|
v
usb-bus -> {Your usb-driver}
編寫 USB 功能驅動程式庫
usb 功能驅動程式庫讓目前的主機看起來像週邊裝置 USB 裝置。舉例來說,USB 大量儲存裝置 (ums) 功能裝置 主機插入其他機器時,主機會顯示為區塊裝置。 如果主機適合為類別取得 USB 函式驅動程式庫 則應建立真實的 usb 功能驅動程式庫。否則 編寫偽造 USB 裝置硬體的 usb 函式 測試 USB 驅動程式庫程式
usb-virtual-bus 將 usb 功能驅動程式連線至實際的 USB 裝置 。這麼做可讓裝置驅動程式庫在測試中執行 則完全不需修改裝置驅動程式庫程式。
usb 函式驅動程式範例:
usb 函式驅動程式庫必須實作 UsbFunctionInterface banjo 介面。這些函式是從 usb-virtual-bus 程式庫在 USB 堆疊中設定驅動程式庫。
USB 功能驅動程式庫放在 UsbFunction 因此效能相當卓越這些呼叫可讓函式驅動程式庫分配 端點、註冊介面回呼、將 USB 要求排入佇列等等。
繫結規則
usb 函式驅動程式庫需要繫結至 ZX_PROTOCOL_USB_FUNCTION
因此效能相當卓越USB 類別、USB 子類別
以及 USB 通訊協定
本範例顯示一個繫結規則,其中 {}
代表應有的區域
換成您的資訊:
using fuchsia.usb;
fuchsia.BIND_PROTOCOL == fuchsia.usb.BIND_PROTOCOL.FUNCTION;
fuchsia.BIND_USB_CLASS == {usb_class}
fuchsia.BIND_USB_SUBCLASS == {usb_subclass}
fuchsia.BIND_USB_PROTOCOL == {usb_protocol}
編寫 usb-virtual-bus 測試
測試應使用 usb virtual Bus launcher 程式庫。
測試的第一個項目是上述的 usb 功能驅動程式庫
編寫 USB 函式驅動程式。您可以開始進行
方法是將繫結規則新增至 usb_peripheral::FunctionDescriptor
,並
藉由 SetupPeripheralDevice()
函式來解決意見。例如:
// Set up your USB Device Descriptor.
usb_peripheral::DeviceDescriptor device_desc = {};
/ Set up your USB Function descriptors.
std::vector<usb_peripheral::FunctionDescriptor> function_descs;
usb_peripheral::FunctionDescriptor function_desc = {
.interface_class = {usb_class},
.interface_subclass = {usb_subclass},
.interface_protocol = {usb_protocol},
};
function_descs.push_back(function_desc);
ASSERT_NO_FATAL_FAILURE(SetupPeripheralDevice(device_desc, std::move(function_descs)));
SetupPeripheralDevice
函式成功執行後,usb 函式驅動程式庫
繫結。
USB 虛擬匯流排將功能驅動程式庫連接到系統,然後
與實際裝置驅動程式庫繫結接著,測試就能連線至 USB 裝置驅動程式庫
至 devfs
。繫結以非同步方式進行,因此您必須等待
「devfs
」偵測的驅動程式庫。您可從最東到的一種方式
fdio_watch_directory
函式。
連接裝置後,即可照常進行 FIDL 呼叫。 您的驅動程式庫會處理這些 FIDL 呼叫,並向 USB 函式驅動程式庫發出呼叫 就像是真正的硬體一樣