xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2544回复:13

求教:如何使用BULK IN 方式轮询USB设备???

楼主#
更多 发布于:2005-07-19 09:44
  大家好。
我有个问题,现在要在驱动里面实现这样一个功能:驱动程序在被加载后自动使用BULK IN 方式轮训USB设备,或者是在用户触发后一直轮训USB设备,如果有数据就往一个队列里面填,没有的则再次轮询。周而复始……直到用户取消轮询,或者用户拔下设备。
期望的速度是30M字节,如何实现啊,(我是用DS写驱动的)
CII_GZH
驱动中牛
驱动中牛
  • 注册日期2005-06-16
  • 最后登录2007-08-27
  • 粉丝0
  • 关注0
  • 积分257分
  • 威望127点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-19 10:34
感觉你还没有了解驱动的本质(我可能说的不对),客户端程序用API函数调用驱动,这时驱动会收到特定的IRP,驱动部分处理IRP,轮训等等功能的实现,驱动都是看IRP的请求,有什么请求就完成什么功能,30M/S应该可以达到的。我估计。
学习
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-20 09:37
感谢回复!
问题是我希望这个轮训过程由USB驱动在内核态来实现而不是由APP发起,如果是应用程序不断的轮训,那么这个事情当然简单,开个定时器或者其他方式回调就OK了。我不是写一个普通的USBWDM设备驱动,而是NDIS_WDM驱动,网卡驱动需要需要不断的查询下面网卡的状况(包括收数据),所以开在应用程序(APP)上边的定时器根本不是我需要的,明白吗?以至于被这个问题纠缠了N久!!!!!
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-20 09:40
再说上边的定时器的定时分辨率也不够用,我期望的定时器应该是us级的。。。。。。。。。。APP的定时器能够满足要求吗?
CII_GZH
驱动中牛
驱动中牛
  • 注册日期2005-06-16
  • 最后登录2007-08-27
  • 粉丝0
  • 关注0
  • 积分257分
  • 威望127点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-20 09:56
要求这么高啊,有了答案给我说说啊,很感兴趣。
学习
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-07-20 13:18
一个读取数据的大概的策略:
    在启动设备后,分配一个或多个buffer,对每个buffer创建一个irp(或从idle irp queue取出一个)发送给USB设备去数据。irp可能被pending,也可能马上就完成。IoCallDriver前将irp放到一个read waiting queue。
    在完成例程,对收到的数据进行处理(如转换成以太数据格式然后提交给协议层),处理完毕,将irp从read waiting queue取出放入idle irp queue,然后重复“对每个buffer创建一个irp(或从保存的irp队列取出一个)发送给USB设备去数据”的动作。完成例程要返回STATUS_MORE_PROCESSING_REQUIRED。
    也就是说,对buffer和irp重复使用,不停的读取数据直到没有数据为止(返回pending)。创建的buffer、irp在最后停卡的时候才释放。irp队列的管理及irp的取消,将使事情变的复杂。
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-20 16:44
感谢巨牛老兄!
看了你的回帖感觉真是拨开云雾见青天啊,再次表示感谢!
不过还有些问题不是很明白,如果发送给USB设备的时候,USB下面也许没有数据,这时候Pending了,那么驱动什么时候再次发起读请求呢?可控吗?可见吗?是不是只要idle IRP queue空就能自动发起一次读?还有,一次USB2.0sheb       BULK IN的最大数据量是512
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-07-20 16:48
(接上面)一次USB2.0sheb     BULK IN的最大数据量是512字节,假设网卡上有一帧的数据,其大小1500字节,分三次上传,如果按上面的机制进行处理,那么我该如何处理呢?请巨牛兄弟指教!感激万分。。。。。。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-07-21 11:30
ray版主出现了,快抓住他问问;P
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-07-22 15:01
ray版主,给点意见啊 ?
我的问题其实是WLAN 的USB网卡接收数据的问题,我的想法是在网卡驱动加载后就由内核收数据,在内核里面处理后如果是配置程序的数据就交个配置程序处理,如果是网络数据就交给上边NDIS。


还由没有别的办法啊?我都急疯了!!!
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-07-27 10:47
晕,现在还没有头绪吗?
你到driverstudio的安装目录或者ddk安装目录下的usb相关那里,有大把的例子,仔细看看,然后做个实验不就可以解决了吗?
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-07-27 11:25
你仔细看看问题再发表观点,不要动不动就拿DDK、DS例子乱讲,没看过,没做过实验能问吗?都不想想!
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-07-27 14:04
ok,可能是我的语气不太好,向你道歉!
建议你还是看看例子,因为这个问题在usb驱动里是一个很基本的问题。唯一的不同,只不过你是要把数据给ndis协议层,而其他的usb驱动是直接给到应用程序了。
一般不推荐用系统线程去做,而是通过completeroutine实现,怎么实现就要看例子了。
另外,心态平和一点,做驱动可能好几天都没有进展,是很正常的事情。。。。
xxlangyun
驱动小牛
驱动小牛
  • 注册日期2004-11-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分272分
  • 威望58点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-07-27 22:30
呵呵,这几天的确有点牢骚,请原谅啊。
此外还要感谢你的安慰和建议,有论坛上这么多热心的网友相助还是有信心做好的。
游客

返回顶部