1. 程式人生 > >USB裝置模擬框架設計指南——6.DSF核心模擬器

USB裝置模擬框架設計指南——6.DSF核心模擬器

本節描述DSF中包含的核心模擬器。 本節包括以下主題:

DSF USB 2.0匯流排模擬器(SoftEHCI) DSF USB裝置模擬器(SoftUSBDevice) DSF USB外部集線器模擬器(SoftUSBHub) DSF HID協議轉換器(SoftHIDProtocolXlator)

目錄

向微軟傳送有關此主題的評論

建立日期:2010/9/21

DSF USB 2.0匯流排模擬器(SoftEHCI)

EHCI控制器模擬器(稱為SoftEHCI)由較低裝置過濾器(SoftEHCI.sys)組成,該過濾器載入到EHCI minport(Usbehci.sys)下面的改良的USB堆疊中。DSF有自己的EHCI minport和USB埠驅動程式版本,它們與DSF庫重新連結以攔截它們的硬體訪問呼叫(例如,

READ_REGISTER_ULONG 和 IoConnectInterrupt)。這些驅動程式的DSF版本稱為Usbport_dsf.sys 和 Usbehci_dsf.sys,並安裝為DSF的一部分。

SoftEHCI使用自己的裝置識別符號(ID),這與任何現有供應商的EHCI控制器不同,並且Usbehci_dsf.sys被安裝為該裝置ID的功能驅動程式。因此,真實和模擬的EHCI控制器可以共存於單個測試系統上。

軟體列舉器Dsfroot.sys安裝在DSF執行時,用於列舉SoftEHCI控制器。一個實用程式SoftEHCICfg.exe(也與執行時一起安裝)用於向Dsfroot.sys

傳送命令以安裝或刪除SoftEHCI控制器。這些命令與USB 2.0控制器的熱插拔或意外刪除的硬體等效。

下圖顯示了SoftEHCI公開的物件模型,測試應用程式可以使用。

                          SoftEHCI物件模型的圖解說明

SoftEHCI.Ports公開一組SoftEHCIRootHubPort 物件,這些物件使測試應用程式能夠將模擬的USB裝置連線到控制器的根集線器埠,並從控制器的根集線器埠斷開連線。SoftEHCIRootHubPort 還公開了使測試應用程式既能檢查又可控制埠狀態的屬性。

與所有模擬裝置一樣,SoftEHCI還公開了一個DSFDevice物件(),您可以在屬性公開的模擬裝置樹中找到該物件。連線到控制器的根集線器埠的USB裝置也可以在

DSFDevice::Children屬性中列舉。

向微軟傳送有關此主題的評論

建立日期:2010/9/21

DSF USB裝置模擬器(SoftUSBDevice)

SoftUSBDevice(ISoftUSBDevice)及其相關物件是每個模擬USB裝置的基礎。您可以通過生成一個使用者模式可執行模組(以任何形式)來建立USB裝置模擬器,該模組建立SoftUSBDevice物件並設定其屬性以確定裝置的配置。SoftUSBDevice物件直接與控制器通訊,並且可以通過使用裝置模擬器配置的屬性值來處理所有標準USB裝置請求。下面的圖表說明了SoftUSBDevice物件模型。

                                SoftUSBDevice物件模型的圖解說明

前一個圖中的物件表示USB裝置中的描述符層次結構。SoftUSBDevice物件具有由USB 2.0規範定義的裝置描述符的屬性。SoftUSBDevice(及其相關物件)的許多屬性是根據USB 2.0規範定義的描述符欄位命名的。

您可以通過設定 SoftUSBDevice::USB屬性將裝置配置為USB 2.0或USB 1.1。 SoftUSBDevice::DSFDevice屬性引用表示USB裝置的DSFDevice物件(因為DSF要求所有模擬裝置都由DSFDevice物件表示)。當裝置模擬器完成其模擬時,它必須呼叫 SoftUSBDevice::Destroy方法以允許物件清理在其操作期間分配的任何資源。

