WinCE6.0 USB Host驱动加载流程详解(一)


 前面已经讲过WinCE6.0下USB驱动的整体结构,今天来看看USB Host驱动部分。可能是因为USB Host驱动一般不修改的原因,这方面的资料少的可怜,所以只能自己研究了。分析的源码微软已经提供了,在目录WINCE600\PUBLIC\COMMON\OAK\DRIVERS\USB下面。
    该目录下包含CLASS、USBD、HCD、COMMON和INC文件夹,其中COMMON和INC文件夹中包含的一个关于锁功能的文件lock.c,HCD文件夹中是对USB1.1和USB2.0等协议的支持,为USBD提供操作控制器的接口,一般不会去做修改,这里不去深究。

USBD
USB Host驱动加载的总入口,usbd.dllUSBD为上层Client层驱动部分使用WINCE600\PUBLIC\COMMON\DDK\INC中,此文件定义了所有的       上面的三个函数在Client驱动部分必须实现这三个接口。
VOID GetUSBDVersion(LPDWORD lpdwMajorVersion, LPDWORD lpdwMinorVersion);
BOOL RegisterClientDriverID(LPCWSTR szUniqueDriverId);
BOOL UnRegisterClientDriverID(LPCWSTR szUniqueDriverId);
BOOL RegisterClientSettings(LPCWSTR lpszDriverLibFile,
                                                        LPCWSTR lpszUniqueDriverId, LPCWSTR szReserved,
                                                        LPCUSB_DRIVER_SETTINGS lpDriverSettings);
BOOL UnRegisterClientSettings(LPCWSTR lpszUniqueDriverId, LPCWSTR szReserved,
                                                            LPCUSB_DRIVER_SETTINGS lpDriverSettings);
HKEY OpenClientRegistryKey(LPCWSTR szUniqueDriverId);
BOOL GetClientRegistryPath(LPWSTR szRegistryPath, DWORD dwRegPathUnit, LPCWSTR szUniqueDriverId);
    可以看出上面几个函数都是通过def文件显式导出的。除此之外,usbdi.h中还有一个函数指针列表结构体_USB_FUNCS,里面包含了USBD的另外一部分接口,是在def中没有导出的,通过函数指针结构体在驱动之间进行传递的。_USB_FUNCS中的函数指针的实体都在文件usbddrv.cpp的文件中,整个USB驱动只有一个_USB_FUNCS的全局变量gc_UsbFuncs,它的声明及初始化在usbd.c中。
    USBD提供的主要接口函数归类如下:
USBD的传输函数
IssueControlTransfer      IssueBulkTransfer     IssueInterruptTransfer              IssueIsochTransfer
IsTransferComplete              GetTransferStatus     GetIsochResults                AbortTransfer
CloseTransfer
USBD和USB设备建立通讯管道的函数
OpenPipe                            AbortPipeTransfers        ResetPipe                            ClosePipe
IsPipeHalted                 IsDefaultPipeHalted       ResetDefaultPipe
USBD针对总线上数据打包的函数
GetFrameNumber          GetFrameLength           TakeFrameLengthControl
SetFrameLength            ReleaseFrameLengthControl
USBD和USB设备进行交互的函数
OpenClientRegistryKey         RegisterNotificationRoutine         UnRegisterNotificationRoutine
GetUSBDVersion                 LoadGenericInterfaceDriver         TranslateStringDescr
FindInterface                       RegisterClientDriverID                UnRegisterClientDriverID
GetDeviceInfo                     RegisterClientSettings                  UnRegisterClientSettings

    今天先到这里,明天继续。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值