分享

WDM驱动程序设计之USB总线支持类:KUsbInterface类

 李林侠图书馆 2012-01-15

WDM驱动程序设计之USB总线支持类:KUsbInterface类

分类: Windows驱动 436人阅读 评论(0) 收藏 举报

KUsbInterface类
【Overview】
KUsbInterface类抽象了一个USB接口,这个接口在USB规格说明书的第5章和第9章作了说明。一个接口是一个端点(endpoints)集合,这里的端点指的是数据的发送源和接收方。换句话说,一个接口是一个USB设备产生数据或使用数据的组件的子集(或子类)。一个给定的设备可以有若干个接口(interfaces)。包含相同端点的接口不能同时被配置。
一个驱动使用KUsbInterface类实例来管理一个设备管道的读写访问。KUsbPipe和KUsbInterface两个类的关系类似与KUsbInterface和KUsbLowerDevice两个类的关系。比如说,一个KUsbInterface类实例必须在KUsbPipe对象之前被初始化。因此这个类的存在更多的是结构上的需要而非功能上的需要。实际上几乎没有那个成员真正的和物理设备产生了交互。但是,这个类为驱动提供了一种控制接口和它的管道之间信息(information)的方法。
KUsbInterface对象的初始化发生在构造函数里或者Initialize函数里。初始化要求一个一个KUsbLowerDevice类实例的参数,这个实例将是把KUsbInterface对象注册到其上的实例。在KUsbLowerDevice被初始化之前,KUsbInterface实例不可能被驱动初始化。这意味着驱动必须在初始化KUsbInterface类之前对KUsbLowerDevice类的构造函数或initialize函数进行一次成功的调用(call)。

【Legacy Note】
使用USBENDPOINT结构来描述他们的USB设备的设备驱动程序应该遵循另一套初始化KUsbInterface对象的规则。这些对象必须在物理设备被配置以后才能进行初始化。这意味着在初始化任何KUsbInterface对象之前,必须对KUsbLowerDevice::Configure作一次成功的调用。

【Member Functions】
1、KUsbInterface - Constructor (2 forms)构造函数
调用中断级 IRQL <= DISPATCH_LEVEL。

2、Initialize - Initialization初始化函数
调用中断级 IRQL <= DISPATCH_LEVEL。

3、Open - Opens a KUsbInterface object, which establishes a binding between the object and an active USB interface打开一个KUsbInterface对象,这个对象建立了一个对象和一个激活的USB接口之间的连接(binding)。

4、IsOpen - Tests if the KUsbInterface object has been opened测试KUsbInterface对象是否已经打开。

5、Close - Closes an open KUsbInterface object关闭一个打开的KUsbInterface对象。

6、SelectAlternate - Change the device’s setting for the current interface给设备发送一个URB来为设备使能所选定的设置。

7、InterfaceNumber - Accessor for interface number从对象获取接口序号。
任意中断级调用

8、AlternateSetting - Accessor for alternate setting从对象获取指定的设置。
任意中断级调用

9、Class - Accessor for USB class从对象获取接口类。
任意中断级调用

10、Subclass - Accessor for USB subclass从对象获取接口子类。
任意中断级调用

11、Protocol - Accessor for protocol attribute从对象获取协议属性。
任意中断级调用

12、NumberOfPipes - Accessor for number of pipes in interface获取构成接口的管道数量。
任意中断级调用

13、Pipes - Accessor for pipe information structs从接口对象获取管道信息结构的数组,参数为索引号(index)。
任意中断级调用

14、GetStatus - Get status of interface from device获取接口状态。
调用中断级必须在PASSIVE_LEVEL。

15、SetFeature - Set interface feature设置设备特征值。如果无法分配URB的空间就返回STATUS_INSUFFICIENT_RESOURCES ,否则就返回对USB系统驱动调用所返回的状态值。
调用中断级必须在PASSIVE_LEVEL。

16、ClearFeature - Clear interface feature清除接口特征值。

17、BuildClassRequest - Build an URB for a class request为类请求构造一个URB,申请内存(非分页内存),并/或 为逻辑设备初始化

一个_URB_CONTROL_VENDOR_OR_CLASS_REQUEST结构。
调用者处于IRQL <= DISPATCH_LEVEL中断级别上。

18、BuildVendorRequest - Build an URB for a vendor request为供应商请求构造一个URB,申请内存(非分页内存),并/或 为逻辑设备初始化一个_URB_CONTROL_VENDOR_OR_CLASS_REQUEST结构。
调用者处于IRQL <= DISPATCH_LEVEL中断级别上。

19、SubmitUrb - Submits an URB (USB Request Block) to the system USB bus driver for processing提交一个URB(USB Request Block)给系统USB总线驱动程序去处理。
如果驱动程序提供了一个非空(non-NULL)的完成例程,那么两种FORM之一的调用者处于IRQL <= DISPATCH_LEVEL中断级别上。否则中断级别必须在PASSIVE_LEVEL。
                                            ----------------
                                            § 译自"DriverWorks帮助文件"  §
                                            §   李文凯 2008年05月02日    §
                                            ----------------  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多