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设备仿真体系结构示意图

有关HID设备的更多信息,请参见USB键盘、鼠标和操纵杆设备的设备堆栈.

创建日期: 9/21/2010

英文原文连接:https://docs.microsoft.com/en-us/previous-versions/windows/hardware/dsf/ff538319(v%3dvs.85)

 

附录:

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

英文原文连接:https://msdn.microsoft.com/en-us/library/Ff538426

 

猜你喜欢

转载自blog.csdn.net/lvyiwuhen/article/details/82816976
今日推荐