阅读:1377回复:3
修改BulkUSB是使能够处理设备STALL状态,请教!
在批量读写中设备突然STALL掉了,但BulkUSB还是继续发送URB,我怎么停止才好? 在IoCallDriver加入延时常死机,在CompleteRuntine里加延时吗?不知道怎么办?
|
|
沙发#
发布于:2004-09-09 10:38
大虾们帮帮忙吧!痛苦死了,在驱动里怎么判断到到设备的STALL状态啊??
|
|
板凳#
发布于:2004-09-09 16:01
可以读usb主机接口芯片的状态寄存器
如主机接口芯片SL811HS的EP0Status/EP1Status寄存器的D7为表明设备是否STALL住了 |
|
地板#
发布于:2004-09-09 17:18
我是用下面方法去读端点的状态,但是返回值pEndpointStatus里都是0,好象没法判断是STALL状态:
urbSize = sizeof(struct _URB_CONTROL_GET_STATUS_REQUEST); pUrb = ExAllocatePool(NonPagedPool,urbSize); if(!pUrb) { BULKUSB_KdPrint(DBGLVL_DEFAULT,("Insufficient Resource!\n")); return STATUS_INSUFFICIENT_RESOURCES; } RtlZeroMemory(pUrb, urbSize); UsbBuildGetStatusRequest( pUrb, URB_FUNCTION_GET_STATUS_FROM_ENDPOINT , 0,//Index, pEndpointStatus, NULL, NULL ); ntStatus = BulkUsb_CallUSBD(DeviceObject, pUrb); if (NT_SUCCESS(ntStatus)) { BULKUSB_KdPrint( DBGLVL_DEFAULT, ("BulkUsb_GetEndpointStatus() Success!")); } 这样写有什么问题吗? |
|