?摘要:藍(lán)牙通信平臺(tái)在嵌入式系統(tǒng)的實(shí)現(xiàn)過(guò)程中,OBEX(對(duì)象交換)始終是很重要的一部分,基于OBEX的藍(lán)牙文件傳輸?shù)玫綇V泛應(yīng)用。而OBEX的實(shí)現(xiàn)是基于藍(lán)牙仿真接口,所以藍(lán)牙串口驅(qū)動(dòng)程序的實(shí)現(xiàn)就有了很重要的意義。介紹了Windows CE下串口驅(qū)動(dòng)程序的結(jié)構(gòu)和一種具體的實(shí)現(xiàn)方法。
Windows CE作為一種典型的嵌入式操作系統(tǒng),通過(guò)將藍(lán)牙應(yīng)用移植到Widows CE中,對(duì)于如pSOS+、Nucleus等其它嵌入式系統(tǒng),具有典型意義。由于OBEX上的文件傳輸應(yīng)用建立在RFCOMM實(shí)現(xiàn)的藍(lán)牙仿真串口上,本文介紹OBEX文件傳輸?shù)乃{(lán)牙虛擬串口驅(qū)動(dòng)程序的實(shí)現(xiàn)。
1 Windows CE設(shè)備驅(qū)動(dòng)程序概述
Windows CE支持廣泛的基于各種CE平臺(tái)的設(shè)備驅(qū)動(dòng)程序。目前,它提供了四種設(shè)備模型,其中兩種是專用于Windows CE的模型,另外兩種外部模型來(lái)自其它操作系統(tǒng)?;赪indows CE的兩種模型是本機(jī)的設(shè)備驅(qū)動(dòng)程序和流接口驅(qū)動(dòng)程序。兩種外部模型用于通用串行總線(USB)和網(wǎng)絡(luò)驅(qū)動(dòng)器接口標(biāo)準(zhǔn)(NDIS)的驅(qū)動(dòng)程序。
由于藍(lán)牙協(xié)議是在無(wú)線技術(shù)下的仿真串口,藍(lán)牙中OBEX的許多應(yīng)用正是基于藍(lán)牙仿真串口。而流接口驅(qū)動(dòng)程序通過(guò)一組流接口函數(shù)使得應(yīng)用程序可以通過(guò)文件系統(tǒng)中的特殊文件而與設(shè)備接口,因此藍(lán)牙仿真串口的功能性更適合流接口驅(qū)動(dòng)程序的結(jié)構(gòu)。
圖1
2 Windows CE下藍(lán)牙串口驅(qū)動(dòng)程序的實(shí)現(xiàn)
雖然藍(lán)牙設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)采用流接口驅(qū)動(dòng)程序設(shè)計(jì),但由于兩種驅(qū)動(dòng)程序的基本結(jié)構(gòu)與原理相似,所以下文從本機(jī)設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)開(kāi)始,可以更清楚地認(rèn)識(shí)藍(lán)牙設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)原理。
2.1 本機(jī)設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)
Windows CE中包含的樣本設(shè)備驅(qū)動(dòng)程序分為兩種類型:?jiǎn)纹?qū)動(dòng)程序(Monolithic device driver)和分層的驅(qū)動(dòng)程序(Layered Devicedriver)。單片驅(qū)動(dòng)程序基于單個(gè)碼片,該碼片直接把硬件設(shè)備的功能性通過(guò)設(shè)備驅(qū)動(dòng)程序接口傳遞給操作系統(tǒng)。與單片驅(qū)動(dòng)程序相比,分層的驅(qū)動(dòng)程序由兩個(gè)設(shè)置好的層組成:上層是模型設(shè)備驅(qū)動(dòng)程序(MDD),下層是依賴平臺(tái)的驅(qū)動(dòng)程序(PDD)。本文采用分層的驅(qū)動(dòng)程序來(lái)連接藍(lán)牙硬件和上面的文件傳輸應(yīng)用。圖1說(shuō)明了兩種驅(qū)動(dòng)程序是如何在Windows CE操作系統(tǒng)中集成的。
設(shè)備驅(qū)動(dòng)程序接口(DDI)是在MDD中實(shí)現(xiàn)的函數(shù)集,GWES模塊通過(guò)這個(gè)接口調(diào)用設(shè)備驅(qū)動(dòng)程序;設(shè)備驅(qū)動(dòng)程序服務(wù)器提供接口(DDSI)是在PDD中實(shí)現(xiàn)的函數(shù)集并由MDD調(diào)用。由于微軟提供了所有與MDD模塊相關(guān)的源代碼,所以對(duì)這部分不用做任何改動(dòng),只需將自己的PDD模塊與MDD模塊鏈結(jié)成一個(gè)公用庫(kù)。
理解了本機(jī)設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)后,從圖1右邊不難看出,流接口驅(qū)動(dòng)程序只是把流接口作為它們的DDI使用。在這種情況下,不必要把這些驅(qū)動(dòng)程序與GWES模塊邏接起來(lái)。它們以普通的DLL方式存在并根據(jù)需要被調(diào)用。
2.2 藍(lán)牙仿真串口驅(qū)動(dòng)程序?qū)崿F(xiàn)
藍(lán)牙仿真串口是用藍(lán)牙RFCOMM協(xié)議實(shí)現(xiàn)無(wú)電纜的無(wú)線串口通信,與本機(jī)設(shè)備驅(qū)動(dòng)程序一樣,實(shí)現(xiàn)流接口的串口驅(qū)動(dòng)程序同樣只需實(shí)現(xiàn)藍(lán)牙的PDD模塊。
PDD模塊包括四部分:第一部分是必須自己實(shí)現(xiàn)的所有DDSI接口;第二部分是藍(lán)牙協(xié)議棧包括FRCOMM、SDP、L2CAP以及HCI實(shí)體;第三部分是HCI傳輸層通過(guò)UART或者USB接口連接到藍(lán)牙硬件;最后一部分是為藍(lán)牙應(yīng)用提供的圖形界面接口和控制端口模塊,用來(lái)對(duì)整個(gè)協(xié)議棧初始化、藍(lán)牙硬件初始化、搜索附近的藍(lán)牙設(shè)備以及發(fā)現(xiàn)指定設(shè)備上的服務(wù)。如圖2所示。
在圖2所示的藍(lán)牙仿真串口驅(qū)動(dòng)程序的系統(tǒng)結(jié)構(gòu)中,設(shè)備管理程序是用戶層的程序,在基于Windows CE的平臺(tái)上不停地運(yùn)行著。設(shè)備管理程序不是內(nèi)核的一部分,但它是與內(nèi)核、注冊(cè)表和注接口驅(qū)動(dòng)程序DLL有相互影響的單獨(dú)部分。它主要執(zhí)行以下任務(wù):
HWOBJ BluetoothObj={ /*描述藍(lán)牙仿真串口特征*/
(PDEVICE_LIST)&SerDL,
THREAD_IN_PDD,/*中斷處理全部由PDD層處理*/
0,
NULL,
(PHW_VTBL)&BluetoothVTbl/*包含需要實(shí)現(xiàn)的所有標(biāo)準(zhǔn)串口DDSI函數(shù)的列表*/
};
HWOBJ BluetoothCTRLObj={/*描述藍(lán)牙控制端口特征*/
(PDEVICE_LIST)&SerDL,
THREAD_IN_PDD,
0,
NULL,
(PHW_VTBL)&CTRLVTb1
};
PHWOBJ rgpHWObjects[]={/*包含兩個(gè)PDD實(shí)例的數(shù)組*/
&BluetoothObj,
&BluetoothCTRLObj
};
DEVICE_LIST SerDL={/*存儲(chǔ)設(shè)備驅(qū)動(dòng)程序中所有串口設(shè)備*/
“CESerial.dll”,/*串口驅(qū)動(dòng)程序的名字*/
sizeof(rgpHWObjects)/sizeof(PHWOBJ),/*串口設(shè)備的數(shù)目*/
regHWObjects
};
PDEVICE_LIST GetSerialObject(VOID)
{
return (&SerDL);
}
圖2
??? 在串口驅(qū)動(dòng)程序中注冊(cè)了兩個(gè)串口設(shè)備后,就要實(shí)現(xiàn)這兩個(gè)PDD實(shí)例對(duì)應(yīng)的流接口函數(shù)。微軟為要實(shí)現(xiàn)的串口PDD模塊提供了一個(gè)HWOBJ(Haredware Object)類型的串行對(duì)象表,這個(gè)結(jié)構(gòu)列出了實(shí)現(xiàn)串口驅(qū)動(dòng)的所有接口函數(shù)指針。見(jiàn)下面的描述:
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;
用戶通過(guò)修改串行口PDD的串行對(duì)象表改變函數(shù)集或函數(shù)名。下面的結(jié)構(gòu)BluetoothVTbl的定義了藍(lán)牙仿真串口DDSI函數(shù)的名稱。
Const HW_VTBL BluetoothVTbl={
BluetoothInitSerial,
…,
…,
BluetoothIoctl
};
同樣用結(jié)構(gòu)變量CTRLVTbl定義了控制端口的DDSI函數(shù)名列表。由于這個(gè)串口設(shè)備用作內(nèi)部實(shí)現(xiàn)特殊的功能,下面只列出了需要關(guān)心的主要函數(shù)名。
Const HW_VTBL CTRLVTbl={
CTRLInitSerial,
CTRLDeinit,
CTRLOpen,
CTRLClose,
…,
…,
CTRLIoctl
};
藍(lán)牙作為一個(gè)驅(qū)動(dòng)新經(jīng)濟(jì)的引擎,將會(huì) 對(duì)以嵌入式系統(tǒng)為主的“后PC機(jī)”時(shí)代的到來(lái)產(chǎn)生巨大的推動(dòng)作用,同時(shí)它還將面臨來(lái)自象IrDA、802.11、HomeRF等無(wú)線通信技術(shù)的挑戰(zhàn)。而將OBEX成功引入藍(lán)牙,使得在嵌入式系統(tǒng)下工作的藍(lán)牙通信設(shè)備上傳輸文件、同步、打印等應(yīng)用成為可能,因此在藍(lán)牙中起著舉足輕重的作用。
- Wind(30405)
- 驅(qū)動(dòng)程序(47092)
相關(guān)推薦
Windows CE 5.0系統(tǒng)級(jí)開(kāi)發(fā)介紹
Windows CE NET下USB設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)
基于Windows CE的流驅(qū)動(dòng)程序如何去實(shí)現(xiàn)?
嵌入式操作系統(tǒng)Windows CE研究
怎么在不同的硬件設(shè)備上實(shí)現(xiàn)Windows CE的驅(qū)動(dòng)開(kāi)發(fā)?
采用WinCE實(shí)現(xiàn)SPI接口驅(qū)動(dòng)程序
WINCE驅(qū)動(dòng)程序開(kāi)發(fā)指南

WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā),Windows 2000/XP WD

PCI設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)(Windows通用)

使用Visual Studio .NET

Windows XP驅(qū)動(dòng)程序編寫方法

Windows98/2000驅(qū)動(dòng)程序編寫方法

嵌入式開(kāi)發(fā)系列課程九--Windows CE驅(qū)動(dòng)開(kāi)

Windows CE下的串口驅(qū)動(dòng)設(shè)計(jì)

大地電磁儀的Windows CE驅(qū)動(dòng)程序設(shè)計(jì)

PCI設(shè)備Windows通用驅(qū)動(dòng)程序設(shè)計(jì)

Windows CE 下通用串行總線(USB)驅(qū)動(dòng)程序開(kāi)發(fā)

Windows CE下多線程串口通信

Windows 2000/XP下I/O設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)

基于Windows CE的USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)

Windows CE下通用串行總線(USB)驅(qū)動(dòng)程序開(kāi)發(fā)

Windows CE.NET下觸摸屏驅(qū)動(dòng)程序的開(kāi)發(fā)

Windows CE.Net下基于流驅(qū)動(dòng)的AD驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

Windows CE.NET平臺(tái)流接口USB驅(qū)動(dòng)的設(shè)計(jì)

Windows CE.NET平臺(tái)流接口USB驅(qū)動(dòng)的設(shè)計(jì)

