新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Windows CE中實現藍牙串口驅動程序

        Windows CE中實現藍牙串口驅動程序

        作者: 時間:2007-03-09 來源:網絡 收藏
        摘要:藍牙通信平臺在系統的實現過程中,OBEX(對象交換)始終是很重要的一部分,基于OBEX的藍牙文件傳輸得到廣泛應用。而OBEX的實現是基于藍牙仿真接口,所以藍牙串口驅動程序的實現就有了很重要的意義。介紹了Windows CE下串口驅動程序的結構和一種具體的實現方法。關鍵詞:藍牙 OBEX 系統 驅動程序 Windows CE作為一種典型的操作系統,通過將藍牙應用移植到Widows CE中,對于如pSOS+、Nucleus等其它,具有典型意義。由于OBEX上的文件傳輸應用建立在RFCOMM實現的藍牙仿真串口上,本文介紹OBEX文件傳輸的藍牙虛擬串口驅動程序的實現。 1 Windows CE設備驅動程序概述 Windows CE支持廣泛的基于各種CE平臺的設備驅動程序。目前,它提供了四種設備模型,其中兩種是專用于Windows CE的模型,另外兩種外部模型來自其它操作系統。基于Windows CE的兩種模型是本機的設備驅動程序和流接口驅動程序。兩種外部模型用于通用串行總線(USB)和網絡驅動器接口標準(NDIS)的驅動程序。 由于藍牙協議是在無線技術下的仿真串口,藍牙中OBEX的許多應用正是基于藍牙仿真串口。而流接口驅動程序通過一組流接口函數使得應用程序可以通過文件系統中的特殊文件而與設備接口,因此藍牙仿真串口的功能性更適合流接口驅動程序的結構。圖12 Windows CE下藍牙串口驅動程序的實現 雖然藍牙設備驅動程序的實現采用流接口驅動程序設計,但由于兩種驅動程序的基本結構與原理相似,所以下文從本機設備驅動程序結構開始,可以更清楚地認識藍牙設備驅動程序的實現原理。 2.1 本機設備驅動程序結構 Windows CE中包含的樣本設備驅動程序分為兩種類型:單片驅動程序(Monolithic device driver)和分層的驅動程序(Layered Devicedriver)。單片驅動程序基于單個碼片,該碼片直接把硬件設備的功能性通過設備驅動程序接口傳遞給操作系統。與單片驅動程序相比,分層的驅動程序由兩個設置好的層組成:上層是模型設備驅動程序(MDD),下層是依賴平臺的驅動程序(PDD)。本文采用分層的驅動程序來連接藍牙硬件和上面的文件傳輸應用。圖1說明了兩種驅動程序是如何在Windows CE操作系統中集成的。 設備驅動程序接口(DDI)是在MDD中實現的函數集,GWES模塊通過這個接口調用設備驅動程序;設備驅動程序服務器提供接口(DDSI)是在PDD中實現的函數集并由MDD調用。由于微軟提供了所有與MDD模塊相關的源代碼,所以對這部分不用做任何改動,只需將自己的PDD模塊與MDD模塊鏈結成一個公用庫。 理解了本機設備驅動程序的結構后,從圖1右邊不難看出,流接口驅動程序只是把流接口作為它們的DDI使用。在這種情況下,不必要把這些驅動程序與GWES模塊邏接起來。它們以普通的DLL方式存在并根據需要被調用。 2.2 藍牙仿真串口驅動程序實現 藍牙仿真串口是用藍牙RFCOMM協議實現無電纜的無線串口通信,與本機設備驅動程序一樣,實現流接口的串口驅動程序同樣只需實現藍牙的PDD模塊。 PDD模塊包括四部分:第一部分是必須自己實現的所有DDSI接口;第二部分是藍牙協議棧包括FRCOMM、SDP、L2CAP以及HCI實體;第三部分是HCI傳輸層通過UART或者USB接口連接到藍牙硬件;最后一部分是為藍牙應用提供的圖形界面接口和控制端口模塊,用來對整個協議棧初始化、藍牙硬件初始化、搜索附近的藍牙設備以及發現指定設備上的服務。如圖2所示。 在圖2所示的藍牙仿真串口驅動程序的系統結構中,設備管理程序是用戶層的程序,在基于Windows CE的平臺上不停地運行著。設備管理程序不是內核的一部分,但它是與內核、注冊表和注接口驅動程序DLL有相互影響的單獨部分。它主要執行以下任務: HWOBJ BluetoothObj={ /*描述藍牙仿真串口特征*/ (PDEVICE_LIST)%26;amp;SerDL, THREAD_IN_PDD,/*中斷處理全部由PDD層處理*/ 0, NULL, (PHW_VTBL)%26;amp;BluetoothVTbl/*包含需要實現的所有標準串口DDSI函數的列表*/ }; HWOBJ BluetoothCTRLObj={/*描述藍牙控制端口特征*/ (PDEVICE_LIST)%26;amp;SerDL, THREAD_IN_PDD, 0, NULL, (PHW_VTBL)%26;amp;CTRLVTb1 }; PHWOBJ rgpHWObjects[]={/*包含兩個PDD實例的數組*/ %26;amp;BluetoothObj, %26;amp;BluetoothCTRLObj }; DEVICE_LIST SerDL={/*存儲設備驅動程序中所有串口設備*/ “CESerial.dll”,/*串口驅動程序的名字*/ sizeof(rgpHWObjects)/sizeof(PHWOBJ),/*串口設備的數目*/ regHWObjects }; PDEVICE_LIST GetSerialObject(VOID) { return (%26;amp;SerDL); }圖2在串口驅動程序中注冊了兩個串口設備后,就要實現這兩個PDD實例對應的流接口函數。微軟為要實現的串口PDD模塊提供了一個HWOBJ(Haredware Object)類型的串行對象表,這個結構列出了實現串口驅動的所有接口函數指針。見下面的描述: typedef struct _HW_VTBL{ PVOID(*HWInit)(ULONG Identifier,PVOID pMDDCon-text,PHWOBJ pHWObj); …, …, BOOL(*HWIoct1)(PVOID pHead,DWORD dwCode, PBYTE pBufIn,DWORD dwLenIn,PBYTE pBufOut,DWORD DwLenOut,PDWORDpdwActualOut); } HW_VTBL,*PHW_VTBL; 用戶通過修改串行口PDD的串行對象表改變函數集或函數名。下面的結構BluetoothVTbl的定義了藍牙仿真串口DDSI函數的名稱。 Const HW_VTBL BluetoothVTbl={ BluetoothInitSerial, …, …, BluetoothIoctl }; 同樣用結構變量CTRLVTbl定義了控制端口的DDSI函數名列表。由于這個串口設備用作內部實現特殊的功能,下面只列出了需要關心的主要函數名。 Const HW_VTBL CTRLVTbl={ CTRLInitSerial, CTRLDeinit, CTRLOpen, CTRLClose, …, …, CTRLIoctl }; 藍牙作為一個驅動新經濟的引擎,將會 對以嵌入式系統為主的“后PC機”時代的到來產生巨大的推動作用,同時它還將面臨來自象IrDA、802.11、HomeRF等無線通信技術的挑戰。而將OBEX成功引入藍牙,使得在嵌入式系統下工作的藍牙通信設備上傳輸文件、同步、打印等應用成為可能,因此在藍牙中起著舉足輕重的作用。 linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 双桥区| 新巴尔虎左旗| 安龙县| 沙湾县| 金乡县| 黔南| 义乌市| 许昌市| 鄂托克前旗| 左云县| 吐鲁番市| 兴义市| 宿迁市| 辽宁省| 宁强县| 江川县| 亳州市| 德令哈市| 海阳市| 富蕴县| 福建省| 醴陵市| 屏东市| 红原县| 海门市| 尼勒克县| 蒙城县| 灵璧县| 泸定县| 祁门县| 临武县| 剑河县| 信丰县| 南阳市| 五寨县| 鄂托克前旗| 凌海市| 利津县| 宜良县| 田林县| 侯马市|