?摘要:藍牙通信平臺在嵌入式系統(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ā)指南
![](https://skin.elecfans.com/images/2021-soft/load.png)
WDM設(shè)備驅(qū)動程序開發(fā),Windows 2000/XP WD
![](https://skin.elecfans.com/images/2021-soft/load.png)
PCI設(shè)備驅(qū)動程序設(shè)計(Windows通用)
![](https://skin.elecfans.com/images/2021-soft/load.png)
使用Visual Studio .NET
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows XP驅(qū)動程序編寫方法
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows98/2000驅(qū)動程序編寫方法
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下的串口驅(qū)動設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
大地電磁儀的Windows CE驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
PCI設(shè)備Windows通用驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE 下通用串行總線(USB)驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下多線程串口通信
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows 2000/XP下I/O設(shè)備驅(qū)動程序的設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Windows CE的USB設(shè)備驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下通用串行總線(USB)驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE.NET下觸摸屏驅(qū)動程序的開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE.Net下基于流驅(qū)動的AD驅(qū)動設(shè)計與實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE.NET平臺流接口USB驅(qū)動的設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE.NET平臺流接口USB驅(qū)動的設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下GPIO驅(qū)動程序的設(shè)計與應(yīng)用
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE.NET 下ADC驅(qū)動開發(fā)設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
uclinux串口驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
uclinux串口驅(qū)動程序源碼
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE中實現(xiàn)藍牙串口驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE環(huán)境下無線網(wǎng)卡的自動安裝
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A4/2B/wKgZomUMMvaAcw8nAACQxl7INgA075.gif)
串口驅(qū)動程序實驗
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A4/67/wKgZomUMNA-ATcrqAAAz06w_BMw652.jpg)
PCI設(shè)備WINDOWS驅(qū)動程序的開發(fā)
![](https://skin.elecfans.com/images/2021-soft/eye.png)
Windows設(shè)備驅(qū)動程序編寫時的主要問題及解決方案
![](https://skin.elecfans.com/images/2021-soft/eye.png)
Windows CE下SM501 STN驅(qū)動程序的設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE平臺上開發(fā)采集板驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下事件驅(qū)動的串行通信方式
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于S3C2410的Windows CE驅(qū)動開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Windows CE.NET數(shù)控系統(tǒng)的插補控制
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows WDM設(shè)備驅(qū)動程序開發(fā)指南
![](https://skin.elecfans.com/images/2021-soft/load.png)
WinCE的OLED驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/29/wKgZomUMPAmAa2F-AAAPu6vo7Ao739.jpg)
嵌入式Win CE中CAN總線控制器的驅(qū)動設(shè)計與實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/37/wKgZomUMPFOAG2oDAAAVNzNfQ7A857.jpg)
Windows CE.NET下USB設(shè)備驅(qū)動實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CENET環(huán)境下的流接口驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CEnet設(shè)備驅(qū)動程序開發(fā)研究
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CENET中斷架構(gòu)分析和高速AD驅(qū)動程序的開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE環(huán)境下擴展串口通信功能的方法
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE平臺上開發(fā)采集板驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE設(shè)備驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下GPS與PDA串行通信的實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE下藍牙協(xié)議棧驅(qū)動的實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE在指紋傳感器設(shè)備驅(qū)動程序開發(fā)中的應(yīng)用
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE中實現(xiàn)藍牙串口驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于S3C2410的Windows CE驅(qū)動開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于WinCE的串行外設(shè)接口驅(qū)動程序設(shè)計實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Windows CE PS2鍵盤的同步串口實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Windows CE.NET的設(shè)備驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Windows CENET嵌入式數(shù)據(jù)采集卡的驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Windows CE的USB設(shè)備驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于WINDOWS CE的開放式數(shù)控系統(tǒng)設(shè)備驅(qū)動程序開發(fā)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于WinDriver for CE的視頻采集驅(qū)動程序設(shè)計
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式Windows CE設(shè)備驅(qū)動的研究實現(xiàn)
![](https://skin.elecfans.com/images/2021-soft/load.png)
在Windows CE下實現(xiàn)串口通信
![](https://skin.elecfans.com/images/2021-soft/load.png)
WindowsCE5的驅(qū)動程序的代碼和結(jié)構(gòu)、安裝過程
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows CE的驅(qū)動程序開發(fā)解析
![](https://skin.elecfans.com/images/2021-soft/load.png)
微軟改變處理Windows 10不兼容驅(qū)動程序的方法
![](https://skin.elecfans.com/images/2021-soft/eye.png)
CP210x VCP Drivers的USB轉(zhuǎn)串口Windows驅(qū)動程序免費下載
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序7.709.13.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
OneInstall Windows驅(qū)動程序和應(yīng)用程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序7.712.09.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
WINDOWS驅(qū)動程序——06.712.13.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——07.704.09.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
LSI MegaRAID Windows驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
OneCapture Windows驅(qū)動程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
WINDOWS驅(qū)動程序——06.713.05.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——6.504.5.0
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——07.707.08.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
WINDOWS驅(qū)動程序——06.713.06.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——07.706.02.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序7.711.04.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——07.708.12.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序7.710.08.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——07.702.12.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
Windows驅(qū)動程序——07.703.06.00
![](https://skin.elecfans.com/images/2021-soft/load.png)
評論