lanbada
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1425回复:6

斑竹:ep1out,ep2out无区别吗?!!

楼主#
更多 发布于:2003-03-11 14:59
用ds定义四个管道对象ep1in(int),ep1out(int),ep2in(bulk),ep2out(bulk)再读写函数中为何只出现一个管道对象,
example
read()
{
ep2out.buildbulktranser();}
这样其余的管道不是就多余了吗??
outside_door
驱动牛犊
驱动牛犊
  • 注册日期2002-11-27
  • 最后登录2004-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-11 21:30
对于read,当然只需要这么一个管道就可以了,读取数据

command type通过endpoint0建立的管道传输就可以了
lanbada
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-11 22:55
谢谢光临!!
 我的意思是主机程序有两个readfile,一个要求中断另一个批量传输,也就是一个对应ep1,另一个ep2。可在驱动中,只有一个管道对象ep2,相应的建立一种传输请求比如批量,然后进入readcomplete
历程。在这种情况下,要求对端点1的中断读请求,该如何实现呢??
难道一个管道对象建立的批量请求,可以用于其他的管道及其他的传输方式?? :( :(
xyzxian
驱动牛犊
驱动牛犊
  • 注册日期2002-02-19
  • 最后登录2007-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-12 09:34
当然不行。这需要在driver中的deviceExtension->PipeInfo中纪录
你的device的所有的pipe的信息,你在app端读pipe的时候,
在这种情况下,不仅要用你的deivce symblic name,而且最好
在其后面附上你的pipe index,example as: \"e290eu3298djo9jd\\pipe1\" 做为你的read file name,然后在你的driver中处理IRP_MJ_CREATE的函数中解析这个文件名中的pipeX
中的X,然后再根据这个X,你在driver中用相应的pipe去read。
金用驱动开发
xyzxian
驱动牛犊
驱动牛犊
  • 注册日期2002-02-19
  • 最后登录2007-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-12 09:42
记住read file 是对文件操作,而pnp是把所有的设备虚拟化为
每一个文件名不同的文件,所以当然没一个文件下都可以有子目录了,就看你的driver中给不给解析。比如说\\\\.\\XXXDEV\\pipeX,如果你的driver中解析这个pipeX,那么就可以在APP中用这个文件名来实现XXXDEV这个设备的第X pipe的读写操作,Are you see?:)
(write driver,就一定要记住,他们对于user mode用户就是一个个文件夹)
金用驱动开发
lanbada
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-12 11:41
楼上的:
  感谢你的回答!!!
        解释得很清楚。
     但我现在用的是ds2.7,所以还是有点晕。既然两个readfile(要求的端点和传输方式不同)可以用不同的管道名打开,但是ds自动生成的驱动相应的只有一个管道对象和传输方式如
  read()
{
ep2out.buildbulktranser();}
在这种情况下,另一个readfile产生的IRP_MJ_READ 请求,进入驱动
后,也进入READ函数,由于管道名和传输方式不同,这个请求酒会得不到正确处理。
在这情况下该如何做??

xyzxian
驱动牛犊
驱动牛犊
  • 注册日期2002-02-19
  • 最后登录2007-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-12 13:34
一定要改driver的,不肯能不改开发板自带的驱动。
在read file前,你的APP里是用CreateFile打开read file中的handle,在CreateFile中用附加pipeX的symblic link name打开handle,然后再在readfile中用这个handle打开设备for read,
所以你在APP CreateFile时driver中就会收到IRP_MJ_CREATE,
你在这里就解析pipe信息,确定是要读哪个pipe,然后存在deviceExtension中,在你的driver中的read处,判定这个值,
然后分支处理不就OK了:),example as:
read(pipeX)
{
if(pipeX==ep1)               //你自己再增加另一个pipe read
   ep1out.buildbulktranser();//你自己再增加另一个pipe read
else if(pipeX==ep2)
   ep2out.buildbulktranser();
}
金用驱动开发
游客

返回顶部