【正文】
ID_CODE_Handler的功能是從控制端點0讀取數(shù)據(jù),模塊USBDIO_IOCTL_TEST_COMMAND_Handler的功能是向控制端點0發(fā)送一個控制命令,模塊USBDIO_IOCTL_DMA_COMMAND_Handler的功能是向控制端點0發(fā)送一個要求USB設備進行DMA傳輸?shù)目刂泼?,下面是第一個模塊的編程實例?! TSTATUS USBDIODevice::USBDIO_IOCTL_ID_CODE_Handler(KIrp I) { NTSTATUS status = STATUS_SUCCESS?! Entering USBDIODevice::USBDIO_IOCTL_ID_CODE_Handler, I EOL。 PURB pUrb?! LONG numData?! umData=*(PUCHAR)()。//設置讀取的數(shù)據(jù)個數(shù) pUrb=( (PUCHAR)(),//驅動程序存放讀取的數(shù)據(jù)的內存區(qū) numData,//wLength,讀取的數(shù)據(jù)個數(shù) 0, 0x0c,//bRequest 0,//wValue TRUE,//input TRUE, NULL, 0x0472,//wIndex,傳輸?shù)焦碳绦虻淖x數(shù)命令碼 URB_FUNCTION_VENDOR_ENDPOINT, NULL )?! f(pUrb==NULL) { () =0?! tatus=STATUS_INSUFFICIENT_RESOURCES?! else { () =numData?! tatus=(pUrb,NULL,NULL,0)?! elete pUrb?! return status?! 對象I包含了應用程序下傳的IRP內容,包括命令或數(shù)據(jù)等參數(shù),函數(shù)BuildVendorRequest用來分配并初始化一個用于廠商請求的URB(USB Request Block),該URB將作為下傳IRP的一個參數(shù),通過函數(shù)SubmitUrb發(fā)送給總線驅動程序,以便完成與硬件的通信。 在初始化URB時需要了解USB的傳輸方式及傳輸協(xié)議,該功能使用了USB的控制傳輸方式,該方式包括三個階段:設置階段、數(shù)據(jù)階段和狀態(tài)階段,其中數(shù)據(jù)階段可選,開發(fā)者主要關注設置階段中的8個關鍵字節(jié)的定義,8字節(jié)分成了5個字段,定義了傳輸請求及相關信息,這8個字節(jié)的格式如圖3所示。 bmRequestType bRequest wValue wIndex wLength 圖53 USB設置數(shù)據(jù)格式 BmRequestType:1字節(jié),用來指定數(shù)據(jù)流動的方向,請求的類型,以及接收者?! Request:1字節(jié),用來指定請求?! Value:2字節(jié),主機用來傳輸信息給設備,開發(fā)者可以根據(jù)情況自己定義?! Index:2字節(jié),主機用來傳輸信息給設備,開發(fā)者可以根據(jù)情況自己定義。 wLength:2字節(jié),包含數(shù)據(jù)階段中接下來要傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)目?! ∫陨献侄蔚膽靡呀?jīng)在程序注釋中標出,在此不再贅述。,即USB設備驅動程序,對此程序只需稍做修改就能正常使用,具體是將類改為USB,即Class=USB,由于本驅動程序使用符號鏈接名打開設備,所以刪除ClassGUID選項,注意設備標識符必需為:%DeviceDesc%=USBDIO_DDI, USB\VID_0471amp。PID_0821,其中0471是USB控制芯片的廠商識別碼,0821是USB設備標識碼。驅動程序安裝過程是:將USB設備加電,連入計算機的USB接口,這時候會看到Windows操作系統(tǒng)提示發(fā)現(xiàn)新硬件,提問是否安裝驅動程序,選擇是,然后選擇驅動程序所在文件夾。USB設備驅動程序的調用為了完成對驅動程序的調用,筆者使用VC++,程序包共由五個功能模塊組成,用戶通過調用這些模塊即可方便的完成對USB外設的控制及讀寫,這些模塊如下:1)int CTRLReadData(unsigned char usbSelect,unsigned char *rbuffer,unsigned char numData),主要功能是讀取ISP1581控制端點0發(fā)來的數(shù)據(jù),數(shù)據(jù)存放在緩沖區(qū)rbuffer中。2)int CTRLSendTestCommand(unsigned char usbSelect,unsigned short int testCommand),主要功能是發(fā)送測試命令,變量testCommand定義了測試命令。3) int CTRLSendDMACommand(unsigned char usbSelect,unsigned char dmaDirection,unsigned char ramSelect,unsigned long dmaLength),主要功能是發(fā)送DMA傳輸命令,變量dmaDirection定義數(shù)據(jù)傳輸方向,ramSelect定義將要操作的USB外設的存儲器,dmaLength定義了數(shù)據(jù)傳輸總數(shù)。4)int DMARead(unsigned char usbSelect,unsigned char *rbuffer,int len,int waitTime),主要功能是計算機批量讀取ISP1581中的數(shù)據(jù),而ISP1581以DMA方式從外部RAM讀取數(shù)據(jù)。5)int DMAWrite(unsigned char usbSelect, unsigned char *rbuffer, int len, int waitTime),主要功能是計算機批量寫數(shù)據(jù)到ISP1581,而ISP1581將以DMA方式寫數(shù)據(jù)到外部RAM?! 〗Y語USB設備驅動程序開發(fā)是Windows編程中較難的一個方面,要求開發(fā)者不但要有良好的Windows編程知識,還要掌握USB控制芯片工作原理、USB傳輸協(xié)議、USB固件等相關知識,本文所設計的USB設備驅動程序,已經(jīng)應用到某雷達的自動測試設備中,驅動程序在計算機應用程序控制下可以順利的發(fā)送各種測試命令,批量輸入或者輸出大量數(shù)據(jù),達到設計要求。 USB設備應用程序設計USB設備應用程序是實現(xiàn)PC機對USB接口芯片PDIUSBD12的接口控制和讀寫操作,提供友好的人機界面。由于應用程序中涉及到與硬件打交道的底層函數(shù),會大量的引用Win32 API函數(shù),在Visual C++環(huán)境下開發(fā)是比較直觀和順乎邏輯的。要編寫USB設備的驅動程序,必須要有能夠編譯WDM驅動程序的軟件環(huán)境,建議使用Visual C++來編制該驅動程序。應用程序主要通過對驅動程序中函數(shù)的利用來實現(xiàn)對USB設備的操作控制。因此在編寫設備應用程序時,可以使用可讀性和移植性很好的Visual C++,Visual Basic,Delphi等開發(fā)環(huán)境來生成控制所需的交互界面,大大方便用戶使用。設計USB設備應用程序時:一個是使用MFC(Microsoft Foundation Class),這樣工作量相對來說要少得多,用戶也比較方便;另一個是使用底層的API函數(shù)編寫程序,這樣雖然比較繁瑣,但是可以使編程人員看到許多使用MFC編程時看不到的東西,也能夠深入了解Windows系統(tǒng)更底層的知識。應用程序的實現(xiàn)用戶應用程序是系統(tǒng)與用戶的接口,它通過通用驅動程序完成對外設的控制和通信。在編程時,首先要建立與外設的連接,然后才能實施數(shù)據(jù)的傳輸。用戶程序首先必須查找設備,打開設備的句柄,然后進行讀寫和控制操作,最后是關閉設備句柄。用戶應用程序的流程如圖54所示。NNYY成功失敗檢測USB設備設置設備參數(shù)啟動A/D模塊請求上傳數(shù)據(jù)包報告數(shù)據(jù)丟失獲得有效數(shù)據(jù)包下組數(shù)據(jù)準備就緒顯示錯誤信息返回存儲、顯示數(shù)據(jù)延遲至下組數(shù)據(jù)包準備就緒啟動USB設備 圖54 應用程序流程圖 用戶應用程序的主要功能為:開啟或關閉USB設備、檢測USB設備、設置USB數(shù)據(jù)傳輸管道、設置A/D狀態(tài)和數(shù)據(jù)采集端口、實時從USB接口采集數(shù)據(jù)、顯示并分析數(shù)據(jù)。當PDIUSBD12的FIFO緩沖區(qū)存滿后,PDIUSBD12自動將數(shù)據(jù)打包即時請求讀入數(shù)據(jù),由SIE自動發(fā)送數(shù)據(jù)包。另外,當系統(tǒng)啟動A/D模塊后,便會創(chuàng)建兩個線程:采樣線程和顯示存盤線程。采樣線程負責將采集數(shù)據(jù)寫到應用程序提交的內存;而顯示存盤線程負責給應用程序發(fā)送顯示和存盤消息。當應用程序接收到此消息后,便從它提交的內存中讀取數(shù)據(jù)并顯示和存盤。此處需要注意的是采樣線程和顯示存盤線程在讀寫應用程序提交的內存時要保持同步。第六章 結 論USB是英文Universal Serial Bus的縮寫,中文含義是“通用串行總線”。它是一種應用在PC領域的新型接口技術。早在1995年,就已經(jīng)有PC機帶有USB接口了,但由于缺乏軟件及硬件設備的支持,這些PC機的USB接口都閑置未用。1998年后,隨著微軟在Windows 98中內置了對USB接口的支持模塊,加上USB設備的日漸增多,USB接口才逐步走進了實用階段。這幾年,隨著大量支持USB的個人電腦的普及,USB逐步成為PC機的標準接口已經(jīng)是大勢所趨。在主機(host)端,最新推出的PC機幾乎100%支持USB;而在外設(device)端,使用USB接口的設備也與日俱增,例如數(shù)碼相機、掃描儀、游戲桿、磁帶和軟驅、圖像設備、打印機、鍵盤、鼠標等等。本論文所完成的工作和分析可概括為以下幾點:。分析了USB主機、USB設備、USB物理層以及USB連接,詳細說明了USB的數(shù)據(jù)流。 c51開發(fā)固件。探索了PDIUSBD12固件編程的思想,將PDIUSBD12的固件設計成完全的中斷驅動,MCU有更多的時間處理其它工作。3. 。最大傳輸率可以達到12Mbps,是指主機控制器最大的處理能力,而一個USB設備不可能擁有這么高的帶寬,它的帶寬由主機的總線驅動程序管理。當添加或者刪除一個USB設備時,連接的其它USB設備的資源要重新分配,以提高總線的利用率。單個USB設備所能擁有的帶寬一般小于8Mbps。為了實現(xiàn)高速數(shù)據(jù)傳輸。,這就從根本上限制了數(shù)據(jù)傳輸速度的提高。它的工作主頻比較低,晶振太小,處理數(shù)據(jù)不夠迅速??梢允褂盟俣雀斓奶幚砥鳌?,雖然程序的可讀性相對較好,但它的執(zhí)行效率卻不如匯編語言的執(zhí)行效率高。選擇編程語言也是提高設備傳輸率的方法之一。雖然本設計還有許多缺陷,不足以完成大批量數(shù)據(jù)的高速傳送,但是它己經(jīng)是USB數(shù)據(jù)采集系統(tǒng)的雛形。只要在后續(xù)的研究中通過改善硬件環(huán)境和軟件算法解決好一系列存在的問題,一定會得到充分體現(xiàn)USB總線簡單易用、傳輸速度快等特點的數(shù)據(jù)采集系統(tǒng)。參考文獻[1] [M].北京:人民郵電出版社,[2] 許永和,[M].北京:北京航空航天大學出版社,[3]李全利,[M].北京:高等教育出版社,[4] USB固件編程與驅動開發(fā)[M].北京:北京航空航天大學出版社,[5]邊海龍,[M].北京:人民郵電出版社,[6][M].西安:西安電子科技大學出版社,[7] WDM設備驅動程序開發(fā)指南[M].孫義,:機械工業(yè)出版社,[8]劉炳文,李鳳華編著Visual Basic Win32 API程序設計[M].北京:清華大學出版社,[9][M].西安:西安電子科技大學出版社,[10]Jan Axelson編著;[M].北京:中國電力出版社,附錄英文原文HAVE39。2007 IEEE International Workshop onHaptic Audio Visual Environments and their ApplicationsOttawa, Canada 1214 October 2007Extending Blender: Development of a Haptic Authoring ToolSheldon Andrews39。, Mohamad Eid2, Atif Alamri2, and Abdulmotaleb El Saddik2Multimedia Communications Research Laboratory MCRLabSchool ofInformation Technology and Engineering University ofOttawaOttawa, Ontario, KIN 6N5, Canada39。sandrO71]@site. uottawa. ca, 2 teid, atifW abed] @ mcrlab. uottawa. CaAbstract In this paper, we present our work to extend a well known 3D graphic modeler Blender to support haptic modeling and rendering. The extension tool is named HAMLAT (Haptic Application Markup Language Authoring Tool). We describe the modifications and additions to the Blender source code which have been used to create HAMLAT Furthermore, we present and discuss the design decisions used when developing HAMLAT, and also an implementation road map which describes the changes to the Blender so