Windows CE下GPIO驅(qū)動(dòng)程序的設(shè)計(jì)與應(yīng)用

Windows CE.NET 下ADC驅(qū)動(dòng)開(kāi)發(fā)設(shè)計(jì)

uclinux串口驅(qū)動(dòng)程序

uclinux串口驅(qū)動(dòng)程序源碼

Windows CE中實(shí)現(xiàn)藍(lán)牙串口驅(qū)動(dòng)程序

驅(qū)動(dòng)程序超級(jí)寶典

Windows CE環(huán)境下無(wú)線網(wǎng)卡的自動(dòng)安裝


串口驅(qū)動(dòng)程序實(shí)驗(yàn)


PCI設(shè)備WINDOWS驅(qū)動(dòng)程序的開(kāi)發(fā)

Windows設(shè)備驅(qū)動(dòng)程序編寫時(shí)的主要問(wèn)題及解決方案

Windows CE下SM501 STN驅(qū)動(dòng)程序的設(shè)計(jì)

Windows CE平臺(tái)上開(kāi)發(fā)采集板驅(qū)動(dòng)程序

Windows CE下事件驅(qū)動(dòng)的串行通信方式

基于S3C2410的Windows CE驅(qū)動(dòng)開(kāi)發(fā)

基于Windows CE.NET數(shù)控系統(tǒng)的插補(bǔ)控制

