阅读:1035回复:0
清帮忙诊断!
我采用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。 还有一个问题是:以上程序运行后,卸载驱动,再重新插入,设备不能正确枚举. 请教各位:从以上症状分析,我的程序出了什么问题?谢谢! |
|