---------------------
| 应用程序 |
---------------------
|usb client driver | (层一)
---------------------
| usbd.dll | (层二)
---------------------
| ohci.dll | (层三)
---------------------
wince的USB驱动分为三层,如上图所示.从上到下,姑且将其称为层一,层二,层三。层一通过gc_usbFuncs来调用层二所提供的功能,而层二通过gc_hcdFuncs来调用层三实现的功能,而应用程序则与层一打交道。
HCD初始化时,会创建一个线程,CHub::HubStatusChangeThead().在此线程中,会监视USB口的状态,如果有设备插入,则有如下的调用步骤:
AttachDevice()->CFunction::EnterOperationalState()->HcdDeviceAttached()->LoadDeviceDrivers()->LoadUsbClientDriver()->LoadGroupDriver()->LoadRegisteredClientDriver().
CDevice::AttachDevie()处理设备的初始化,如读设备描述符,配置地址,加载Client Driver等。
在LoadRegisteredClientDriver()内,会根据不同的Class,来调用相应的UsbDeviceAttach().而它的第一个参数就是gc_usbFuncs.在IssueVendorTransfer()之类的函数中,有一参数LPCUSB_FUNCS,该指针就是指向gc_usbFuncs.
http://www.cnblogs.com/cdfyanghua/archive/2008/05/20/1203556.html
本文详细解析了Windows CE系统的USB驱动架构,分为三层,并介绍了各层间的交互方式及HCD初始化流程,包括线程创建、状态监测、设备插入响应及不同类别的USB设备驱动加载过程。
5043

被折叠的 条评论
为什么被折叠?



