阅读:1225回复:3
读程序的一点疑惑,请指点
对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呢? 谢谢各位大虾指教了! |
|
沙发#
发布于:2004-06-11 08:29
再仔细看看open_file()吧,关键是SetupDiEnumDeviceInterfaces获得设备接口,从而得到symbolic link name,然后再去打开port。
|
|
|
板凳#
发布于:2004-06-10 20:43
那段程序我理解了,关键是这么几句
success = ReadFile(hRead, pinBuf, ReadLen, &nBytesRead, NULL); 其中hRead= open_file( inPipe); char inPipe[32] = "PIPE00"; 是不是该这么说:先从注册表中读取管道名称,然后用API生成一个管道指针,用于指定读写目标。 但我还有第二个问题没解决,是不是DeviceIoControl不用指定管道,只要个一个设备指针就可以读写了?这是不是说这个API只能用于操作0端点?它可以用于读写其他端点吗? |
|
地板#
发布于:2004-06-10 10:40
请参阅DDK中的bulkusb中的exe代码
对USB读写的过程大概有点理解了,但现在有一点想不通 |
|
|