dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1629回复:7

关于应用程序发送读写数据的问题

楼主#
更多 发布于:2004-10-21 18:48
请问我在应用程序中用deviceiocontrol对USB设备进行读写操作。若发了读请求后IRP已经正确地传送到了总线,但USB设备没有数据因此该读请求没有完成。此时IRP的状态该是什么样的,是successful还是一直等在那里(驱动中用的是同步IRP)?在应用程序中deviceiocontrol返回的又应是什么值?
若过了一段时间以后,USB设备有了数据,此时这个IRP是否该自动完成读数据。那么现在的IRP状态又应该是什么样的,还有应用程序中deviceiocontrol返回应是什么值?
dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-21 20:41
我要绝望了怎么没人回答呀
fishy
驱动牛犊
驱动牛犊
  • 注册日期2004-07-19
  • 最后登录2004-11-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-22 15:04
我想问问你读数据时候用ReadFile读PIPE02的数据,那么在固件程序中,这组数据是从D12_WriteEndpoint(5,16,FIFO_DATA)这个地方发出的嘛?对于端点索引和管道的对应我还不确定?谢谢
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-22 16:00
我要绝望了怎么没人回答呀

1,应该是一直等在那里,直到得到数据为止,除非你的驱动中设置了超时,否则驱动程序永远不会返回,同样应用程序也不会返回,程序就像死了一样。
2,是,是返回成功(如果你的驱动没有设置超时),应用程序中的deviceiocontrol返回的应该是1

如果你想中止这个进程,可以尝试使用cancelio函数,不过前提是你前面那个请求是在子线程中发送的,否则主程序已经死了,想cancel都cancel不了了

你想随时中止某个进程请采用异步io方式,并且建议一个准消息机制,具体请参考专栏文章中TigerZD的文章。
dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-25 16:38
请问jinghuiren我如果想cancelio,在驱动程序端应该怎么改呢?我的驱动程序用的是cypress开发包提供的ezusbsys.c?
我现在ezusbsys.c中加了canceli语句,应用程序中加了cancelio(),可是closehandle时程序还是死了,这说明我的IRP没有取消成功/
[quote]我要绝望了怎么没人回答呀

1,应该是一直等在那里,直到得到数据为止,除非你的驱动中设置了超时,否则驱动程序永远不会返回,同样应用程序也不会返回,程序就像死了一样。
2,是,是返回成功(如果你的驱动没有设置超时),应用程序中的deviceiocontrol返回的应该是1

如果你想中止这个进程,可以尝试使用cancelio函数,不过前提是你前面那个请求是在子线程中发送的,否则主程序已经死了,想cancel都cancel不了了

你想随时中止某个进程请采用异步io方式,并且建议一个准消息机制,具体请参考专栏文章中TigerZD的文章。 [/quote]
dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-28 09:52
根据USB协议,如果bulk传输中主机发了读请求下去而外设没有数据,外设返回NAK给总线;此时总线是一直等在那里呢,还是依然轮询,不断重复刚才那个请求,还是就结束了刚才那个请求?
在主机发了读请求而外设没有数据时,驱动程序中IoCallDriver()返回的状态是什么呢?

[编辑 -  10/28/04 by  dingdang]
dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-11-01 13:40
顶啊,大侠帮忙
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-11-01 14:30
jinghuiren说的对,驱动一直在等。直到有数据为止,你只有在驱动中设定超时。照他说的去找资料。
游客

返回顶部