背景
Widcomm是第一個為Windows編寫藍芽Stack的公司,後來給Broadcom收購了,由於他是第一個,所以目前很多藍牙裝置都是使用Broadcom Statck的。下面講述如何使用32feet.net對基於Broadcom Statck的藍牙裝置進行開發。
本文的例子是基於 Windows Mobile 與 PC之間的通過藍芽(Bluetooth) 傳輸檔案的開發 和 Windows Moible, Wince 使用.NET Compact Framework進行藍芽(Bluetooth)開發 之 32feet.NET 的基礎上修改的。
緣由
謝謝 yanghao 同學的建議, 講一下寫這篇文章的緣由。 這篇文章是為瞭解決 崔江 同學提出的問題而寫的,我之前寫了一系列關於藍芽開發的文章,在這些文章的讀者中,有不少人提問如何使用widcomm Stack進行藍芽的相關開發,我在g.cn和baidu裡面尋找過,發現國內關於這方面的文章很少,所以把自己的經驗總結下來,可能該文章比較難懂,請先閱讀“進一步閱讀”下的連結,這些文章相對來說是入門篇到進階篇,這篇算是那些文章的延續了,算是進階篇。
驅動安裝
進行Broadcom stack的開發,必須安裝該驅動程式,下面以XP為例子,說明Broadcom驅動程式的安裝。
插入Broadcom stack的藍芽dongle。
插入驅動程式的CD進行安裝。
安裝完畢能看到該藍牙裝置。
32feet.net源碼下載
到codeplex下載32feet.net最新的代碼,由於最新的32feet.net的release沒有包含對Broadcom stack的支援,所以需要下載build版本。最新的build版本如下:
http://32feet.codeplex.com/SourceControl/ListDownloadableCommits.aspx
Broadcom stack的Native DLL
如果使用Microsoft Stack,32feet.net可以直接調用Wince(Windows Embedded CE)和Windows Mobile內建的btdrt.dll和BthUtil.dll。但是使用Broadcom stack的情況就不一樣了。32feet.net封裝了Native的DLL來調用Broadcom的驅動。 在源碼包裡面已經包含了build好的DLL,看。
為PC的Native DLL。
為Windows Mobile的Native DLL。
32feet.net編譯
開啟\32feet-61144\InTheHand.Net.Personal_Widcomm下的解決方案。
分別編譯InTheHand.Net.Personal.CF2和InTheHand.Net.Personal.FX2項目產生32feet.net的.NET Assembly InTheHand.Net.Personal.dll.
項目引用的更新
把引用都更新到新編譯的InTheHand.Net.Personal.dll。
為了節省時間,我的例子是在原先文章的基礎上進行修改的。原文參考 Windows Mobile 與 PC之間的通過藍芽(Bluetooth) 傳輸檔案的開發
修改以支援Broadcom Stack
修改對InTheHand.Net.Personal.dll的引用。
注釋設定PrimaryRadio.Mode 的調用,因為Broadcom(Widcomm) stack不支援設定PrimaryRadio.Mode 。
//InTheHand.Net.Bluetooth.BluetoothRadio.PrimaryRadio.Mode = InTheHand.Net.Bluetooth.RadioMode.Discoverable;
部署程式PC端
和Microsoft Stack不一樣,部署的時候不僅僅需要部署程式,而且需要部署Native DLL及其依賴的DLL。如果不部署這些依賴DLL,程式會拋出異常。這是之前 崔江 同學調試一直出錯的原因。
我把這些依賴的DLL都放到源碼包裡面了。
Windows Mobile端
Windows Mobile端相對簡單,依賴的DLL本身已經安裝到裝置上去了。
只是需要部署應用程式,inthehand.net.personal.dll 和 32feetWidcomm.dll就可以了。
配對藍牙裝置
程式啟動並執行時候,需要手工配對。
但是在Microsoft Stack裡面可以通過程式來配對的,可以參考 Windows Moible, Wince 使用.NET Compact Framework的進行藍芽(Bluetooth)裝置配對的開發
測試基於Broadcom stack的檔案傳輸程式
兩邊都是Broadcom Stack,但是服務端接收到ObexListener的請求的時候會拋出異常,如下:
ObexListenerContext olc = listener.GetContext();
因為Broadcom(Widcomm) Stack是不支援sockets的,所以Broadcom(Widcomm) Stack不能作為ObexListener來使用,我把ObexListener換成Microsoft Stack,一切運行正常。
原始碼: http://files.cnblogs.com/procoder/BroadcomBluetoothObex.rar
如果需要換成Microsoft Stack,只需要換InTheHand.Net.Personal.dll的引用就可以了。
同時我也在 Windows Moible, Wince 使用.NET Compact Framework進行藍芽(Bluetooth)開發 之 32feet.NET 的基礎上做了一個兩端都Broadcom Stack的通訊程式。
原始碼:http://files.cnblogs.com/procoder/BroadcomBluetooth.rar
我同時發現如果服務端為Broadcom Stack的程式,有掛死現象,我改成Microsoft Stack問題又解決了。
關於Broadcom Stack(Widcomm Stack)開發的建議
32feet.net對Broadcom Stack(Widcomm Stack)的支援是不完整的。支援情況可以參照這個文檔:http://files.cnblogs.com/procoder/32feet-and-Widcomm-Broadcom.doc
我建議不是萬不得已的情況下,不用使用Broadcom Stack(Widcomm Stack),使用Microsoft Stack很多問題都迎刃而解了。這裡有一個文檔講述如何把非Microsoft Stack的裝置安裝Microsoft Stack。請參考:http://files.cnblogs.com/procoder/Belkin-F8T012-and-Microsoft-Stack.doc
進一步閱讀
更多的藍芽開發相關文章如下:
Windows Moible, Wince 使用.NET Compact Framework的進行藍芽(Bluetooth)開發 之 Windows Embedded Source Tools for Bluetooth
Windows Moible, Wince 使用.NET Compact Framework進行藍芽(Bluetooth)開發 之 32feet.NET
Windows Moible, Wince 使用.NET Compact Framework的進行藍芽(Bluetooth)開發 之 藍芽虛擬串口 (Bluetooth Virtual Serial Port)(可以用於把Bluetooth的GPS receiver變成串口)
Windows Moible, Wince 使用.NET Compact Framework的進行藍芽(Bluetooth)裝置配對的開發
30 Days of .NET [Windows Mobile Applications] - Day 02: Bluetooth Manager(藍芽管理器) (簡單的Bluetooth應用)
Windows Moible, Wince 使用.NET Compact Framework的進行藍芽(Bluetooth)廣播程式的開發
Windows Mobile 與 PC之間的通過藍芽(Bluetooth) 傳輸檔案的開發
Windows Mobile下通過藍芽(Bluetooth)發送大檔案的實現