?摘要:藍牙通信平臺在嵌入式系統(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)。基于Windows 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ā)指南

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

PCI設(shè)備驅(qū)動程序設(shè)計(Windows通用)

使用Visual Studio .NET

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

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

Windows CE下的串口驅(qū)動設(shè)計

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

PCI設(shè)備Windows通用驅(qū)動程序設(shè)計

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

Windows CE下多線程串口通信

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

基于Windows CE的USB設(shè)備驅(qū)動程序設(shè)計

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

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

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

Windows CE.NET平臺流接口USB驅(qū)動的設(shè)計

Windows CE.NET平臺流接口USB驅(qū)動的設(shè)計

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

Windows CE.NET 下ADC驅(qū)動開發(fā)設(shè)計

uclinux串口驅(qū)動程序

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

Windows CE中實現(xiàn)藍牙串口驅(qū)動程序

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


串口驅(qū)動程序實驗


PCI設(shè)備WINDOWS驅(qū)動程序的開發(fā)

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

Windows CE下SM501 STN驅(qū)動程序的設(shè)計

Windows CE平臺上開發(fā)采集板驅(qū)動程序

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

基于S3C2410的Windows CE驅(qū)動開發(fā)

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

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

WinCE的OLED驅(qū)動程序設(shè)計


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


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

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

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

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

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

Windows CE平臺上開發(fā)采集板驅(qū)動程序

Windows CE驅(qū)動程序開發(fā)

Windows CE設(shè)備驅(qū)動程序開發(fā)

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

Windows CE下藍牙協(xié)議棧驅(qū)動的實現(xiàn)

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

Windows CE中實現(xiàn)藍牙串口驅(qū)動程序

基于S3C2410的Windows CE驅(qū)動開發(fā)

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

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

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

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

基于Windows CE的USB設(shè)備驅(qū)動程序設(shè)計

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

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

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

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

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

Windows CE的驅(qū)動程序開發(fā)解析

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

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

Windows驅(qū)動程序7.709.13.00

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

Windows驅(qū)動程序7.712.09.00

WINDOWS驅(qū)動程序——06.712.13.00

Windows驅(qū)動程序——07.704.09.00

LSI MegaRAID Windows驅(qū)動程序

OneCapture Windows驅(qū)動程序

WINDOWS驅(qū)動程序——06.713.05.00

Windows驅(qū)動程序——6.504.5.0

Windows驅(qū)動程序——07.707.08.00

WINDOWS驅(qū)動程序——06.713.06.00

Windows驅(qū)動程序——07.706.02.00

Windows驅(qū)動程序7.711.04.00

Windows驅(qū)動程序——07.708.12.00

Windows驅(qū)動程序7.710.08.00

Windows驅(qū)動程序——07.702.12.00

Windows驅(qū)動程序——07.703.06.00

評論