ms3d_duck
驱动牛犊
驱动牛犊
  • 注册日期2004-04-23
  • 最后登录2005-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1224回复:3

读程序的一点疑惑,请指点

楼主#
更多 发布于:2004-06-09 20:26
对USB读写的过程大概有点理解了,但现在有一点想不通
假如有一个设备,只有一个配置,一个Interface,三个endpoint,其中端点1是in ,2是out
那读写的时候应该 是会有参数指定是读写那个管道的呀,但我却找不到那个参数是!(很菜鸟)
对endpoint1的读入函数如下:
int bResult = ReadFile(m_UsbHandle,
      (LPVOID) inBuffer,
      (DWORD) 8,
       &nBytesRead,
       m_pOvl);
其中的m_pOvl在设备打开时作了如下初始化(始终不太知道m_pOvl这个东东是干吗的)

if ( m_pOvl == NULL )
{
m_pOvl = (OVERLAPPED*) GlobalAllocPtr(GPTR,sizeof(OVERLAPPED));
}
还有m_UsbHandle是用Creatfile打开的。

还有一点需要询问一下,是不是读写端点0只能用DevioceIoControl啊,可以用ReadFile 、WriteFile吗,反过来,endpoint1和2  能不能用DevioceIoControl呢?

谢谢各位大虾指教了!
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-10 10:40
请参阅DDK中的bulkusb中的exe代码

对USB读写的过程大概有点理解了,但现在有一点想不通
假如有一个设备,只有一个配置,一个Interface,三个endpoint,其中端点1是in ,2是out
那读写的时候应该 是会有参数指定是读写那个管道的呀,但我却找不到那个参数是!(很菜鸟)
对endpoint1的读入函数如下:
int bResult = ReadFile(m_UsbHandle,
      (LPVOID) inBuffer,
      (DWORD) 8,
       &nBytesRead,
       m_pOvl);
其中的m_pOvl在设备打开时作了如下初始化(始终不太知道m_pOvl这个东东是干吗的)

if ( m_pOvl == NULL )
{
m_pOvl = (OVERLAPPED*) GlobalAllocPtr(GPTR,sizeof(OVERLAPPED));
}
还有m_UsbHandle是用Creatfile打开的。

还有一点需要询问一下,是不是读写端点0只能用DevioceIoControl啊,可以用ReadFile 、WriteFile吗,反过来,endpoint1和2  能不能用DevioceIoControl呢?

谢谢各位大虾指教了!
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
ms3d_duck
驱动牛犊
驱动牛犊
  • 注册日期2004-04-23
  • 最后登录2005-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-10 20:43
那段程序我理解了,关键是这么几句

success = ReadFile(hRead,
                   pinBuf,
                   ReadLen,
                   &nBytesRead,
                   NULL);
其中hRead= open_file( inPipe);
    char inPipe[32] = "PIPE00";

是不是该这么说:先从注册表中读取管道名称,然后用API生成一个管道指针,用于指定读写目标。

但我还有第二个问题没解决,是不是DeviceIoControl不用指定管道,只要个一个设备指针就可以读写了?这是不是说这个API只能用于操作0端点?它可以用于读写其他端点吗?
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-11 08:29
再仔细看看open_file()吧,关键是SetupDiEnumDeviceInterfaces获得设备接口,从而得到symbolic link name,然后再去打开port。
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
游客

返回顶部