?摘要:藍牙通信平臺在嵌入式系統(tǒng)的實現(xiàn)過程中,OBEX(對象交換)始終是很重要的一部分,基于OBEX的藍牙文件傳輸?shù)玫綇V泛應(yīng)用。而OBEX的實現(xiàn)是基于藍牙仿真接口,所以藍牙串口驅(qū)動程序的實現(xiàn)就有了很重要的意義。介紹了Windows CE下串口驅(qū)動程序的結(jié)構(gòu)和一種具體的實現(xiàn)方法。
Windows CE作為一種典型的嵌入式操作系統(tǒng),通過將藍牙應(yīng)用移植到Widows CE中,對于如pSOS+、Nucleus等其它嵌入式系統(tǒng),具有典型意義。由于OBEX上的文件傳輸應(yīng)用建立在RFCOMM實現(xiàn)的藍牙仿真串口上,本文介紹OBEX文件傳輸?shù)乃{牙虛擬串口驅(qū)動程序的實現(xiàn)。
1 Windows CE設(shè)備驅(qū)動程序概述
Windows CE支持廣泛的基于各種CE平臺的設(shè)備驅(qū)動程序。目前,它提供了四種設(shè)備模型,其中兩種是專用于Windows CE的模型,另外兩種外部模型來自其它操作系統(tǒng)?;赪indows CE的兩種模型是本機的設(shè)備驅(qū)動程序和流接口驅(qū)動程序。兩種外部模型用于通用串行總線(USB)和網(wǎng)絡(luò)驅(qū)動器接口標準(NDIS)的驅(qū)動程序。
由于藍牙協(xié)議是在無線技術(shù)下的仿真串口,藍牙中OBEX的許多應(yīng)用正是基于藍牙仿真串口。而流接口驅(qū)動程序通過一組流接口函數(shù)使得應(yīng)用程序可以通過文件系統(tǒng)中的特殊文件而與設(shè)備接口,因此藍牙仿真串口的功能性更適合流接口驅(qū)動程序的結(jié)構(gòu)。
圖1
2 Windows CE下藍牙串口驅(qū)動程序的實現(xiàn)
雖然藍牙設(shè)備驅(qū)動程序的實現(xiàn)采用流接口驅(qū)動程序設(shè)計,但由于兩種驅(qū)動程序的基本結(jié)構(gòu)與原理相似,所以下文從本機設(shè)備驅(qū)動程序結(jié)構(gòu)開始,可以更清楚地認識藍牙設(shè)備驅(qū)動程序的實現(xiàn)原理。
2.1 本機設(shè)備驅(qū)動程序結(jié)構(gòu)
Windows CE中包含的樣本設(shè)備驅(qū)動程序分為兩種類型:單片驅(qū)動程序(Monolithic device driver)和分層的驅(qū)動程序(Layered Devicedriver)。單片驅(qū)動程序基于單個碼片,該碼片直接把硬件設(shè)備的功能性通過設(shè)備驅(qū)動程序接口傳遞給操作系統(tǒng)。與單片驅(qū)動程序相比,分層的驅(qū)動程序由兩個設(shè)置好的層組成:上層是模型設(shè)備驅(qū)動程序(MDD),下層是依賴平臺的驅(qū)動程序(PDD)。本文采用分層的驅(qū)動程序來連接藍牙硬件和上面的文件傳輸應(yīng)用。圖1說明了兩種驅(qū)動程序是如何在Windows CE操作系統(tǒng)中集成的。
設(shè)備驅(qū)動程序接口(DDI)是在MDD中實現(xiàn)的函數(shù)集,GWES模塊通過這個接口調(diào)用設(shè)備驅(qū)動程序;設(shè)備驅(qū)動程序服務(wù)器提供接口(DDSI)是在PDD中實現(xiàn)的函數(shù)集并由MDD調(diào)用。由于微軟提供了所有與MDD模塊相關(guān)的源代碼,所以對這部分不用做任何改動,只需將自己的PDD模塊與MDD模塊鏈結(jié)成一個公用庫。
理解了本機設(shè)備驅(qū)動程序的結(jié)構(gòu)后,從圖1右邊不難看出,流接口驅(qū)動程序只是把流接口作為它們的DDI使用。在這種情況下,不必要把這些驅(qū)動程序與GWES模塊邏接起來。它們以普通的DLL方式存在并根據(jù)需要被調(diào)用。
2.2 藍牙仿真串口驅(qū)動程序?qū)崿F(xiàn)
藍牙仿真串口是用藍牙RFCOMM協(xié)議實現(xiàn)無電纜的無線串口通信,與本機設(shè)備驅(qū)動程序一樣,實現(xiàn)流接口的串口驅(qū)動程序同樣只需實現(xiàn)藍牙的PDD模塊。
PDD模塊包括四部分:第一部分是必須自己實現(xiàn)的所有DDSI接口;第二部分是藍牙協(xié)議棧包括FRCOMM、SDP、L2CAP以及HCI實體;第三部分是HCI傳輸層通過UART或者USB接口連接到藍牙硬件;最后一部分是為藍牙應(yīng)用提供的圖形界面接口和控制端口模塊,用來對整個協(xié)議棧初始化、藍牙硬件初始化、搜索附近的藍牙設(shè)備以及發(fā)現(xiàn)指定設(shè)備上的服務(wù)。如圖2所示。
在圖2所示的藍牙仿真串口驅(qū)動程序的系統(tǒng)結(jié)構(gòu)中,設(shè)備管理程序是用戶層的程序,在基于Windows CE的平臺上不停地運行著。設(shè)備管理程序不是內(nèi)核的一部分,但它是與內(nèi)核、注冊表和注接口驅(qū)動程序DLL有相互影響的單獨部分。它主要執(zhí)行以下任務(wù):
HWOBJ BluetoothObj={ /*描述藍牙仿真串口特征*/
(PDEVICE_LIST)&SerDL,
THREAD_IN_PDD,/*中斷處理全部由PDD層處理*/
0,
NULL,
(PHW_VTBL)&BluetoothVTbl/*包含需要實現(xiàn)的所有標準串口DDSI函數(shù)的列表*/
};
HWOBJ BluetoothCTRLObj={/*描述藍牙控制端口特征*/
(PDEVICE_LIST)&SerDL,
THREAD_IN_PDD,
0,
NULL,
(PHW_VTBL)&CTRLVTb1
};
PHWOBJ rgpHWObjects[]={/*包含兩個PDD實例的數(shù)組*/
&BluetoothObj,
&BluetoothCTRLObj
};
DEVICE_LIST SerDL={/*存儲設(shè)備驅(qū)動程序中所有串口設(shè)備*/
“CESerial.dll”,/*串口驅(qū)動程序的名字*/
sizeof(rgpHWObjects)/sizeof(PHWOBJ),/*串口設(shè)備的數(shù)目*/
regHWObjects
};
PDEVICE_LIST GetSerialObject(VOID)
{
return (&SerDL);
}
圖2
??? 在串口驅(qū)動程序中注冊了兩個串口設(shè)備后,就要實現(xiàn)這兩個PDD實例對應(yīng)的流接口函數(shù)。微軟為要實現(xiàn)的串口PDD模塊提供了一個HWOBJ(Haredware Object)類型的串行對象表,這個結(jié)構(gòu)列出了實現(xiàn)串口驅(qū)動的所有接口函數(shù)指針。見下面的描述:
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的串行對象表改變函數(shù)集或函數(shù)名。下面的結(jié)構(gòu)BluetoothVTbl的定義了藍牙仿真串口DDSI函數(shù)的名稱。
Const HW_VTBL BluetoothVTbl={
BluetoothInitSerial,
…,
…,
BluetoothIoctl
};
同樣用結(jié)構(gòu)變量CTRLVTbl定義了控制端口的DDSI函數(shù)名列表。由于這個串口設(shè)備用作內(nèi)部實現(xiàn)特殊的功能,下面只列出了需要關(guān)心的主要函數(shù)名。
Const HW_VTBL CTRLVTbl={
CTRLInitSerial,
CTRLDeinit,
CTRLOpen,
CTRLClose,
…,
…,
CTRLIoctl
};
藍牙作為一個驅(qū)動新經(jīng)濟的引擎,將會 對以嵌入式系統(tǒng)為主的“后PC機”時代的到來產(chǎn)生巨大的推動作用,同時它還將面臨來自象IrDA、802.11、HomeRF等無線通信技術(shù)的挑戰(zhàn)。而將OBEX成功引入藍牙,使得在嵌入式系統(tǒng)下工作的藍牙通信設(shè)備上傳輸文件、同步、打印等應(yīng)用成為可能,因此在藍牙中起著舉足輕重的作用。
- Wind(30405)
- 驅(qū)動程序(47092)
相關(guān)推薦
Windows CE 5.0系統(tǒng)級開發(fā)介紹
Windows CE NET下USB設(shè)備驅(qū)動實現(xiàn)
基于Windows CE的流驅(qū)動程序如何去實現(xiàn)?
嵌入式操作系統(tǒng)Windows CE研究
怎么在不同的硬件設(shè)備上實現(xiàn)Windows CE的驅(qū)動開發(fā)?
采用WinCE實現(xiàn)SPI接口驅(qū)動程序
WINCE驅(qū)動程序開發(fā)指南
41WDM設(shè)備驅(qū)動程序開發(fā),Windows 2000/XP WD
0PCI設(shè)備驅(qū)動程序設(shè)計(Windows通用)
0使用Visual Studio .NET
38Windows XP驅(qū)動程序編寫方法
122Windows98/2000驅(qū)動程序編寫方法
29Windows CE下的串口驅(qū)動設(shè)計
22大地電磁儀的Windows CE驅(qū)動程序設(shè)計
24PCI設(shè)備Windows通用驅(qū)動程序設(shè)計
24Windows CE 下通用串行總線(USB)驅(qū)動程序開發(fā)
28Windows CE下多線程串口通信
28Windows 2000/XP下I/O設(shè)備驅(qū)動程序的設(shè)計
18基于Windows CE的USB設(shè)備驅(qū)動程序設(shè)計
33Windows CE下通用串行總線(USB)驅(qū)動程序開發(fā)
21Windows CE.NET下觸摸屏驅(qū)動程序的開發(fā)
57Windows CE.Net下基于流驅(qū)動的AD驅(qū)動設(shè)計與實現(xiàn)
19Windows CE.NET平臺流接口USB驅(qū)動的設(shè)計
38Windows CE.NET平臺流接口USB驅(qū)動的設(shè)計
3Windows CE下GPIO驅(qū)動程序的設(shè)計與應(yīng)用
48Windows CE.NET 下ADC驅(qū)動開發(fā)設(shè)計
12uclinux串口驅(qū)動程序
18uclinux串口驅(qū)動程序源碼
40Windows CE中實現(xiàn)藍牙串口驅(qū)動程序
16Windows CE環(huán)境下無線網(wǎng)卡的自動安裝
1109
串口驅(qū)動程序實驗
1992
PCI設(shè)備WINDOWS驅(qū)動程序的開發(fā)
3196Windows設(shè)備驅(qū)動程序編寫時的主要問題及解決方案
1549Windows CE下SM501 STN驅(qū)動程序的設(shè)計
37Windows CE平臺上開發(fā)采集板驅(qū)動程序
42Windows CE下事件驅(qū)動的串行通信方式
42基于S3C2410的Windows CE驅(qū)動開發(fā)
54基于Windows CE.NET數(shù)控系統(tǒng)的插補控制
34Windows WDM設(shè)備驅(qū)動程序開發(fā)指南
0WinCE的OLED驅(qū)動程序設(shè)計
1891
嵌入式Win CE中CAN總線控制器的驅(qū)動設(shè)計與實現(xiàn)
1653
Windows CE.NET下USB設(shè)備驅(qū)動實現(xiàn)
2Windows CENET環(huán)境下的流接口驅(qū)動程序開發(fā)
3Windows CEnet設(shè)備驅(qū)動程序開發(fā)研究
0Windows CENET中斷架構(gòu)分析和高速AD驅(qū)動程序的開發(fā)
0Windows CE環(huán)境下擴展串口通信功能的方法
5Windows CE平臺上開發(fā)采集板驅(qū)動程序
0Windows CE驅(qū)動程序開發(fā)
0Windows CE設(shè)備驅(qū)動程序開發(fā)
0Windows CE下GPS與PDA串行通信的實現(xiàn)
5Windows CE下藍牙協(xié)議棧驅(qū)動的實現(xiàn)
5Windows CE在指紋傳感器設(shè)備驅(qū)動程序開發(fā)中的應(yīng)用
0Windows CE中實現(xiàn)藍牙串口驅(qū)動程序
6基于S3C2410的Windows CE驅(qū)動開發(fā)
0基于WinCE的串行外設(shè)接口驅(qū)動程序設(shè)計實現(xiàn)
3基于Windows CE PS2鍵盤的同步串口實現(xiàn)
6基于Windows CE.NET的設(shè)備驅(qū)動程序開發(fā)
0基于Windows CENET嵌入式數(shù)據(jù)采集卡的驅(qū)動程序設(shè)計
0基于Windows CE的USB設(shè)備驅(qū)動程序設(shè)計
5基于WINDOWS CE的開放式數(shù)控系統(tǒng)設(shè)備驅(qū)動程序開發(fā)
0基于WinDriver for CE的視頻采集驅(qū)動程序設(shè)計
0嵌入式Windows CE設(shè)備驅(qū)動的研究實現(xiàn)
1在Windows CE下實現(xiàn)串口通信
6WindowsCE5的驅(qū)動程序的代碼和結(jié)構(gòu)、安裝過程
3Windows CE的驅(qū)動程序開發(fā)解析
0微軟改變處理Windows 10不兼容驅(qū)動程序的方法
3065CP210x VCP Drivers的USB轉(zhuǎn)串口Windows驅(qū)動程序免費下載
43Windows驅(qū)動程序7.709.13.00
1OneInstall Windows驅(qū)動程序和應(yīng)用程序
0Windows驅(qū)動程序7.712.09.00
0WINDOWS驅(qū)動程序——06.712.13.00
0Windows驅(qū)動程序——07.704.09.00
0LSI MegaRAID Windows驅(qū)動程序
4OneCapture Windows驅(qū)動程序
0WINDOWS驅(qū)動程序——06.713.05.00
0Windows驅(qū)動程序——6.504.5.0
0Windows驅(qū)動程序——07.707.08.00
0WINDOWS驅(qū)動程序——06.713.06.00
0Windows驅(qū)動程序——07.706.02.00
0Windows驅(qū)動程序7.711.04.00
0Windows驅(qū)動程序——07.708.12.00
0Windows驅(qū)動程序7.710.08.00
0Windows驅(qū)動程序——07.702.12.00
0Windows驅(qū)動程序——07.703.06.00
0
電子發(fā)燒友App



評論