lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:1885回复:10

[十万火急]:多个相同的设备同时连接到不同的usb口,如何与指定接口上的设备进行通信。

楼主#
更多 发布于:2007-03-29 15:51
请各位高手大虾多多指教啊:

     有多个完全相同的设备同时连接到一台机器的不同usb口,比如序号为1、2、3、4,现在想对三号接口上的设备进行操作。不知道如何用createfile函数打开这个设备,因为我无法获得这个设备的设备路径。
    我现在获得设备路径的方法是用setupdigetclassdevs函数获得符合条件(设备的GUID已知)的设备信息集,然后用setupDiGetInterfaceDeviceDetail获得该设备的设备路径,再用createfile函数打开。但是这种方法无法确切的知道设备是连接到哪个接口上的。

      不知哪位大虾做过类似的东西,请指点一二,多谢多谢!
lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-30 09:14
难道没有人做过吗,还是我说的不够清楚?
lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-03 09:06
顶一个,期待高手解答
lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-03 09:23
我解释一下为什么需要解决这个问题。
公司开发的一个设备,驱动是自己开发的,在pc端做了一个程序对该设备进行远程操作(如烧写,硬件测试、调试等等),现在想实现一个功能,把多个设备连接到pc上(直接连接或通过一个usb hub),用程序对这些设备进行控制,有可能是批量烧写,也有可能对每个设备进行不同操作,如果能够知道哪个设备连接到哪个端口,就可以通过端口号标识该设备并进行操作。
我现在可以通过扫描端口知道哪个端口上连接了设备,也可以获取设备的descriptor(参考usbview),但是没有办法获取这个设备的device path,也就没有办法用createfile打开这个设备。
而使用SDK 的setupXXXX系列函数能获取所有的设备并打开,但是没有办法知道哪个设备连接到了哪个端口。
在网上搜了一些,发现有很多人都碰到过类似的需求,不知哪位大虾解决了这个问题,请不吝赐教,另外感兴趣的话,大家也可以一起讨论一下
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-03 09:58
我觉得最好的办法就是给每个设备设置一个代表身份的唯一ID, 既然setupXXXX系列函数能获取所有的设备并打开,那就再读取一下ID好了。
lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-03 11:10
设备的GUID都是一样的,所以比较头疼
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-03 11:26
firmware里添加啊,通过vendorcommand来读取。
lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-04-03 12:16
引用第4楼Delphips2007-04-03 09:58发表的“”:
我觉得最好的办法就是给每个设备设置一个代表身份的唯一ID, 既然setupXXXX系列函数能获取所有的设备并打开,那就再读取一下ID好了。


setupxxx函数需要传递GUID作为过滤参数,如果有几千台设备的话,岂不是。。。。。。
lltkiller
驱动牛犊
驱动牛犊
  • 注册日期2006-06-28
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-04-03 14:57
或者换个思路,如果已经通过扫描(usbview中的方法)确定在某个接口上连接了该设备,也可以获得设备的descriptor,那么如何进一步获取这个设备的devicepath?
sosojohn
论坛版主
论坛版主
  • 注册日期2006-01-29
  • 最后登录2021-06-25
  • 粉丝0
  • 关注1
  • 积分1047分
  • 威望535点
  • 贡献值1点
  • 好评度178点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2007-04-03 15:16
GUID一样,能代表Window给每个设备随即的Sn一样么?
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-04-03 17:17
SetupDiGetDeviceRegistryProperty 枚举所有设备,取到devicepath.
游客

返回顶部