基于USB接口的虚拟示波器的开发实现
(2)DriverExtension→AddDevice指向驱动程序的AddDevice函数。PnP管理器将为每个硬件实例调用一次AddDevice例程。
(3)DriverStartIo驱动程序使用标准的IRP(interrupt request package,中断请求包)排队。
(4)MajorFunction驱动程序可能需要处理几种类型的IRP,所以,应该设置与那几种IRP类型相对应的指针元素,使它们指向相应的派遣函数。根据虚拟仪器系统的实际要求,本驱动程序所要处理的主功能IRP有:
IRP-MJ-CREATE;IRP-MJ-CLOSE;
IRP-MJ-DEVICE-CONTR;IRP-MJ-WRITE;
IRP-MJ-READ;IRP-MJ-SYSTEM-CONTROL;
IRP-MJ-PNP;IRP-MJ-POWER。
在主入口例程中,必须设置和这些IRP类型相对应的指针元素,使它们指向相应的派遣函数。
4 客户服务软件设计
整个客户服务软件使用VC++编写,分以下几个主要模块设计。
4.1 驱动层与应用层通信模块
如果通信功能块直接放在应用程序主线程中实现,那么,当应用程序与驱动程序进行数据通信时,主界面就会冻结。为了解决这个问题,我们直接创建一个子线程来单独完成与驱动程序的通信任务,让主界面专心于响应视窗界面的讯息。在子线程中通过调用Windows API函数来实现对USB设备进行IO操作。其中,DeviceIoControl()函数用于传送设备配置信息;CreateFile()用于创建设备对象;WriteFile()和ReadFile()用于对USB设备读写数据。

评论