请版主和高手们关注---USB通讯程序中遇到的高难度问题
junki 2005-05-17 08:59:43 我现在正在进行编程测试,主要是实现应用程序与EV2300(TI公司产品)的USB设备通讯。
据了解,USB设备驱动由TI厂商自己开发的(我们无法得到它的技术资料),从应用角度很难明白通讯的实质;
并非像HID类型USB设备,直接调用系统API函数就可以实现的。
从网上获取了一些USB应用开发的信息,我们写了一个测试程序,发现
存在许多问题,请指导:
1. 如何获取GUID信息,在INF文件中并没有包含此信息,只有VendorID=0451,ProductID=0035,是不是每个USB设备都对应不同的GUID,而它是打开USB设备的唯一途径;很多人都是从注册表中获取的,有没有可能通过程序实现呢?
2. 在获得GUID之后,就可以得到设备路径,主要通过系统API函数实现:
SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetDeviceInterfaceDetail
得到的设备路径DevicePathName,是否要在其后面加上pipe0,1,2对应于通讯所使用的通道?
3. USBHandle = CreateFile _
(DevicePathName, _
GENERIC_READ Or GENERIC_WRITE, _
(FILE_SHARE_READ Or FILE_SHARE_WRITE), _
Security, _
OPEN_EXISTING, _
0&, _
0)
打开设备时,有时成功,有时失败,得到"请求的资源正在使用中"错误信息,是不是CreateFile 参数的
问题?
4. 最关键的错误
Result = WriteFile(USBHandle, _
WriteBuffer(0), _
CLng(Capabilities.OutputReportByteLength), _
NumberOfBytesWritten, _
0)
Result返回为0,写数据没有成功,不知道为什么?也不明白WriteBuffer(0), 和Capabilities.OutputReportByteLength
的含义。调试了很久,也找不到原因,现在都是火烧眉头了,一下子好像掉进了泥陷中,举步维履。
由于我们对USB设备开发不甚了解,一切都还是摸索,探讨中,恳请您的帮助,万分感谢!