阅读:1916回复:4
41分求助USB中断传输,急急急!!
我需要查询USB的interrupt endpoint一次/ms,
如果设置一个线程去不断轮询,能否达到?我试了一下好像不行, 我想使用walter oney的例子:在device_extension里预先分配一个urb,一个irp,然后每次使用这个发送到下层总线驱动程序,但是不释放内存,设置一个CompleteRoutine,在这个CompleteRoutine里继续发送这个urb,可以实现持续的查询。 但是在我这里,当我做好中断查询urb,初始化好irp后,发送到下层总线驱动程序,下层驱动程序返回status_pending,然后等待一个消息,就一直等待在那里,(在这里请问是不是当设备端没有数据向中断端点写时,我去读这个中断端点,irp就不返回数据??)这样下层驱动程序就不去主动执行IoCompleteRequest,(是不是由于这个原因而不去执行我的CompleteRoutine??)这样我的程序就没办法进行下去, 我在我的驱动程序中设置了一个定时器,倘若1ms后还没有消息返回就自己返回,但这个时候该如何处理irp,使得我可以进行下一次查询??因为IrpStackLocation的数量是有限的?我执行几次之后就出现IO_STACK_LOCATION溢出的问题,我该怎样对其进行初始化?或者我如何对刚才的Irp进行处理,使得它可以去调用我的完成程序? 老板催的急,请大侠帮忙,解决这个问题,或者提供一个USB中断传输的例子,万分感谢!!!,必然加分,绝不食言。。。 |
|
最新喜欢:![]() |
沙发#
发布于:2002-05-23 16:12
读中断端点,irp不返回数据.这说明USB设备没有数据就绪(一直返回NAK)而HOST CONTROLLER 在断地重发IN TOKEN 试图读取数据.这很正常!
如果想中止读操作, CANCEL 发出的IRP就行了. :D |
|
板凳#
发布于:2002-05-24 08:31
对中断传输,要解决两个问题:
1、中断间隔。 2、中断数据。 驱动程序应该在指定的中断间隔定时发送读数据的请求,而设备端要求定时作出响应。因此必须了解设备如何产生数据。关于驱动程序中断传输的处理,你可以参考Chris Cant的《Windows WDM设备驱动程序开发指南》中的USBKBD例子,其中有USB键盘的中断传输的处理方法。 |
|
|
地板#
发布于:2002-05-24 09:00
谢谢各位,我的设备是蓝牙设备,不是自己做的设备,在蓝牙规范中要求的是每隔1ms对设备端进行一次读中断端口,我去试一下cancelIrp能否在1ms内完成操作。
|
|
地下室#
发布于:2002-05-24 13:04
在walter oney的书里提到,当startIo程序开始处理Irp时,这个时候在进行IoCancelIrp则不起作用,那么当我的Urb发送到下层驱动程序后,设备端并没有数据传送到中断端点,我一直等待在这里,那么
我在这个时候去执行IoCancelIrp是否会起作用 :P |
|