驱动程序开发网技术社区 » Wince 程序开发 » 请教大家怎样在应用程序中检测连接上USB,然后通知USB驱动工作? (转到动态网页)
本页主题: 请教大家怎样在应用程序中检测连接上USB,然后通知USB驱动工作? 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

NewTech
级别: 驱动大牛


精华: 0
发帖: 769
威望: 108 点
积分: 527 分
贡献值: 0 点
好评度: 86 点
原创分: 0 分
注册时间:2002-10-02
最后登录:2008-07-31

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

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

请问这部分代码应该放在什么USB驱动的那个部分呢,跟应用程序间的通讯是否要用事件方式。


[ 此贴被NewTech在2008-07-25 13:14重新编辑 ]
顶端 Posted: 2008-07-24 21:53 | 福建省福州市 [楼 主]
high
级别: 论坛版主


精华: 0
发帖: 78
威望: 78 点
积分: 582 分
贡献值: 0 点
好评度: 56 点
原创分: 0 分
注册时间:2002-08-10
最后登录:1970-01-01

 

有点没明白.  usb驱动不受控制? 连上就启动驱动?

驱动应该是开机就被加载的, 只是连上后产生了usb中断. 
顶端 Posted: 2008-07-25 02:16 | Unknown 1 楼
ztg0021
级别: 驱动牛犊


精华: 0
发帖: 74
威望: 75 点
积分: 91 分
贡献值: 0 点
好评度: 5 点
原创分: 0 分
注册时间:2007-02-09
最后登录:1970-01-01

 

不知道能不能达到你的目的,倒可以试一下


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;
}
顶端 Posted: 2008-07-25 08:52 | 广东省深圳市 2 楼
NewTech
级别: 驱动大牛


精华: 0
发帖: 769
威望: 108 点
积分: 527 分
贡献值: 0 点
好评度: 86 点
原创分: 0 分
注册时间:2002-10-02
最后登录:1970-01-01

 

2楼能否问下,这个消息是那里发出的呢。
另外收到消息的时候是否驱动都已经映射磁盘了。

我的目的是连上USB,并不马上工作,而是通知应用程序,只有选择连接USB,才执行相应的usb操作。
顶端 Posted: 2008-07-25 13:17 | 福建省福州市 3 楼
ztg0021
级别: 驱动牛犊


精华: 0
发帖: 74
威望: 75 点
积分: 91 分
贡献值: 0 点
好评度: 5 点
原创分: 0 分
注册时间:2007-02-09
最后登录:1970-01-01

 

ARAGORN\DRIVERS\MISCControl里面就有 USB_CONNT_EVENT_DATA 这个结构体,


[ 此贴被ztg0021在2008-07-25 14:38重新编辑 ]
附件: MISCControl.rar (16 K) 下载次数:6
附件: NAVIService.rar (45 K) 下载次数:4
顶端 Posted: 2008-07-25 14:31 | 广东省深圳市 4 楼
ztg0021
级别: 驱动牛犊


精华: 0
发帖: 74
威望: 75 点
积分: 91 分
贡献值: 0 点
好评度: 5 点
原创分: 0 分
注册时间:2007-02-09
最后登录:1970-01-01

 

仅供参考
顶端 Posted: 2008-07-25 14:38 | 广东省深圳市 5 楼
microsun
级别: 论坛版主


精华: 0
发帖: 1147
威望: 905 点
积分: 1005 分
贡献值: 0 点
好评度: 848 点
原创分: 0 分
注册时间:2002-11-11
最后登录:1970-01-01

 

1,可以让应用程序在调用USB的一个IOCTL时阻塞住,在USB线插上时让它运行。
2,然后应用程序调用一个IOCTL让USB驱动才开始运行。
学海无涯
顶端 Posted: 2008-07-26 05:49 | 北京市 6 楼
wenzai
级别: 驱动中牛


精华: 0
发帖: 331
威望: 325 点
积分: 466 分
贡献值: 0 点
好评度: 309 点
原创分: 0 分
注册时间:2002-04-16
最后登录:1970-01-01

 

如果你的PD+是由一个GPIO控制的话,那么插入USB时,别将这个脚拉高,同时通过事件方式通知应用 程序,当应用程序需要连接USB时,通知拉高拉高那个GPIO即可
顶端 Posted: 2008-07-26 08:57 | 上海市 7 楼
NewTech
级别: 驱动大牛


精华: 0
发帖: 769
威望: 108 点
积分: 527 分
贡献值: 0 点
好评度: 86 点
原创分: 0 分
注册时间:2002-10-02
最后登录:1970-01-01

 

给了这么多思路,真是多谢大家啦
具体的做法就是大家的思路和在一起就是了。
顶端 Posted: 2008-07-27 01:03 | 福建省福州市 8 楼
NewTech
级别: 驱动大牛


精华: 0
发帖: 769
威望: 108 点
积分: 527 分
贡献值: 0 点
好评度: 86 点
原创分: 0 分
注册时间:2002-10-02
最后登录:1970-01-01

 

首先应用程序应该通过检测VBUS来确定是否连上主机,如果连上则通过IOCTL或者EVENT来
通知USB驱动,上拉PD+。后面的过程就都一样了。

所以现在的问题变成了,控制USB驱动是等待还是运行的代码要放在什么地方比较合适呢。
请大家给支个招吧。
顶端 Posted: 2008-07-27 01:10 | 福建省福州市 9 楼
驱动程序开发网技术社区 » Wince 程序开发
快速发帖 顶端
内容
HTML 代码不可用

使用签名
Wind Code自动转换

字数检查 恢复数据
按 Ctrl+Enter 直接提交
表情 [更多]

Powered by PHPWind v6.3.2 Code © 2003-08 PHPWind
This is html template view this page faster