float97
驱动牛犊
驱动牛犊
  • 注册日期2002-06-06
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:971回复:0

50分求救,driverstudio 问题(非初级)

楼主#
更多 发布于:2004-05-24 22:01
用过Driverstudio编写过一个完整的软件系统(包括驱动和客户应用程序)的程序员都注意到了这个现象:Win32的API中的ReadFile函数在DriverStudio中映射到了::Read(KIrp I)函数,但是我们知道,USB芯片一般不只一个通道,例如D12有0,1,2三个通道,当然,在DriverStuio生成的框架中对通道0的操作是通过DeviceIo来完成的,对通道1,2的读写则是通过框架中的::Read(KIrp I)和::Write(KIrp I)函数完成,但是这儿有一个问题:框架中用OpenByInterface函数(对应于API中的CreatFile函数)打开USB设备时并没有指定对哪个通道进行操作,具体的通道选定是在框架生成的::Read(KIrp I)和::Write(KIrp I)函数中实现了,在这两个函数中可以用如下的方式生成的URB来实现选择通道:

// Create an URB to do actual Bulk read from the pipe
// 通过Urb来决定具体读写哪个端口,在此为通道1
PURB pUrb = m_Endpoint1IN.BuildBulkTransfer(
    Mem,       // Where is data coming from?
dwTotalSize,   // How much data to read?
TRUE,         // direction (TRUE = IN)
NULL, // Link to next URB
TRUE // Allow a short transfer
);

这样就给我们造成一个麻烦:我们若是想选择性的读通道1或通道2就难以实现了,程序编好之后不能更改,Driverstudio的方便从何而来?各位大侠是怎么解决这个问题的?或者告诉本参考书好吗?有没有办法通过OpenByInterface函数通过调参数的方式决定读写哪个通道?50分求救!!!
我是学生
游客

返回顶部