阅读:2240回复:9
USB的配置问题...
在选择配置前,要分两次取出配置。
在我第一次取得配置描述符的时候,得到了下面的东西: Configuration descriptor: wTotalLength: 0x0019 bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x04 bmAttributes: 0x80 MaxPower: 0x32 接下来的第二次取配置描述符却完全取不出来,总是返回NULL 请那位仁兄帮帮忙,看看是啥问题。 --------------------万分感谢---------------------- [sam 编辑于 2001-08-03 18:59] [sam 编辑于 2001-08-03 17:21] |
|
|
沙发#
发布于:2001-08-04 09:48
苦恼啊,苦恼
|
|
|
板凳#
发布于:2001-08-04 11:25
选择配置也只需要读一次配置描述表就可以了,然后根据所读到的配置描述表来查找接口.你怎么会需要读两次那?
下位的firmware会不会有问题?我认为极有可能是firmware的问题 |
|
地板#
发布于:2001-08-04 12:01
我指的是取出完整的描述符需要两次
一次取得总的空间长度,第二次取出完整的描述符 我已经把总长度取到了,可是取不出完整的。 -----------------热啊热------------------- |
|
|
地下室#
发布于:2001-08-06 10:48
第二次的缓冲区开的足够大么? |
|
|
5楼#
发布于:2001-08-06 13:26
大!够大了
总长度还加了16个字节呢 |
|
|
6楼#
发布于:2001-08-06 14:43
个人意见:第二次你重复第一次的操作,观察结果如何。如果返回的还是NULL,估计当你第一次操作完毕后,所有的配置丢失了。
|
|
|
7楼#
发布于:2001-08-06 15:01
既然我已经知道总长度了,是不是可以一次搞定,
就是第一次分配空间时就用描述符总长度,得到的 是不是应该,可能,大概是完整的描述符? |
|
|
8楼#
发布于:2001-08-06 16:33
理论上可以的,但是一般都不这么用 我看你还是应该好好跟踪一下,找出原因来 |
|
|
9楼#
发布于:2001-08-06 17:04
我也遇到类似的问题,
USBD_ParseConfigurationDescriptorEx(pdx->pcd, pdx->pcd, 0, 1, -1, -1, -1); 之后, ped = (PUSB_ENDPOINT_DESCRIPTOR) USBD_ParseDescriptors(pcd, pcd->wTotalLength, ped, USB_ENDPOINT_DESCRIPTOR_TYPE); ped取出来的似乎是对的, 可是下一步, UsbBuildSelectInterfaceRequest(urb, (USHORT) size, pdx->hconfig, 0, 1); 取出来的urb->UrbSelectInterface.Interface.Pipes[0].EndpointAddress等内容都为零。 请高手指点! (我是用Walter Oney的例子修改的) |
|
|