wangxin_china
驱动中牛
驱动中牛
  • 注册日期2003-03-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1483回复:8

应用程序如何实现总线复位?

楼主#
更多 发布于:2004-01-18 09:40
如果我不拔usb的电缆,希望能和host重新进行连接,应用程序应该怎么实现这个操作?
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-18 15:24
看看D12是如何实现的就知道了!
wangxin_china
驱动中牛
驱动中牛
  • 注册日期2003-03-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-18 15:56
能说清楚些么?
我说的是应用程序,不是FIRMWARE.
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-01-18 18:25
前两个月试过,现在已经忘了,郁闷  :(

在 win2k 下直接用 SetupXX 函数就可以实现; win98 下需要专门的处理,我当时从一个例子代码里头拷了一段处理代码,可是我回忆不起来是那个例子了。

如果你用的是 2K, 读一读 SetupXX 应该能解决。
www.bjjcz.com
wangxin_china
驱动中牛
驱动中牛
  • 注册日期2003-03-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-18 21:32
麻烦你帮我想想好么?谢谢了! :(
bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-19 11:21
你所说的和host重新进行连接,是不是指用应用软件实现拔插usb设备。如果是的话,那你就要对host进行操作了,将端口上下电,我不知道是不是所有host都支持。如果你仅希望从新枚举的话,你发usb总线复位就可以了。
wangxin_china
驱动中牛
驱动中牛
  • 注册日期2003-03-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-20 10:43
理论我是知道的,我想知道使总线复位的具体方法,谢谢.
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-25 12:43
你可以build一个vendor request,当设备收到这个请求时将soft connect位先清除,延时一段时间再置位,这样就相当于拔掉电缆再查上,只不过这样去动力要作相应的处理,就是要执行remove device的历程,要不然会出现内存泄漏
bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-02-01 16:43
应用程序我是这样写的
hFile = open_file(m_GenericIn.pipe_name);
if(hFile != INVALID_HANDLE_VALUE)
{
     hDevice = open_dev();
     if (hDevice != INVALID_HANDLE_VALUE)
     {
         //下面这个函数想驱动发出对设备复位指令
         DeviceIoControl(hFile,
             IOCTL_D12_RESET_DEVICE,
  0,
  0,
  0,
  0,
  &nBytes,
  NULL);
     }
}
CloseHandle(hFile);
CloseHandle(hDevice);
你的驱动要支持。
在驱动中对这个函数的响应最关键是要有
    irp = IoBuildDeviceIoControlRequest(
                IOCTL_INTERNAL_USB_RESET_PORT,
                deviceExtension->TopOfStackDeviceObject,
                NULL,
                0,
                NULL,
                0,
                TRUE, /* INTERNAL */
                &event,
                &ioStatus);
游客

返回顶部