測試 USB 裝置

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 函式驅動程式庫發出呼叫 就像是真正的硬體一樣