基于USB接口的虛擬示波器的開(kāi)發(fā)實(shí)現
?。?)DriverExtension→AddDevice指向驅動(dòng)程序的AddDevice函數。PnP管理器將為每個(gè)硬件實(shí)例調用一次AddDevice例程。
?。?)DriverStartIo驅動(dòng)程序使用標準的IRP(interrupt request package,中斷請求包)排隊。
?。?)MajorFunction驅動(dòng)程序可能需要處理幾種類(lèi)型的IRP,所以,應該設置與那幾種IRP類(lèi)型相對應的指針元素,使它們指向相應的派遣函數。根據虛擬儀器系統的實(shí)際要求,本驅動(dòng)程序所要處理的主功能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類(lèi)型相對應的指針元素,使它們指向相應的派遣函數。
4 客戶(hù)服務(wù)軟件設計
整個(gè)客戶(hù)服務(wù)軟件使用VC++編寫(xiě),分以下幾個(gè)主要模塊設計。
4.1 驅動(dòng)層與應用層通信模塊
如果通信功能塊直接放在應用程序主線(xiàn)程中實(shí)現,那么,當應用程序與驅動(dòng)程序進(jìn)行數據通信時(shí),主界面就會(huì )凍結。為了解決這個(gè)問(wèn)題,我們直接創(chuàng )建一個(gè)子線(xiàn)程來(lái)單獨完成與驅動(dòng)程序的通信任務(wù),讓主界面專(zhuān)心于響應視窗界面的訊息。在子線(xiàn)程中通過(guò)調用Windows API函數來(lái)實(shí)現對USB設備進(jìn)行IO操作。其中,DeviceIoControl()函數用于傳送設備配置信息;CreateFile()用于創(chuàng )建設備對象;WriteFile()和ReadFile()用于對USB設備讀寫(xiě)數據。

評論