阅读:1483回复:8
应用程序如何实现总线复位?
如果我不拔usb的电缆,希望能和host重新进行连接,应用程序应该怎么实现这个操作?
|
|
沙发#
发布于:2004-01-18 15:24
看看D12是如何实现的就知道了!
|
|
板凳#
发布于:2004-01-18 15:56
能说清楚些么?
我说的是应用程序,不是FIRMWARE. |
|
地板#
发布于:2004-01-18 18:25
前两个月试过,现在已经忘了,郁闷 :(
在 win2k 下直接用 SetupXX 函数就可以实现; win98 下需要专门的处理,我当时从一个例子代码里头拷了一段处理代码,可是我回忆不起来是那个例子了。 如果你用的是 2K, 读一读 SetupXX 应该能解决。 |
|
|
地下室#
发布于:2004-01-18 21:32
麻烦你帮我想想好么?谢谢了! :(
|
|
5楼#
发布于:2004-01-19 11:21
你所说的和host重新进行连接,是不是指用应用软件实现拔插usb设备。如果是的话,那你就要对host进行操作了,将端口上下电,我不知道是不是所有host都支持。如果你仅希望从新枚举的话,你发usb总线复位就可以了。
|
|
6楼#
发布于:2004-01-20 10:43
理论我是知道的,我想知道使总线复位的具体方法,谢谢.
|
|
7楼#
发布于:2004-01-25 12:43
你可以build一个vendor request,当设备收到这个请求时将soft connect位先清除,延时一段时间再置位,这样就相当于拔掉电缆再查上,只不过这样去动力要作相应的处理,就是要执行remove device的历程,要不然会出现内存泄漏
|
|
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); |
|