red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2980回复:17

USB驱动程序怎么管理多个端点的传输?

楼主#
更多 发布于:2003-12-15 17:19
某USB有多个In端点,应用程序对每个端点创建一个读数据的线程,用于等待端点的数据,这就要求USB对每个端点发In请求,告之如果此端点有数据就向主机发数据。但按驱动程序的设计模型,只能等当前的IRQ执行完后才处理下一个IRQ,这样即使用队列来处理,后面的请求只能在前面完成后才处理,这不就没同步的概念了吗?还可能因前面的IRQ没完成,后面的总不能处理,大家有好的建议和想法吗?关注中
vcdeveloper
驱动牛犊
驱动牛犊
  • 注册日期2002-11-30
  • 最后登录2004-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-15 10:04
小弟也为类似的问题头痛,特地来顶啊!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-16 09:52
我要将理论附注实践了,如果成功了,我就在这帖上做个总结,非常感谢你:pengenwen。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-16 09:38
用户被禁言,该主题自动屏蔽!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-16 09:33
我没看过DDK中的例子USBBULK,但它没用STARTIO是对的,它只用于系统管理的IRP队列,而我说的KDriverManagedQueueEx类中的StartIO函数是处理驱动程序管理的IRP队列。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-16 09:28
用户被禁言,该主题自动屏蔽!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-16 09:23
我想KDriverManagedQueueEx类中的StartIO函数就是为此目的才定义的,不同的端点可以不需要用队列来串行处理,但同一端点还是要用队列来串行处理的,如果只用列程StartIO函数,不能完美的解决上述两个问题,不是吗?

[编辑 -  12/16/03 by  red_orange]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-16 09:15
用户被禁言,该主题自动屏蔽!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-16 09:11
对pengenwen:
   我不知道你是否熟悉drivestudio,在drivestudio中有个KDriverManagedQueueEx类来串行化由驱动程序管理的IRP队列,它有一个叫StartIo()的虚函数,在驱动程序中继承此类,如果有多个端口就生成多个对应的此类对象,每个端口的IRP请求都放入对应的自己的队列中,如果某一队列处理完自己提交的当前请求,就提交队列中的下一个,已达到本队列的串行处理。不需要通过驱动类中的StartIO()函数来处理,是这样的吗?

[编辑 -  12/16/03 by  red_orange]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-16 08:56
用户被禁言,该主题自动屏蔽!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-16 08:52
有道理,IRP已经将请求的所有信息都保存在里面了,如参数,取消列程,完全可以不保持任何关于当前处理的任何信息。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-16 08:46
用户被禁言,该主题自动屏蔽!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-16 08:40
pengenwen说的有些道理,但在驱动程序中常常用到(drivestudio中)CurrentIrp()来返回当前的正在处理的Irp,如果同时处理,那此函数返回的是什么意义能?
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-12-16 08:37
用户被禁言,该主题自动屏蔽!
red_orange
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-12-16 08:30
pengenwen说的能具体些吗?
这种模式主要是基于各端点传输的内容是不相干为基础的,谁有数据谁就先发送。USB规范中既然可以定义多个端点,那就应该支持这中模式的哪?
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-12-16 08:28
用户被禁言,该主题自动屏蔽!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-12-15 18:29
这个问题比较麻烦,我也有很多地方弄不明白,
我觉得在一个irp没处理完成之前,下一个irp只能等待的,对于异步方式也是排队的,
所以我认为设置一个超时控制比较好,如果一个端点在一段时间后还没有数据,那就cancle掉该irp,并把这个irp从队列里去掉,这样轮换着查询端点。
不过这样处理比较麻烦,不知道是否有更好的方法。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-12-15 17:38
用户被禁言,该主题自动屏蔽!
游客

返回顶部