阅读:2226回复:9
请教大家怎样在应用程序中检测连接上USB,然后通知USB驱动工作?
重新解释一下,1楼说的没错,USB驱动开机就加载了,连上USB就收到中断,然后拉高D+就启动了,是不受外部应用程序控制的。
现在为了实现充电功能,想在一个应用程序中来检测USB的连接,然后提示是否启动USB工作。 只有选择是,才通知驱动工作,映射磁盘等等。 请问这部分代码应该放在什么USB驱动的那个部分呢,跟应用程序间的通讯是否要用事件方式。 |
|
沙发#
发布于:2008-07-25 02:16
有点没明白. usb驱动不受控制? 连上就启动驱动?
驱动应该是开机就被加载的, 只是连上后产生了usb中断. |
|
板凳#
发布于:2008-07-25 08:52
不知道能不能达到你的目的,倒可以试一下
LRESULT testDlg::OnAtlasNotify(WPARAM WParam, LPARAM LParam) { USB_CONNT_EVENT_DATA UsbRet; if(!AtlasGetUSBState((PDWORD)&UsbRet)) { ............ } else { if(UsbRet.AsStruct.bConnectStatus == UCS_CONNECT) { UsbConnected=1; ............... } else if(UsbRet.AsStruct.bConnectStatus == UCS_DISCONNECT) { UsbConnected=0; ................ } } return (LRESULT)0; } |
|
|
地板#
发布于:2008-07-25 13:17
2楼能否问下,这个消息是那里发出的呢。
另外收到消息的时候是否驱动都已经映射磁盘了。 我的目的是连上USB,并不马上工作,而是通知应用程序,只有选择连接USB,才执行相应的usb操作。 |
|
地下室#
发布于:2008-07-25 14:31
ARAGORN\DRIVERS\MISCControl里面就有 USB_CONNT_EVENT_DATA 这个结构体,
|
|
|
5楼#
发布于:2008-07-25 14:38
仅供参考
|
|
|
6楼#
发布于:2008-07-26 05:49
1,可以让应用程序在调用USB的一个IOCTL时阻塞住,在USB线插上时让它运行。
2,然后应用程序调用一个IOCTL让USB驱动才开始运行。 |
|
|
7楼#
发布于:2008-07-26 08:57
如果你的PD+是由一个GPIO控制的话,那么插入USB时,别将这个脚拉高,同时通过事件方式通知应用 程序,当应用程序需要连接USB时,通知拉高拉高那个GPIO即可
|
|
8楼#
发布于:2008-07-27 01:03
给了这么多思路,真是多谢大家啦
具体的做法就是大家的思路和在一起就是了。 |
|
9楼#
发布于:2008-07-27 01:10
首先应用程序应该通过检测VBUS来确定是否连上主机,如果连上则通过IOCTL或者EVENT来
通知USB驱动,上拉PD+。后面的过程就都一样了。 所以现在的问题变成了,控制USB驱动是等待还是运行的代码要放在什么地方比较合适呢。 请大家给支个招吧。 |
|