neworcom
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-08-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1377回复:3

修改BulkUSB是使能够处理设备STALL状态,请教!

楼主#
更多 发布于:2004-09-08 09:12
在批量读写中设备突然STALL掉了,但BulkUSB还是继续发送URB,我怎么停止才好? 在IoCallDriver加入延时常死机,在CompleteRuntine里加延时吗?不知道怎么办?
neworcom
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-08-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-09 10:38
大虾们帮帮忙吧!痛苦死了,在驱动里怎么判断到到设备的STALL状态啊??
hemonel
驱动牛犊
驱动牛犊
  • 注册日期2004-09-08
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-09 16:01
可以读usb主机接口芯片的状态寄存器
如主机接口芯片SL811HS的EP0Status/EP1Status寄存器的D7为表明设备是否STALL住了
neworcom
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-08-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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!"));
}

这样写有什么问题吗?
游客

返回顶部