针对MASSSTORAGE类设备我修改了DISK.C文件,通过RETAILMSG增加了一些调试信息,跟踪发现DISK.C里的DSK_IOControl控制类型关于SCSI只有IOCTL_SCSI_PASSTHROUGH,而我们在XP上位机通常用IOCTL_SCSI_PASS_THROUGH_DIRECT,而且上位机的IOCTL_SCSI_PASS_THROUGH与WINCE中IOCTL_SCSI_PASSTHROUGH值不相同,看来应该增加对应的控制类型分支,目前没什么思路,先放一放。
接下来又分析了一下HID类设备的USB访问。
在HID类设备中,同样通过RETAILMSG增加了一些调试信息,主要文件是C:\WINCE500\public\common\oak\drivers\usb\class\hid\下的文件,将每个函数都增加了串口输出调试信息。
当我在插入我们的HID设备时,尝试比较插入鼠标时的调试输出信息,发现Missing endpoint descriptors,没有相关端点描述符,回头分析我们的HID设备,原来,该设备通讯采用了默认端点0,所以不需要其他端点。但WINCE提示要端点,我就修改了HID设备的接口描述符,增加了一个端点描述符,再次插入设备了,程序运行正常。
这中间我将HID设备的HID描述符换成了
0x05,0x01,0x09,0x00,0xa1,0x01,0x09,0x00,0xa1,0x00,0x05,0x01,0x09,0x00,
0x15,0x80,0x25,0x7f,0x75,0x08,0x95,0x02,0x81,0x02,0x09,0x00,0x15,0x80,
0x25,0x7f, 0x75,0x08,0x95,0x9a,0x91,0x02,0xc0,0xc0
并在WINCE注册表中根据HID描述符信息增加了对应的信息
;-------------------------------------USBKEY------
[HKEY_LOCAL_MACHINE\Drivers\HID\ClientDrivers\Usbkey]
"DLL"="ukeyWellcom.dll"
"Prefix"="UKY"
"IClass"="8746756c-b8b9-0579-f9bc-b86dea94591a"
"RemoteWakeup"=dword:1
[HKEY_LOCAL_MACHINE\Drivers\HID\LoadClients\Default\Default\1_0]
[HKEY_LOCAL_MACHINE\Drivers\HID\LoadClients\Default\Default\1_0\Usbkey]
"DLL"="ukeyWellcom.dll"
;-------------------------------------USBKEY END------
现在提示“Could not load client DLL ukeyWellcom.dll”
看来只有编写驱动就可以了,不着急,慢慢来