SoftUSBConfiguration物件(ISoftUSBConfiguration)具有包含配置描述符的屬性。SoftUSBDevice::Configurations返回一個集合,該集合包含裝置定義的每個配置的SoftUSBConfiguration 物件。裝置模擬器必須填充此集合。

SoftUSBInterface()具有包含介面描述符的屬性。SoftUSBInterface::NumberSoftUSBInterface::AlternateSetting 屬性儲存介面和介面的替代編號。配置的介面集由SoftUSBConfiguration::Interfaces屬性返回的集合引用。裝置模擬器必須填充此集合。此集合包含配置定義的每個介面替換的SoftUSBInterface物件。在執行時,SoftUSBConfiguration::AlternateForInterface方法返回SoftUSBInterface物件,該物件引用主機當前為給定介面選擇的備選物件。

SoftUSBEndpoint物件(ISoftUSBEndpoint)具有包含端點描述符的屬性。SoftUSBInterface::Endpoints屬性引用表示介面定義的所有端點的SoftUSBEndpoint 物件的集合。裝置模擬器必須填充此集合。 SoftUSBDevice::Endpoint0屬性引用裝置的控制端點。用於表示控制端點的SoftUSBEndpoint物件是由SoftUSDevice物件自動建立的。

SoftUSBEndpoint也是裝置模擬器用來控制資料到裝置和從裝置傳輸資料的物件。端點可以使用事件驅動或輪詢資料傳輸。對於事件驅動的端點,裝置模擬器必須在端點的ISoftUSBEndpointEvents連線點上安裝事件接收器。此介面定義了資料從主機移動到端點(OnWriteTransfer)和從端點移動到主機(OnReadTransfer)的事件。裝置模擬器可以對ACK、NAK、Err或START這些事件進行判斷,以確定主機將接收到的響應。此外,定義了由控制端點使用的事件,這些事件使裝置模擬器能夠處理非標準裝置請求(例如OnDeviceRequest 或OnDeviceRequestComplete),並且在需要的情況下,重寫對標準裝置請求的處理(OnSetupTransfer)。

對於輪詢的端點,SoftUSBEndpoint物件維護傳入和傳出資料的佇列,並且裝置模擬器必須週期性地將資料移入或移出這些佇列。 SoftUSBEndpoint::QueueINData方法將資料新增到入站佇列中。SoftUSBEndpoint::DrainOUTQueue 方法從出站佇列中刪除資料。對於控制端點,裝置模擬器可以使用SoftUSBEndpoint::QueueDeviceRequestResponse方法將響應排隊到預期的非標準裝置請求。可以對佇列進行調整,以獲得所保持的最大資料量,以及在入站資料過期之前保持入站資料的時間長度。

SoftUSBString物件(ISoftUSBString) 定義字串描述符。SoftUSBDevice.Strings 屬性引用一組SoftUSBString物件,這些物件包括裝置定義的字串描述符。在其他描述符中指定的字串描述符索引(例如,SoftUSBDevice.Manufacturer 屬性)確定此集合中對應的SoftUSBString物件的索引。

對於特定於裝置的描述符資料,SoftUSBConfiguration,SoftUSBInterfaceSoftUSBEndpoint 都具有DeviceSpecificDescriptor屬性,可以將其設定為一個位元組陣列,該位元組陣列將附加到返回到主機的相應描述符上。當設定DeviceSpecificDescriptor時,相應描述符的長度欄位被調整以反映附加的裝置特定資料。

除了SoftUSBString物件之外,所有物件都具有Context屬性,該屬性返回DSFPropertyBag物件(IDSFPropertyBag) ,可以使用該物件儲存任意資料。此屬性使模擬器和測試應用程式可以儲存物件的上下文資料。

向微軟傳送有關此主題的評論

建立日期:2010/9/21

DSF USB外部集線器模擬器(SoftUSBHub)

