请版主和高手们关注---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设备开发不甚了解,一切都还是摸索,探讨中,恳请您的帮助,万分感谢!
...全文
498 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
doubledog 2005-06-08
  • 打赏
  • 举报
回复
到www.8dragon.com下载USB在线检测程序。可以借鉴!
crazytan 2005-06-07
  • 打赏
  • 举报
回复
首先申明我不是高手,以下是我的一些理解,如果有错误请大家指正

1.关于GUID。我们说一个USB设备,如USB Modem, USB表明了设备使用的总线类型,而modem表明了这
个设备的功能,所以这是两个层面。因此就会有这钟现象:USB Modem属于Modem类,USB摄像头(Webcam)
属于Image类等。定位一个USB设备可以通过 设备所属的类GUID + VID_PID

2.在Win32系统里面,设备一般都是抽象为文件,应用程序与驱动程序的通信一般是通过文件操作的API,
CreateFile,ReadFile等

3.打开设备的函数CreateFile,其中最重要的参数是文件路径,也就是设备路径,所以关键就是如何找
到设备的路径,方法就是通过楼主所列举的那几个SetupDiX函数。应用程序是跟驱动程序这个整体通信,
而具体通信的通道应该在驱动程序里面处理

4.通过试加猜去了解黑盒子里面的东西是痛苦的
捕鲸叉 2005-05-26
  • 打赏
  • 举报
回复
1.一般来说,不同的设备驱动有不同的GUID,对于别人的驱动,好象只能从注册表里读了.
2.不知道
3.同楼上
4.如果USB设备的驱动没有写IRP_MJ_WRITE例程,你这种方法是永远不会成功的.(我写的几个USB驱动都属于这种情况)
red-fly 2005-05-22
  • 打赏
  • 举报
回复
我刚开始看usb开发的书,也是一头雾水,以下为个人观点,仅供参考:

1. 书上说要从注册表中读取。其它的我就不太清楚了
2. 是否要加上通道号码,我想这个比较容易,你读取之后,看读出的结果是否有通道号码,如果没有,你就把它加上去。(好笨呀)
3. 应该是程序的问题。比如过去打开,但没有关闭。或者关闭了,但硬件还没有“关闭”
4. WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/O
);
后两个可以是NULL,也可以是指针,但是用NumberOfBytesWritten不是指针,恐怕是不行的吧,你就在其前面加上个“&”。不知道你的WriteBuffer(0)是个什么类型,如果不是一个指向要写入的数据的指针,我真猜不出其结果会是什么
xift_2008 2005-05-21
  • 打赏
  • 举报
回复
WriteBuffer(0)中的0是什么,不会写buffer是空的吧?
Capabilities.OutputReportByteLength应该是需要写
的数据长度吧,即WriteBuffer中实际的数据长度。
lcstudio 2005-05-19
  • 打赏
  • 举报
回复
USB驱动层不是用CreateFile,WriteFile这样的高级系统调用来操作的.那个CreateFile得到的句柄只能针对USB层的一些状态做ioctl.
ppcust 2005-05-19
  • 打赏
  • 举报
回复
最好能知道,他下面的固件是怎么写的,这样才好找错误,,

现在你是单方面看上层的,,好象不好做,,,


你不知道下面是干吗的,就给别人下命令,,别人当然不听了啊
wut55 2005-05-18
  • 打赏
  • 举报
回复
1、USB设备的GUID应该是一样的,也就是统一的,只要在INF文件里的class = USB;
2、WriteFile的说明你应该看看MSDN;在WriteFile后面调用GetLastError()看返回什么错误。
3、至于如何打开USB设备,我没玩过,不清楚。
newzk 2005-05-18
  • 打赏
  • 举报
回复
不知道你的设备是否支持WIA,若支持,你可下载xp sdk
junki 2005-05-17
  • 打赏
  • 举报
回复
怎么没有人回答?
今天放在硬件驱动版,VC版也没有人回答

哎,难道高手都在潜水吗?

UP者都有分,提出有建议性话的,给高分。。
DooDu 2005-05-17
  • 打赏
  • 举报
回复
高级问题,帮up
mysq 2005-05-17
  • 打赏
  • 举报
回复
帮你UP,学习!
英文版:Expert Spring MVC and Web Flow 内容简介 《深入解析Spring MVCgn Web Flow》是Spring MVC 和Web Flow 两个框架的权威指南,书包括的技巧和提示可以让你从这个灵活的框架汲取尽可能多的信息。书包含了一些开发良好设计和解耦的Web 应用程序的最佳实践,介绍了Spring 框架的Spring MVC 和Spring Web Flow,以及着重介绍利用Spring 框架和Spring MVC 编写Web 应用程序的最佳方法。《深入解析Spring MVCgn Web Flow》还介绍了Spring 框架的设计模式,以及如何将同样的设计和技术应用到读者自己的代码。 《深入解析Spring MVCgn Web Flow》适合各层次Spring Web 程序员阅读。 编辑推荐 《深入解析Spring MVCgn Web Flow》来自Spring开发团队的权威之作前所未有地深入剖析Spring MVC技术内幕大量专家经验和技巧,全面提升你的Web开发境界 Spring MVC和Spring Web Flow是Spring平台上两个极为灵活而且功能强大的Web框架。前者是构建在Spring框架上的Web应用程序框架,可以同许多其他视图技术无缝集成;后者是控制业务处理流程的有效解决方案,提供了一种编写有状态和基于会话的Web应用程序的简便手段。 《深入解析Spring MVCgn Web Flow》出自Spring核心开发者之手,不仅详细分析代码,全面剖析了两个框架的各种特性(包括一些不为人知的技术亮点)。告诉读者如何最大程度地发挥出它们的潜力。还解密了设计这两个框架时的许多决策内幕、所应用的设计模式和面向对象技术,使读者能够更深入地了解Spring。并在自己的项目运用这些专家技术,全面提升自己的Web开发境界。 《深入解析Spring MVCgn Web Flow》由spring框架的开发和维护者SpringSource公司组织编写,作者均为资深Spring工程师或咨询师。 Seth Ladd是资深Spring培训师,曾为NEC公司等许多国际性机构构建Web系统。Darren Davison和StevenDevijver都曾是Spring核心开发人员,在Spring源代码和文档可以很容易地找到他们的名字。而Colin Yates、Keith Donald和Rob Harrop均是SpringSource资深工程师,仍然是Spring新版本开发的核心骨干。Yalcs是.J2EE主架构师,Donald是SpringWeb Flow负责人,Hartop是Spring与Tomcat成产品负责人。“《深入解析Spring MVCgn Web Flow》为Spring社区弥补了一大空白。” ——Lasse Koskela.JavaRanch版主,Test Driven作者“《深入解析Spring MVCgn Web Flow》是非常急缺的深入讲解Spring MVCf~~Spring Web Flow的图书堪与Pro Spring相媲美。” ——Steve Anglin,资深Java技术专家

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