请教USB驱动开发
鉴于使用DriverStudio开发WDM驱动地便捷。我使用DriverWorks生成了一个具有一个中断输入,
一个中断输出端点的USB驱动程序。并且生成了Read和Write例程。
我想请问下,DS生成的Read和Write例程可以不用添加代码直接使用吗?为什么我直接使用地时候。
用应用程序读,写,还回的操作数都是0呢?
然后我查看驱动地读写例程。发现中间根本就没有URB的发送过程,操作数也是直接被赋0.于是添加了建立URB并传送URB的
代码。结果系统蓝屏了。。
一下是写地代码。其中//////////之间的代码是我添加地。请指教。
一个中断输出端点的USB驱动程序。并且生成了Read和Write例程。
我想请问下,DS生成的Read和Write例程可以不用添加代码直接使用吗?为什么我直接使用地时候。
用应用程序读,写,还回的操作数都是0呢?
然后我查看驱动地读写例程。发现中间根本就没有URB的发送过程,操作数也是直接被赋0.于是添加了建立URB并传送URB的
代码。结果系统蓝屏了。。
一下是写地代码。其中//////////之间的代码是我添加地。请指教。
NTSTATUS UsbIntDevice::Write(KIrp I)
{
T.Trace(TraceInfo, __FUNCTION__"++. IRP %p\n", I);
NTSTATUS status = STATUS_SUCCESS;
// TODO: Validate the parameters of the IRP. Replace "FALSE"
// in the following line with error checking code that
// evaulates to TRUE if the request is not valid.
if (FALSE)
{
status = STATUS_INVALID_PARAMETER;
I.Information() = 0;
I.PnpComplete(status);
T.Trace(TraceWarning, __FUNCTION__"--. IRP %p, STATUS %x\n", I, status);
return status;
}
// Always ok to write 0 elements
if (I.WriteSize() == 0)
{
I.Information() = 0;
I.PnpComplete(this, status);
T.Trace(TraceInfo, __FUNCTION__"--. IRP %p, STATUS %x\n", I, status);
return status;
}
KMemory Mem(I.Mdl()); // Declare a memory object
// Get a pointer to the caller's buffer. Note that this
// routine is safe on all platforms.
PUCHAR pBuffer = (PUCHAR) Mem.MapToSystemSpace();
ULONG writeSize = I.WriteSize();
ULONG bytesSent = 0;
// TODO: At this point, perform any processing for IRP_MJ_WRITE
// To satisfy the write now, transfer data to the driver
// from the caller's buffer at "pBuffer". Then, indicate
// how much data was transferred:
//////////////////////////////////////////////////// Kondy Add Start
PURB pUrb =EP2_OUT.BuildBulkTransfer(
Mem,
I.IoctlInputBufferSize(),
FALSE,
NULL);
if(pUrb==NULL)
{
I.Information()=0;
return I.PnpComplete(this,STATUS_INSUFFICIENT_RESOURCES);
}
status=EP2_OUT.SubmitUrb(pUrb,NULL,NULL,1500L);
bytesSent=pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;
////////////////////////////////////////////////////Kondy Add End
I.Information() = bytesSent;
I.PnpComplete(this, status);
T.Trace(TraceInfo, __FUNCTION__"--. IRP %p, STATUS %x\n", I, status);
return status;
}
...全文
相关推荐
USB驱动开发流程 USB驱动开发流程 USB驱动开发流程
USB驱动开发流程 USB驱动开发流程 USB驱动开发流程
linux下USB驱动开发及USB RNDIS技术
USB 全称为 Universal Serial Bus——通用串行总线,已经得到了大范围的应用,是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。在实际开发中也常常遇到 USB接口的设备,本文记录如何开发Linux 内核自带的 USB驱动。主要还是USB RNDIS技术比较实用,在某些嵌入式产品上可以不再使用原生网口,用一个USB口既可以连接存储设备,也可以用于网络连接。
Harmony鸿蒙南向外设驱动开发-USB
USB(Universal Serial Bus)通用串行总线,包含了主机端(Host)和设备端(Device)。
USB.zip_USB 驱动 开发_usb 驱动_usb开发_驱动开发
USB开发样例程序,是驱动开发初学者学习模板
google_usb_driver.zip_Google USB 驱动_Google手机驱动_usb驱动开发_安卓usb驱动_谷
android 手机驱动开发 需要安装的驱动程式


硬件/系统