SoftUSBHub物件(ISoftUSBHub) 實現了一個外部USB集線器模擬器。因為USB規範將外部集線器定義為USB裝置,所以SoftUSBHub使用SoftUSBDevice(ISoftUSBDevice) 和相關物件,就像任何裝置模擬器一樣。 SoftUSBHub::SoftUSBDevice 屬性引用此物件。下面的圖描述了SoftUSBHub物件模型。

                                        SoftUSBHub物件模型的圖解說明

 SoftUSBHub::Ports 屬性引用一組 SoftUSBHubPort 物件(ISoftUSBHubPort) ,這些物件表示集線器上的一組埠。可以使用 SoftUSBHubPort::HotPlugSoftUSBHub::Unplug 方法將裝置附加到集線器或從集線器移除裝置。當建立SoftUSBHub物件時,可以設定 SoftUSBHub::NbrPorts 屬性,以確定集線器上埠的數量。建立SoftUSBHub物件將自動用指定數量的SoftUSBHubPort物件填充SoftUSBHub::Ports 屬性。

SoftUSBHub公開了包含集線器描述符的屬性。SoftUSBHub::Status屬性返回主機看到的當前集線器狀態。SoftUSBHubPort::Status 屬性返回主機看到的當前埠狀態,並且 SoftUSBHubPort 還具有反映埠狀態的各個位的單獨屬性,例如EnabledSuspend。當測試應用程式使用完一個集線器時,它必須呼叫SoftUSBHub::Destroy 方法來清理在其操作期間分配的任何資源。

向微軟傳送有關此主題的評論

建立日期:2010/9/21

DSF HID協議轉換器(SoftHIDProtocolXlator)

SoftHIDProtocolXlator物件(ISoftHIDProtocolXlator)用作模擬HID裝置的HID-USB協議轉換器。該物件根據USB HID裝置類規範,代表USB HID裝置模擬器配置並使用SoftUSBDevice物件(ISoftUSBDevice) 。下面的圖描述了USB HID模擬體系結構。

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

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

SoftHIDProtocolXlator物件公開 ISoftHIDProtocolXlator雙重介面,其具有以下屬性和方法:

  • DeviceType屬性由裝置模擬器設定,以確定正在模擬的HID裝置的型別。該裝置可以是鍵盤、滑鼠或其他裝置。
  • DSFDevice屬性返回SoftHIDProtocolXlator物件的SoftUSBDevice物件使用的DSFDevice物件(來自SoftUSBDevice::DSFDevice 屬性)。
  • HIDDescriptor.屬性由裝置模擬器設定為SoftUSBHIDDescriptor物件,以確定裝置的HID描述符。
  • 裝置模擬器呼叫WriteReportDescriptor方法來確定裝置的報表描述符的格式。報表描述符被指定為位元組陣列。
  • 裝置模擬器定期呼叫ReadOutputReport方法來接收從主機發送到裝置的HID報告。HID報告作為位元組陣列返回。
  • 裝置模擬器呼叫WriteInputReport 方法向主機發送HID報告。HID報告被指定為位元組陣列。
  • 裝置模擬器呼叫WriteFeatureReport 方法向主機發送特徵報告。特徵報告被指定為位元組陣列。

SoftUSBHidDescriptor物件公開 ISoftUSBHidDescriptor雙重介面,該介面具有與HID描述符的欄位相對應的以下屬性。(來自USB HID規範的描述符欄位名在括號內)。

  • HID屬性(bcdHID)是標識HID類規範釋出的數字表達式。
  • CountryCode屬性(bCountryCode) 是標識本地化硬體的國家程式碼的數字表達式。
  • NumDescriptors屬性(bNumDescriptors)是一個指定類描述符數量的數字表達式。(總是有至少一個,也就是報表描述符。)
  • ClassDescriptorType屬性(bDescriptorType) 是用於設定可選描述符型別的索引屬性。
  • DescriptorLength屬性(wDescriptorLength)是一個索引屬性,用於設定可選描述符的長度。

向微軟傳送有關此主題的評論

建立日期:2010/9/21