摘要:藍芽通訊平台在嵌入式系統的實現過程中,
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的許多應用正是基於藍芽**串列埠。而流介面驅動程式通過一組流介面函式使得應用程式可以通過檔案系統中的特殊檔案而與裝置介面,因此藍芽**串列埠的功能性更適合流介面驅動程式的結構。 2
windows ce
下藍芽串列埠驅動程式的實現
雖然藍芽裝置驅動程式的實現採用流介面驅動程式設計,但由於兩種驅動程式的基本結構與原理相似,所以下文從本機裝置驅動程式結構開始,可以更清楚地認識藍芽裝置驅動程式的實現原理。
2.1 本機裝置驅動程式結構
windows ce
中包含的樣本裝置驅動程式分為兩種型別:單片驅動程式(m
onolithic device driver
)和分層的驅動程式(l
ayered devicedriver
)。單片驅動程式基於單個碼片,該碼片直接把硬體裝置的功能性通過裝置驅動程式介面傳遞給作業系統。與單片驅動程式相比,分層的驅動程式由兩個設定好的層組成:上層是模型裝置驅動程式(mdd),下層是依賴平台的驅動程式(pdd)。本文採用分層的驅動程式來連線藍芽硬體和上面的檔案傳輸應用。圖1說明了兩種驅動程式是如何在w
indows 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所示的藍芽**串列埠驅動程式的系統結構中,裝置管理程式是使用者層的程式,在基於w
indows ce
的平台上不停地執行著。裝置管理程式不是核心的一部分,但它是與核心、登錄檔和注介面驅動程式dll有相互影響的單獨部分。它主要執行以下任務:
hwobj bluetoothobj=;
hwobj bluetoothctrlobj=;
phwobj rgphwobjects=;
device_list serdl=;
pdevice_list getserialobject(void)
在串列埠驅動程式中註冊了兩個串列埠裝置後,就要實現這兩個
pdd例項對應的流介面函式。微軟為要實現的串列埠
pdd模組提供了乙個
hwobj
(haredware object
)型別的序列物件表,這個結構列出了實現串列埠驅動的所有介面函式指標。見下面的描述:
typedef struct _hw_vtbl hw_vtbl,*phw_vtbl;
使用者通過修改序列口
pdd的序列物件表改變函式集或函式名。下面的結構
bluetoothvtbl
的定義了藍芽**串列埠
ddsi
函式的名稱。
const hw_vtbl bluetoothvtbl=;
同樣用結構變數
ctrlvtbl
定義了控制埠的
ddsi
函式名列表。由於這個串列埠裝置用作內部實現特殊的功能,下面只列出了需要關心的主要函式名。
const hw_vtbl ctrlvtbl=;
藍芽作為乙個驅動新經濟的引擎,將會
對以嵌入式系統為主的「後
pc機」時代的到來產生巨大的推動作用,同時它還將面臨來自象
irda
、802.11
、homerf
等無線通訊技術的挑戰。而將
obex
成功引入藍芽,使得在嵌入式系統下工作的藍芽通訊裝置上傳輸檔案、同步、列印等應用成為可能,因此在藍芽中起著舉足輕重的作用。
Windows CE下AD驅動設計與實現
本文 http developer.51cto.com art 200907 136858.htm 引言 windows ce.net 是乙個32位 多工 多執行緒的完全搶占式的實時作業系統。它提供了眾多強大工具適應於快速構建新一代記憶體少 體積小的智慧型裝置,如工業控制器 手持式裝置等。該系統的特...
python藍芽通訊 python實現藍芽通訊
安裝和示例 linux下安裝 sudo apt get install python pip libglib2.0 dev sudo pip install bluepy 官方示例 importbtleclassmydelegate btle.defaultdelegate def init sel...
python藍芽通訊 python實現藍芽通訊
安裝和示例 linux下安裝 sudo apt get install python pip libglib2.0 dev sudo pip install bluepy 官方示例 import btle class mydelegate btle.defaultdelegate def init ...