實驗室做短距離通訊,藍芽是其中主要技術之一。研究生入學複試的時候,大老闆跟我們說,藍芽的起源和一位彈鋼琴的人有關,因為藍芽用到了跳頻,這個和手指在各個琴鍵之間跳動的現象有一定的聯絡。各學科之間的碰撞,會出現一些奇妙的火花。
在Windows Mobile平台上,如何來實現藍芽通訊呢?有好多人已經做過這方面的工作,比如在winbile論壇的“使用C#來開發.NET CF 藍芽通訊模組”,codeproject上的“Bluetooth Connection in Windows Mobile 5.0 using InThehand - C#”和“Bluetooth Simulation in C# with Serial Ports”等等。
其實,安裝了windows mobile 6.0 Professional SDK之後,內建的sample中就有藍芽通訊的例子,包括Bluetooth Device Discovery、Chatting over Bluetooth和Bluetooth Game。前面兩個是C++寫的,第三個是用C#來寫的。Bluetooth Device Discovery是採用“Winsock 2 API”來實現藍牙裝置的發現。Chatting over Bluetooth是在兩個藍牙裝置之間建立點對點的通訊。Bluetooth Game是使用藍芽技術,在兩台裝置之間建立串連,然後進行遊戲。手頭正好有兩台bluetooth的裝置,一台是WM5系統,一台是WM6的,所以決定試試Chatting over Bluetooth。
開啟Chatting over Bluetooth工程,發現這是一個基於對話方塊的MFC,對藍芽的操作主要是在“BthUtils.cpp”中完成的,包括髮現裝置、建立串連和發送資料等等,其主要的函數如下:
Code
1 int DiscoverDevices();
2 int GetNumDevices(){return m_iNumDevices;};
3 int GetDeviceInfo(DeviceInfo *pPeerDevicesInfo);
4 int GetLocalDeviceName(DeviceInfo *pLocalDeviceInfo);
5 int GetDeviceInfo(DeviceInfo *pPeerDeviceInfo, int iSelectedItem);
6 int OpenServerConnection(BYTE *rgbSdpRecord, int cSdpRecord, int iChannelOffset, void (*funcPtr)( WCHAR*));
7 int SendMessageToServer(WCHAR *strGUID, WCHAR *szMessage, int iSelectedDeviceIndex);
8
在程式啟動後,首先搜尋附近的藍牙裝置,搜尋過程完成以後,將其裝置的名字和藍芽地址顯示在下拉式清單中,然後就可以進行雙向的訊息發送和接收了。程式運行介面如1所示:
圖1:WM5和WM6上的程式運行介面
需要注意的是,在設定藍芽的時候,如果沒有將“對其他裝置可見”選項打上勾,即只是將藍芽開啟,如2所示:
圖2:藍芽處於開啟狀態
可能無法正常通訊,應用程式會提示無法發送訊息。選中“對其他裝置可見”之後,就能夠正常通訊了,如3所示:
圖3:藍芽處於可見狀態
參考連結:
使用C#來開發.NET CF 藍芽通訊模組
Bluetooth Connection in Windows Mobile 5.0 using InThehand - C#
Bluetooth Simulation in C# with Serial Ports