zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:7556回复:35

SetupDiEnumDeviceInterfaces(..) 老返回无效。请帮忙?(给分)

楼主#
更多 发布于:2003-05-02 15:29
具体:
   hardwareDeviceInfo = SetupDiGetClassDevs (
                           pGuid,
                           NULL, // Define no enumerator (global)
                           NULL, // Define no
  (DIGCF_PRESENT | // Only Devices present
                            DIGCF_INTERFACEDEVICE)); // Function class devices.

ER=GetLastError();

 能成功返回(ER=0);


long ss=SetupDiEnumDeviceInterfaces (hardwareDeviceInfo,
                                         NULL, // We don\'t care about specific PDOs
 pGuid,
  i,
   &deviceInfoData);
ER=GetLastError();

总是:ss=0;ER=259;不成功返回.


为什么?


zhongsion@21cn.com

 :mad:
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-02 16:12
怎么没人理采? 我急啊!!!!!!??????
waterwindsxu
驱动小牛
驱动小牛
  • 注册日期2003-04-28
  • 最后登录2018-03-04
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望165点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-05-02 22:22
和偶的问题一样,呵呵
上善若水! 凯风永至!
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-03 12:40
我已经知道为什么了。因为我的设备没有完全枚举。原先在电脑的设备管理里面的状态栏里看见有提示“此设备当前工作正常”,以为这样就说明设备已经完全枚举,其实不然。不过现在我又碰到新问题了:用bushound.exe观察,发现一些东西,不能理解????


Device  Phase  Data                       Description       Time   Cmd.Phase.Ofs(rep)
------  -----  -------------------------  ----------------  -----  ------------------
   2.0  CTL    40 a0 92 7f - 00 00 01 00  VENDOR            3.8sc         1.1.0        
   2.0  USTS   05 00 00 80                no response       248ms         1.2.0        
   2.0  CTL    40 a0 92 7f - 00 00 01 00  VENDOR            279us         2.1.0        
   2.0  USTS   05 00 00 80                no response       1.1sc         2.2.0        
   2.0  CTL    40 a0 6c 14 - 00 00 10 00  VENDOR            270us         3.1.0        
   2.0  USTS   05 00 00 80                no response        11sc         3.2.0        
   2.0  CTL    40 a0 92 7f - 00 00 01 00  VENDOR            259us         4.1.0        
   2.0  USTS   05 00 00 80                no response       418ms         4.2.0        
   2.0  CTL    40 a0 92 7f - 00 00 01 00  VENDOR            258us         5.1.0        
   2.0  USTS   05 00 00 80                no response       104ms         5.2.0        
   2.0  CTL    40 a0 00 00 - 00 00 02 00  VENDOR            226us         6.1.0        
   2.0  USTS   05 00 00 80                no response       313ms         6.2.0        
   2.0  CTL    40 a0 92 7f - 00 00 01 00  VENDOR            227us         7.1.0        
   2.0  USTS   05 00 00 80                no response       308ms         7.2.0        
   2.0  CTL    40 a0 92 7f - 00 00 01 00  VENDOR            210us         8.1.0        
   2.0  USTS   05 00 00 80                no response       215ms         8.2.0  



在整个枚举过程中,现在是在哪一步?为什么老是重复?
waterwindsxu
驱动小牛
驱动小牛
  • 注册日期2003-04-28
  • 最后登录2018-03-04
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望165点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-05-03 13:05
偶还是不明白,
那如何才能枚举呀?
请赐教!先谢了!!
上善若水! 凯风永至!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-03 14:35
这应该是个厂商自定义的描述符,因为你没有返回要求的内容,所以它一直重复向设备发送这个请求,如果这个描述符没什么大用处的话你可以到驱动里把这一项去掉就行了
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-03 14:43
一般build厂商请求的urb时会使用下面这个函数,你可以在驱动里找一下:
UsbBuildVendorRequest(urb,  //ptr to urb
URB_FUNCTION_VENDOR_DEVICE,
                     (USHORT) siz, //siz of urb
0,
            0x0,   //reservedbits=bmRequestType
0x0C,//request = USBSCAN_IOCTL_WRITE_REGISTER

wValue,
          wIndex,
ioBlock->pbyData,//TransferBuffer
NULL,//mdl (unused)
length,//bufferlength
NULL);

[编辑 -  5/3/03 by  jinghuiren]

[编辑 -  5/3/03 by  jinghuiren]
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-03 15:20
一般build厂商请求的urb时会使用下面这个函数,你可以在驱动里找一下:
UsbBuildVendorRequest(urb,  //ptr to urb
URB_FUNCTION_VENDOR_DEVICE,
                     (USHORT) siz, //siz of urb
0,
            0x0,   //reservedbits=bmRequestType
0x0C,//request = USBSCAN_IOCTL_WRITE_REGISTER

wValue,
          wIndex,
ioBlock->pbyData,//TransferBuffer
NULL,//mdl (unused)
length,//bufferlength
NULL);

[编辑 -  5/3/03 by  jinghuiren]

[编辑 -  5/3/03 by  jinghuiren]