Windows WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)指南

WinCE的OLED驅(qū)動(dòng)程序設(shè)計(jì)


嵌入式Win CE中CAN總線控制器的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)


Windows CE.NET下USB設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)

Windows CENET環(huán)境下的流接口驅(qū)動(dòng)程序開(kāi)發(fā)

Windows CEnet設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)研究

Windows CENET中斷架構(gòu)分析和高速AD驅(qū)動(dòng)程序的開(kāi)發(fā)

Windows CE環(huán)境下擴(kuò)展串口通信功能的方法

Windows CE平臺(tái)上開(kāi)發(fā)采集板驅(qū)動(dòng)程序

Windows CE驅(qū)動(dòng)程序開(kāi)發(fā)

Windows CE設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

Windows CE下GPS與PDA串行通信的實(shí)現(xiàn)

Windows CE下藍(lán)牙協(xié)議棧驅(qū)動(dòng)的實(shí)現(xiàn)

Windows CE在指紋傳感器設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)中的應(yīng)用

Windows CE中實(shí)現(xiàn)藍(lán)牙串口驅(qū)動(dòng)程序

基于S3C2410的Windows CE驅(qū)動(dòng)開(kāi)發(fā)

基于WinCE的串行外設(shè)接口驅(qū)動(dòng)程序設(shè)計(jì)實(shí)現(xiàn)

基于Windows CE PS2鍵盤的同步串口實(shí)現(xiàn)

基于Windows CE.NET的設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

基于Windows CENET嵌入式數(shù)據(jù)采集卡的驅(qū)動(dòng)程序設(shè)計(jì)

基于Windows CE的USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)

基于WINDOWS CE的開(kāi)放式數(shù)控系統(tǒng)設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

基于WinDriver for CE的視頻采集驅(qū)動(dòng)程序設(shè)計(jì)

嵌入式Windows CE設(shè)備驅(qū)動(dòng)的研究實(shí)現(xiàn)

在Windows CE下實(shí)現(xiàn)串口通信

WindowsCE5的驅(qū)動(dòng)程序的代碼和結(jié)構(gòu)、安裝過(guò)程

Windows CE的驅(qū)動(dòng)程序開(kāi)發(fā)解析

微軟改變處理Windows 10不兼容驅(qū)動(dòng)程序的方法

CP210x VCP Drivers的USB轉(zhuǎn)串口Windows驅(qū)動(dòng)程序免費(fèi)下載

Windows驅(qū)動(dòng)程序7.709.13.00

Windows驅(qū)動(dòng)程序分享

Windows驅(qū)動(dòng)程序案例

OneInstall Windows驅(qū)動(dòng)程序和應(yīng)用程序

Windows驅(qū)動(dòng)程序7.712.09.00

Windows驅(qū)動(dòng)程序下載

WINDOWS驅(qū)動(dòng)程序——06.712.13.00

分享Windows驅(qū)動(dòng)程序

Windows驅(qū)動(dòng)程序包

Windows驅(qū)動(dòng)程序——07.704.09.00

LSI MegaRAID Windows驅(qū)動(dòng)程序

OneCapture Windows驅(qū)動(dòng)程序

WINDOWS驅(qū)動(dòng)程序——06.713.05.00

Elxflash Windows驅(qū)動(dòng)程序

Windows驅(qū)動(dòng)程序——6.504.5.0

Windows驅(qū)動(dòng)程序——07.707.08.00

WINDOWS驅(qū)動(dòng)程序——06.713.06.00

Windows驅(qū)動(dòng)程序——07.706.02.00

Windows驅(qū)動(dòng)程序7.711.04.00

Windows驅(qū)動(dòng)程序——07.708.12.00

Windows驅(qū)動(dòng)程序7.710.08.00

Windows驅(qū)動(dòng)程序——07.702.12.00

Windows驅(qū)動(dòng)程序——07.703.06.00

評(píng)論