1. 程式人生 > >USB裝置模擬框架設計指南——2.DSF體系結構

USB裝置模擬框架設計指南——2.DSF體系結構

DSF程式設計環境由實現USB裝置模擬器的各種元件的一組COM物件、一組執行時服務和USB 2.0EHCI控制器模擬器組成。

EHCI控制器模擬器被實現為EHCI迷你埠(Usbehci_dsf.sys)的DSF特定版本上的較低裝置過濾器。EHCI小埠的DSF版本與控制器模擬器通訊,就好像它是真正的硬體一樣。控制器模擬器攔截暫存器和直接儲存器存取(DMA)訪問,並生成模擬硬體中斷。

USB裝置模擬器是任何形式的使用者模式可執行檔案(如DLL、.exe檔案、COM物件或.NET物件),以及任何能夠實現COM客戶端程式碼的語言。USB裝置模擬器使用框架提供的SoftUSBDevice COM物件。SoftUSBDevice

處理USB事務的所有方面,裝置的描述符,以及與控制器模擬器的互動。

下圖說明了USB裝置模擬體系結構如何使用DLL來封裝USB裝置模擬器。

                                              

                                  USB裝置模擬體系結構如何使用DLL封裝USB裝置模擬器的示意圖

在前面的圖中,USB裝置模擬器是在DLL中作為一個PROC COM伺服器實現的。測試指令碼建立模擬器物件的例項,該物件使用其建構函式來建立和配置SoftUSBDevice物件。

SoftUSBDevice物件還公開了封裝USB裝置各個元件的功能的次要物件(如那些沒有顯示在上圖中的, SoftUSBConfiguration, SoftUSBInterface和 SoftUSBEndpoint),包括其configurations, interfaces, 和 endpoints。這些物件公開了允許物件響應於來自模擬控制器的標準裝置請求生成適當的裝置描述符的屬性。

裝置模擬器根據裝置類規範建立次要物件並設定它們的屬性。例如,一個bulk-only儲存裝置模擬器可能建立的兩個SoftUSBEndpoint物件,併為其bulk-IN和bulk-OUT端點配置它們:包含端點的SoftUSBInterface物件和包含介面的SoftUSBConfiguration物件。然後,裝置模擬器將SoftUSBConfiguration物件與SoftUSBDevice物件關聯起來。

在測試指令碼建立USB裝置模擬器之後,它通常建立一個DSF物件。此物件提供對模擬框架執行時的訪問。IDSF::熱插拔方法使指令碼將裝置模擬器連線到模擬控制器的根集線器。熱插拔將連線通知模擬控制器,然後控制器模擬器操縱其暫存器以反映新的連線狀態並模擬硬體中斷。EHCI小埠通過檢測和報告新裝置來響應中斷,就好像附加了真實的硬體一樣。迷你埠和整個主機系統無法檢測真實硬體和模擬硬體之間的差異。

當EHCI微埠向模擬控制器提交事務以供執行時,控制器從非同步和定期排程中讀取事務,並根據USB 2.0和EHCI規範執行事務。事務是通過呼叫表示資料傳輸目標的SoftUSBEndpoint物件來執行的。當SoftUSBEndpoint物件接收到控制器正在嘗試資料傳輸的通知時,它可以向裝置模擬器觸發事件以請求資料,或者它可以使用在SoftUSBEndpoint物件中先前排隊的資料來響應傳輸請求。

測試指令碼或應用程式可以控制裝置模擬器的行為,並啟動與作業系統內模擬裝置的互動。例如,用於儲存裝置模擬器的測試指令碼可以通過從模擬器讀取檔案來向裝置發起I/O,同時向裝置模擬器提供表示檔案的資料。

當執行HID模擬時,裝置模擬器建立一個SoftHIDProtocolXlator物件,並使用其HID描述符設定其屬性。HID裝置模擬器向測試指令碼和應用程式公開一個介面,這些指令碼和應用程式能夠啟動HID事件,例如移動操縱桿或單擊滑鼠按鈕。HID裝置模擬器通過建立HID報告並呼叫SoftHIDProtocolXlator將它們傳輸到主機來實現這個介面。

下圖顯示了HID裝置的USB裝置模擬體系結構。

                                               HID裝置USB裝置模擬體系結構示意圖

建立日期: 9/21/2010

附錄:

USB鍵盤、滑鼠和操縱桿裝置的裝置堆疊

下圖顯示了USB鍵盤、滑鼠和操縱桿裝置的系統提供的裝置堆疊。

系統提供的驅動程式建立以下所需的裝置物件:

  • 低階USB驅動程式棧為連線到USB集線器的每個USB HID裝置建立物理裝置物件(PDO)。

        有關下級USB驅動程式和裝置堆疊的更多資訊,請參見USB驅動程式棧體系結構。

  • HID類驅動程式為連線到USB集線器的每個USB HID裝置建立功能裝置物件(FDO)。

        HID類驅動程式為FDO支援的每個鍵盤、滑鼠和操縱桿集合建立PDO。

       FDO可以有多個與其關聯的HID集合。例如,具有整合滑鼠的鍵盤可能具有用於標準鍵盤控制元件的一個集合,以及用於滑鼠的不同集合。

  • HID對映器驅動程式為鍵盤、滑鼠和操縱桿集合建立FDO。

        非USB鍵盤、滑鼠和操縱桿類驅動程式可以通過HID對映器驅動程式訪問USB HID裝置。

  • 非HIDClass類驅動程式為鍵盤、滑鼠和操縱桿裝置建立所需的過濾器DOs。

注意:

賣方驅動程式不需要USB鍵盤、滑鼠或操縱桿裝置。該系統專用於鍵盤和滑鼠裝置。USB操縱桿是共享裝置。使用者模式系統元件通過開啟他們的PDO和使用HID支援例程直接訪問操縱桿。使用者模式供應商應用程式也可以以相同的方式操作遊戲埠集合。

創建於: 4/28/2012