sigsig
驱动牛犊
驱动牛犊
  • 注册日期2004-08-12
  • 最后登录2009-06-09
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1036回复:0

清帮忙诊断!

楼主#
更多 发布于:2005-03-22 21:38
我采用PDIUSBD12作为开发板,在DDK例子程序bulkusb的基础上改动。
我想实现这样一个功能:应用程序发送四个数字给驱动,由驱动通过D12传送给固件显示在数码管上。我通过发送一个厂商请求给固件来实现。
以下是实现部分代码:
case IOCTL_BULKUSB_DISPLAY_NUMBER:
// Allocate memory for URB
UrbSize = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
urb = (PURB)ExAllocatePool(NonPagedPool, UrbSize);
if( urb==NULL)
{
//DebugPrintMsg(\"No URB memory\");
return STATUS_INSUFFICIENT_RESOURCES;   //?gb
}


// Build URB to send Class interface control request on Default pipe
UsbBuildVendorRequest(urb,
URB_FUNCTION_VENDOR_INTERFACE, UrbSize,
USBD_TRANSFER_DIRECTION_OUT, // Direction out
0, // Reserved bits
DISPLAY_NUMBER, // Request
0, // Output report type, Report id zero
0, // interface index
ioBuffer, NULL, 4, // Output data
NULL);


// Call the USB driver
//DebugPrintMsg(\"Sending set report\");
//gb NTSTATUS status = CallUSBDI( dx, urb);
ntStatus = BulkUsb_CallUSBD( DeviceObject, urb);
// Check statuses
if( !NT_SUCCESS(ntStatus) || !USBD_SUCCESS( urb->UrbHeader.Status))
{
//DebugPrint(\"status %x URB status %x\", status, urb->UrbHeader.Status);
ntStatus = STATUS_UNSUCCESSFUL;
}
ExFreePool(urb);
//return status;

break;
现在的问题是:第一次发送厂商请求,固件能正确响应--数码管显示正确,IoCallDriver返回0。
但再次发送厂商请求,固件就不能正确响应了--数码管显示没变化,IoCallDriver返回0x8000000F, 察看ntstatus.h,
宏STATUS_DEVICE_POWERED_OFF表示0x8000000F。

还有一个问题是:以上程序运行后,卸载驱动,再重新插入,设备不能正确枚举.
请教各位:从以上症状分析,我的程序出了什么问题?谢谢!
游客

返回顶部