我的上位机的程序是参考ezloader;下位机的程序是自已用汇编写的,通过查询SUDAV_ISR标志来回答主机,还有硬件使用No Serial EEPROM方式;而所有的描述符,是参照DEFAULT USB DEVICE DESCIPTERO TABLE;以上你说的这个函数我没有找到。 :(
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-03 22:01
我觉得是在Ezusb_8051Reset()和Ezusb_DownloadIntelHex()两个函数里,在这两个函数里建立的vendor请求的urb,例如:
urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE;
urb->UrbControlVendorClassRequest.TransferBufferLength = ptr->Length;
urb->UrbControlVendorClassRequest.TransferBuffer = ptr->Data;
urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_EXTERNAL;
urb->UrbControlVendorClassRequest.Value = ptr->Address;
urb->UrbControlVendorClassRequest.Index = 0;
这种直接赋值的方法和那个函数的作用是一样的,我觉得你用bushound不获得数据里的那个请求应该是cypress用于下载固件程序用的吧,你再仔细考虑一下吧。
waterwindsxu
驱动小牛
驱动小牛
  • 注册日期2003-04-28
  • 最后登录2018-03-04
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望165点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-05-05 11:00
请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的
问题的,
我用的guid是用HidD_GetHidGuid()函数获得的全局量,
请赐教小弟,
先谢谢了!
上善若水! 凯风永至!
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-06 23:47
我觉得是在Ezusb_8051Reset()和Ezusb_DownloadIntelHex()两个函数里,在这两个函数里建立的vendor请求的urb,例如:
urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE;
urb->UrbControlVendorClassRequest.TransferBufferLength = ptr->Length;
urb->UrbControlVendorClassRequest.TransferBuffer = ptr->Data;
urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_EXTERNAL;
urb->UrbControlVendorClassRequest.Value = ptr->Address;
urb->UrbControlVendorClassRequest.Index = 0;
这种直接赋值的方法和那个函数的作用是一样的,我觉得你用bushound不获得数据里的那个请求应该是cypress用于下载固件程序用的吧,你再仔细考虑一下吧。
 


多谢你的帮助,我已经给分给你。
下载固件程序?我做一伦的测试,好象是硬件的问题。测试如下:

drivermoniter 测试结果:
调用ezusb_8051Reset(fdo,1)时(注意:下位机所有控制由ez_usb core 自动完成):

URB返回状态    Urb->UrbHeader.Status = 80000005 (分析:10 - completed with error, endpoint not stalled)
KeWaitForSingleObject(.....))返回状态  status  = 0 (分析:正不正确????)      
irp 返回状态   ioStatus.Status =  c000009c (分析:正不正确????,好象不对,但没有依据。)



drivermoniter 测试结果:
调用ezusb_8051Reset(fdo,1)时(注意:下位机所有控制由ez_usb core 自动完成):

  Phase:   Phase Type:
            CTL   USB control transfer      
            URB   USB request block          
            USTS  USB status    
Device  Phase  Data         Description       Time   Cmd.Phase.Ofs(rep)
------  -----  -----------  ----------------  -----  ------------------
   9.0  CTL    40 a0 92 7f  VENDOR             10sc         1.1.0(2)    
               00 00 01 00                                  1.1.4        
   9.0  USTS   05 00 00 80  no response       242ms         1.2.0        
   9    URB    50 00 08 00  CONTROL TRANSFER   34us         1.3.0        
               05 00 00 80                                  1.3.4        
   9.0  CTL    40 a0 6c 14  VENDOR            616us         3.1.0        
               00 00 10 00                                  3.1.4
  
总的来说,是不是我的硬件(包括D+ D-)有问题?
 ;)
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-05-06 23:54
请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的
问题的,
我用的guid是用HidD_GetHidGuid()函数获得的全局量,
请赐教小弟,
先谢谢了!



我还没有解决呢。 :(
yangchunyu
驱动牛犊
驱动牛犊
  • 注册日期2003-04-20
  • 最后登录2008-03-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-05-07 13:23
请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的
问题的,
我用的guid是用HidD_GetHidGuid()函数获得的全局量,
请赐教小弟,
先谢谢了!

我也遇到这种情况!紧急求助!!!  
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-05-07 14:00
Urb->UrbHeader.Status = 80000005 我不知道
status = 0 是正确的,
但是你irp的返回status是不对的,你用softice跟踪一下,看是那里出了问题吧。
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-05-08 21:31
jinghuiren兄:
   快帮忙,问题已到了关键时刻! 怎么我编译ezusbsys.c 时连接出错:cannot open input file \"obj\\i386\\ezusbsys.obj\"
是不是我的选项有问题??我以前也遇到同样的问题,最后是找一个提示缺少的文件。你可以给一个文件给我吗?多谢!!!

jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-05-09 13:47
那个文件?
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-05-09 15:51
就是:ezusbsys.obj :(
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-05-09 21:23
那个文件?


完整的错误信息是:
 link() : error LNK1181: cannot open input file \"obj\\i386\\ezusbsys.obj\"

makefile 是EZUSBDRV自带的那个,我只不过修改了一下Ezusbsys.c然后重新build;而且这个环境build 其它的都不会有问题.为什么?我已找了整个网站,连google都用上了,但还是不能找到解决答案。烦烦烦...............@_@
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-05-09 22:33
你是不是装了DS,如果是就可能是这个问题,你到project菜单下的settings里的最后一项post-build step里,看那个c:\\PROGRA~1\\COMPUW~1\\SOFTIC~1\\SoftICE\\nmsym.exe /translate:source,package,always .\\objchk\\i386\\D12TEST.sys
设置对不对,很可能是这里的问题。
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-05-11 22:49
你是不是装了DS,如果是就可能是这个问题,你到project菜单下的settings里的最后一项post-build step里,看那个c:\\PROGRA~1\\COMPUW~1\\SOFTIC~1\\SoftICE\\nmsym.exe /translate:source,package,always .\\objchk\\i386\\D12TEST.sys
设置对不对,很可能是这里的问题。


那个问题我已经解决了,但到现在为止,问题是这样:
1。枚举过程已通过;
2。复位8051时,不能正确返回。
现在,我真的想不到是什么问题。老兄帮帮忙吧! :(
上一页
游客

返回顶部