阅读:1357回复:6
请问ds带的ezusb驱动例子中的pipenum是怎么编的?
一个双向端点可以建立两个管道啊,这个号是怎么编的啊?deviceioccontrol()需要这个作参数。
|
|
沙发#
发布于:2003-09-23 12:54
两个管道?
什么两个管道? 一个端点只能有一个管道吧,那个pipenum是从0开始的 比如68013有4个端点,分别是2、4、6、8,那么对应驱动中的就是0、1、2、3。 |
|
板凳#
发布于:2003-09-23 13:28
呵呵,又是大侠您出手了,谢谢了!
您说的68013我没接触过,也不知道为什么是2468。 我的意思是这样的: 比如吧,有2个额外端点,编号分别为1#,2#。 1号是单向in端点,地址就是0x81。如果2号是双向端点,那它的地址是0x82(in)和0x02(out),这不就是可以建立输入和输出两个管道吗(我说的两个管道是说相对于端点的一个编号,不知道可不可以这样说)?那对于这两个地址的pipenum分别是多少呢? 我本来想把ezUsb例子中的FindPipe()函数去掉就可以绕过这个问题,可是又觉得没啥必要,希望大侠再次明示:) 两个管道? |
|
地板#
发布于:2003-09-23 23:36
呵呵,那不叫双向端点,0x82和0x02是两个端点!
端点的信息在DEVICE_EXTENSION里的Interface里的Pipes[n]里面,如果你设置了3个端点,并且在config描述符里的顺序是0x81, 0x82, 0x02,那么Pipe[0]里存放的就是端点0x81的信息,Pipe[1]是0x82,Pipe[2]是0x02,你需要用那个端点就到相应的pipe里找到pipehandle就可以操作了,如下:(假设用0x02) PDEVICE_EXTENSION pdx = fdo->DeviceExtension; PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL; PUSBD_PIPE_INFORMATION pipeInfo = NULL; USBD_PIPE_HANDLE pipeHandle = NULL; interfaceInfo = pdx->Interface; pipeInfo = &(interfaceInfo->Pipes[2]); pipeHandle = pipeInfo->PipeHandle; 得到了pipeHandle,你就可以用 UsbBuildInterruptOrBulkTransferRequest()来build urb了。 我说明白了没有? |
|
地下室#
发布于:2003-09-24 00:15
jinghuiren:
你好。你在呀。ep6是不能配成1024在bukl模式,我都犯晕了。谢谢。因为固件和硬件不是我写。 |
|
5楼#
发布于:2003-09-24 09:40
非常明白了,就是获取config descriptor时得到的端点描述符的顺序,没错吧?
真的要好好向您学习,我暂时还在ds的圈子里,您说的那些结构还没接触到呢,看来前面的路还很长呢:) 呵呵,那不叫双向端点,0x82和0x02是两个端点! |
|
6楼#
发布于:2003-09-24 10:58
jinghuiren: ep2和ep6都可以配置成512,四缓冲,这样总的缓冲区就是2048字节了,不是1024! |
|