NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
阅读:2226回复:9

请教大家怎样在应用程序中检测连接上USB,然后通知USB驱动工作?

楼主#
更多 发布于:2008-07-24 21:53
重新解释一下,1楼说的没错,USB驱动开机就加载了,连上USB就收到中断,然后拉高D+就启动了,是不受外部应用程序控制的。
现在为了实现充电功能,想在一个应用程序中来检测USB的连接,然后提示是否启动USB工作。
只有选择是,才通知驱动工作,映射磁盘等等。

请问这部分代码应该放在什么USB驱动的那个部分呢,跟应用程序间的通讯是否要用事件方式。
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
沙发#
发布于:2008-07-25 02:16
有点没明白.  usb驱动不受控制? 连上就启动驱动?

驱动应该是开机就被加载的, 只是连上后产生了usb中断.
ztg0021
驱动小牛
驱动小牛
  • 注册日期2007-02-09
  • 最后登录2016-02-18
  • 粉丝1
  • 关注0
  • 积分141分
  • 威望223点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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;
}
WINCE/EVC/VS2005群:18219722
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-25 13:17
2楼能否问下,这个消息是那里发出的呢。
另外收到消息的时候是否驱动都已经映射磁盘了。

我的目的是连上USB,并不马上工作,而是通知应用程序,只有选择连接USB,才执行相应的usb操作。
ztg0021
驱动小牛
驱动小牛
  • 注册日期2007-02-09
  • 最后登录2016-02-18
  • 粉丝1
  • 关注0
  • 积分141分
  • 威望223点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-07-25 14:31
ARAGORN\DRIVERS\MISCControl里面就有 USB_CONNT_EVENT_DATA 这个结构体,
附件名称/大小 下载次数 最后更新
MISCControl.rar (16KB)  13 2008-07-25 14:38
NAVIService.rar (45KB)  8 2008-07-25 14:38
WINCE/EVC/VS2005群:18219722
ztg0021
驱动小牛
驱动小牛
  • 注册日期2007-02-09
  • 最后登录2016-02-18
  • 粉丝1
  • 关注0
  • 积分141分
  • 威望223点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-07-25 14:38
仅供参考
WINCE/EVC/VS2005群:18219722
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-07-26 05:49
1,可以让应用程序在调用USB的一个IOCTL时阻塞住,在USB线插上时让它运行。
2,然后应用程序调用一个IOCTL让USB驱动才开始运行。
学海无涯
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-07-26 08:57
如果你的PD+是由一个GPIO控制的话,那么插入USB时,别将这个脚拉高,同时通过事件方式通知应用 程序,当应用程序需要连接USB时,通知拉高拉高那个GPIO即可
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-07-27 01:03
给了这么多思路,真是多谢大家啦
具体的做法就是大家的思路和在一起就是了。
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-07-27 01:10
首先应用程序应该通过检测VBUS来确定是否连上主机,如果连上则通过IOCTL或者EVENT来
通知USB驱动,上拉PD+。后面的过程就都一样了。

所以现在的问题变成了,控制USB驱动是等待还是运行的代码要放在什么地方比较合适呢。
请大家给支个招吧。
游客

返回顶部