毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

ddk USB复合设备驱动如何同时读两个pipe

更新时间:2016-3-21:  来源:毕业论文

通过USBD_CreateConfigurationRequestEx查找到了3个interfaces,1个是键盘,1个是鼠标。配置完成之后,得到2个pipe。

通过readfile访问驱动的IRP_MJ_READ读取其中1个pipe,可以获取数据。(这里readfile是阻塞了的,IoMarkIrpPending(Irp))

应用层如果用2个线程来readfile,也只有等其中1个读取完毕,才可以读。

我如何修改驱动,才能同时读取2个pipe的数据呢?

一个Endpoint用IRP_MJ_READ获取数据,另外一个用自定义的Device IO Control进行?

应用程序在线程里面,调用自定义的Device IO Control,被阻塞了,需要等待前面的readfile返回才能进行Device IO Control,
是因为IRP_MJ_READ函数里面的IRP返回STATUS_PENDING状态,导致的吗?

如果我把IRP_MJ_READ函数里面的IRP返回设置成STATUS_SUCCESS状态,要蓝屏

系统会根据Interface或者某个独立的Interface Set的数量,多次调用adddevice吗?
我的驱动是这么实现的:
1,首先在DriverEntry指定MajorFunction派遣函数
2,在AddDevice中IoCreateDevice,并且IoRegisterDeviceInterface注册/*"USB",            "{36FC9E60-C465-11CF-8056-444553540000}",*/,然后设置DO_DIRECT_IO方式(read的时候,可以用MDL)
3,PnpStartDevice中只做了IoSetDeviceInterfaceState
4,在create中,才进行配置描述符和接口描述符,并且IOCTL_INTERNAL_USB_SUBMIT_URB来配置
5,应用层读写pipe

如果使用windows系统自带的usb composite device驱动,系统可以自动识别,并且加载HID mouse和HID keyboard。
硬件是没有问题的。
我是想自己实现usb composite device+HID mouse+HID keyboard的功能,并且自定义一些额外的按键。

确切需求:同时获取USB复合设备的两个interface的pipe数据,互不干扰。

目前只能串行读取(IRP处理方式决定了的?),不能并行读取。

疑问:是否需要分别给两个interface加载不同的驱动,来分别生成PDO+FDO,这样,访问两个设备,就不会干扰了

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。