阅读:2140回复:7
BULKUSB管道通讯的问题!
BULKUSB是负责BULK管道的数据流,请问能否在BULKUSB上进行修改,使它负责CONTROL管道的数据流,如果可以的话,应该如何实现?
|
|
沙发#
发布于:2002-04-22 08:32
所有的usb设备必须实现缺省管道的传输,而缺省管道就是USB设备中唯一的双向控制管道.BulkUSB中也同样实现了缺省管道的控制传输.如得到设备描述符等.CONTROL管道的厂商数据流可通过
UsbBuildVendorRequest(urb, URB_FUNCTION_VENDOR_DEVICE, sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST), GetData ? USBD_TRANSFER_DIRECTION_IN : 0, 0, Request, Value, Index, localBuffer, NULL, length, NULL); #if DBG DebugPrint(\"BufferLength = 0x%x buffer = 0x%x\\n\", length, localBuffer); #endif ntStatus = UsbDriverCallUSBD(deviceObject, urb); 得到. |
|
|
板凳#
发布于:2002-04-22 16:18
斑竹说的这个函数是DDK中的吗?
|
|
|
地板#
发布于:2002-04-22 17:45
UsbBuildVendorRequest是DDK中宏定义,UsbDriverCallUSBD不是,但DDK\\SRC\\USB\\中bulkusb和Isousb中都有代码;你也可以自己写.
|
|
|
地下室#
发布于:2002-04-23 20:19
请问大侠,我的设备是别的厂家做的,我并没有详细的资料,我读出了设备的的endpoint描述符,获得了句柄,是否可以不使用UsbBuildVendorRequest而直接使用这些句柄来仅仅完成一些基本的读写功能,请问上面这个宏主要用在什么地方,完成类似什么样子的功能?
|
|
5楼#
发布于:2002-04-23 21:18
我这里要求把PDA实现成一个USB移动硬盘的功能,即插上设备后,PC主机的资源管理器中要求出现一个硬盘盘符,而拔除后消失,我想在实现时要采用UMSS 的CBI类传输,我用的芯片是PHILIP的D12芯片,但是我看到它提供的FIRM WARE例程中很奇怪,设备进入 CONTROL IN中断时仅发一个0长度的包给主机,其他什么也不做,这样怎么能向主机发回数据呢?还是在另有地方实现了CONTROL传送的数据部分向主机传送?
|
|
|
6楼#
发布于:2002-04-24 08:48
请问大侠,我的设备是别的厂家做的,我并没有详细的资料,我读出了设备的的endpoint描述符,获得了句柄,是否可以不使用UsbBuildVendorRequest而直接使用这些句柄来仅仅完成一些基本的读写功能,请问上面这个宏主要用在什么地方,完成类似什么样子的功能? 缺省管道没有显式的管道句柄,在缺省管道控制传输最好使用宏.至于其他管道(同步、块、中断)可以必须使用管道句柄。你可以使用一些宏也可以自己设置URB。如: urb->UrbIsochronousTransfer.PipeHandle = PipeInfo->PipeHandle; UsbBuildVendorRequest是支持设备在缺省管道的厂商命令的控制传输,如: UsbBuildVendorRequest(urb,//需要初始化的urb URB_FUNCTION_VENDOR_DEVICE,//设备厂商命令 sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST), GetData ? USBD_TRANSFER_DIRECTION_IN : 0,//IN or Out, 0, Request,//以下三个参数为设备得到的setup包的相应项 Value, Index, localBuffer, NULL, length,// NULL); |
|
|
7楼#
发布于:2002-04-24 08:50
我这里要求把PDA实现成一个USB移动硬盘的功能,即插上设备后,PC主机的资源管理器中要求出现一个硬盘盘符,而拔除后消失,我想在实现时要采用UMSS 的CBI类传输,我用的芯片是PHILIP的D12芯片,但是我看到它提供的FIRM WARE例程中很奇怪,设备进入 CONTROL IN中断时仅发一个0长度的包给主机,其他什么也不做,这样怎么能向主机发回数据呢?还是在另有地方实现了CONTROL传送的数据部分向主机传送? Sorry,对移动硬盘实现原理我不太清楚。 |
|
|