yxiner
驱动牛犊
驱动牛犊
  • 注册日期2004-08-13
  • 最后登录2005-04-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1098回复:0

关于USB驱动和固件协同工作的问题!请高手&版主救命!

楼主#
更多 发布于:2005-03-28 21:18
过程:host先向设备写数据,device端做一定处理后,向host返回数据,create,writefile和readfile都用的是异步的方式。
问题:
如果我单步执行writefile和readfile,也就是说在readfile之前留有足够的时间,就无论多大的数据都能够正确读写;但如果writefile和readfile之间没有单步,即全速执行,则GetOverlappdResult返回成功了,但返回长度为0,事实上什么都没有读出来,而且通道阻塞了,此时的固件程序端显示的是还在向主机发送数据,没有发送结束;这个时候,如果主机端再发下一轮的writefile时,自然就发送不下去了。  
  尝试1)如果在device数据准备好之前就打开IN端点,则全速执行时仍然显示GetOverlappdResult执行成功,但读到的数据个数为0,且device端显示没有发送出去;
   尝试2)如果我在in端点的数据准备好之前关闭IN端点,则readfile会waitforsingleEvent等待直到超时返回;
   因此,感觉我的驱动是无论什么情况都只查询一下设备的状态就返回了,那么如果设备准备好了数据,自然可以返回;如果端口打开,但没有准备好数据,就返回0;如果端口尚未打开,就一直PENDING到超时,也不管你后面再打开没有。

   1)为什么会这样?
   2)驱动在把读数据的irp包送下去以后,难道不能循环判断端口的状态吗?
   3)pending的这段时间里,驱动和底层都在干吗?

游客

返回顶部