WinCE串口蓝牙的实现 .
??? 先說一下我的硬件環境:CSR BC4 ROM藍牙芯片,S3C6410,WinCE6.0系統。
??? 硬件連接:把藍牙的RX,TX,CTS,RTS和板子上的相應口連接,注意是交叉連接,我這里連接的是UART1。還有就是給藍牙供電,地,天線等。
??? 硬件連接好之后,給藍牙上電,先來搜一把?我當初就是這么干的,我的目的是想驗證一下藍牙有沒有接好之類的,掏出手機一搜,結果什么也沒有搜到,當時我很郁悶,但是今天回頭來想想,認為當時什么也沒搜到才算是正常的,如果當時能搜到這個藍牙,那么,估計這個藍牙在系統上也不會被認到了(指的是想在系統的控制面板里面,使用CE自帶的藍牙進行搜索配對等操作)。
??? 好了,現在也搜不到藍牙,也不能驗證模組有沒有接好,還是不管那么多了,下面開始上軟件,用軟件來驗證。首先來實現讓系統認到這個硬件(使用CE自帶的程序進行搜索配對等)。
??? 1、請先到http://lailzhihou.download.csdn.net/這里下載藍牙驅動,這個驅動編譯后會生成一個bthbcsp.dll的文件。
??? 2、把該驅動加到你的BSP包里面,便于編譯。
??? 3、在Platform.reg文件中添加如下的注冊表項目:
[HKEY_LOCAL_MACHINE/Software/Microsoft/Bluetooth/Transports/BuiltIn/1]
? "driver"="Bthbcsp.dll"
? "flags"=dword:4
? "name"="COM2:"
? "baud"=dword:1C200
? "FlashChip"=dword:0
? "Priority256"=dword:84
? "PacketSize"=dword:C0
?"SerialTimeoutConstant"=dword:5
?"SerialIntervelTimeout"=dword:ffffffff
?"ReopenDelay"=dword:64
? "resetdelay"=dword:1388
??? 這里最關鍵的就是
"name"="COM2:"
? "baud"=dword:1C200
??? 兩項,"name"="COM2:"這個是到時候驅動會使用這個名字的串口和藍牙硬件通信,結合前面我的硬件連接,我的硬件是連接在UART1上,所以,我的系統中有把UART1這個串口設定為“COM2“,當然,這個名字是可以改的,但是必須要保證這里的,"name"=?這個的名字要和你連接的UART上映射的串口名字一樣就可以。
??? "baud"=dword:1C200,這個很明顯是在指定串口的波特率,十六進制表示,我這里設定的是115200,設定這個波特率的原因是,我藍牙模塊的默認波特率是115200,也就是說,這里設定的波特率應該要和你的藍牙模塊的默認波特率一樣。原因是:驅動在加載的時候,首先會使用這里設定的波特率打開串口,和模塊通信,此時,驅動會給模塊進行初始化操作,會使用到一系列的PSKey值。模塊只有在經過了這個初始化操作之后,才會開始工作。當然可以再這個PSKey的設置中更改模塊的波特率,這樣就可以提高藍牙的傳送速度等,關于這點我講在后面來講述,首先還是把這個波特率設定為你的藍牙模塊的默認波特率。
??? 4、在Platform.bib文件中加入類似:
bthbcsp.dll???? $(_FLATRELEASEDIR)/bthbcsp.dll???? NK? SHK
PSConfig.psr???????????????? $(_FLATRELEASEDIR)/PSConfig.psr ? ?????????? NK?? ?U
這樣的信息。
??? 5、添加組件,這里,使用系統在創建工程時候默認添加的組件即可:
????? a、core os->cebase->communication service and networking->networking-personal area network(PAN)->bluetooth->Bluetooth profiles support->Bluetooth HS/HF and Audio Gateway
???? b、core os->cebase->communication service and networking->networking-personal area network(PAN)->bluetooth->Bluetooth Protocol Stack with Transport Driver Support->Bluetooth Stack with Universal Loadable Driver
?????? 注意:在b這個同級目錄下的組件,只添加這一個,其它的請不要添加。
??? 6、編譯系統,下載NK,如果不出意外,那么此時你就可以再系統的控制面板中搜索和配對藍牙了。
?????? 如果運氣不好,沒反應,那么可以從以下幾個方面著手查找,先確認相應的DLL和注冊表文件是否有加入到系統中。查找驅動是否有加載(bthbcsp.dll)正常情況下,次驅動被加載,會跑到HCI_BCSP.cpp文件的HCI_OpenConnection函數中去,所以可以再這個函數中加上打印看看,是否有跑進來。如果跑進來了,而沒有成功,那么請跟進看看跑到哪里就失敗退出了之類的,以我的板子上為例,我的在打開串口后進行串口配置的時候就有個地方失敗了,所以我在提供的驅動中也是屏蔽了這里的,具體的位置在HCI_BCSP.cpp文件的OpenConnection函數中:
#if 0
??? if (!SetupComm (serialPortHandle, serialBufferSize, serialBufferSize))
?{
??RETAILMSG(1, (TEXT("SetupComm/r/n")));
??IFDBG(DebugOut(DEBUG_BCSP_ERROR, TEXT("<BcspCommunication::OpenConnection@%s> UNABLE TO SET BUFFERS"), name));
??return GetLastError();
?}
#endif
???? 這里可以根據你的具體情況放開試試。
???? 另外提醒一下:請在每次重啟系統前的時候,最好給模塊進行重新上電的操作!!!
?
???? 如果順利的話,此時,你已經可以搜索配對了,但這還不夠,我們還需要傳送文件看看,這個需要加入OBEX組件:
?? Core OS->CEBASE->Applications and Services Development->Object Exchange Protocol(OBEX)
?????依次展開這個目錄下的所有子項,并添加它們。?添加后編譯NK就可以傳送文件了。
???? 如果,在這里你出現了這樣的現象,就是當下載完NK之后的第一次系統啟動后,可以傳送文件,一切都很正常,但是當重啟之后,就不能傳送文件了,在手機端老是提示連接失敗,那么可以嘗試在Platform.reg文件中加入如下注冊表信息嘗試:
[HKEY_LOCAL_MACHINE/Services/OBEX]
? "FriendlyName"="OBEX"
?"DLL"="OBEXSrVr.dll"
?"Keep"=dword:1
;?"Order"=dword:9
?"Order"=dword:A
? "Prefix"="OBX"
? "Index"=dword:0
這里是把OBEX這個驅動的啟動順序靠后了。
??? 另外:
[HKEY_LOCAL_MACHINE/Software/Microsoft/Obex/Services/{00000000-0000-0000-0000-000000000000}]
??? ;"BaseDir"="//My Documents//DefaultInbox"
??? "BaseDir"="//NandFlash//DefaultInbox"
??? "Server"="obexinbx.dll"
這段信息可以設定保存文件時候的默認路徑。
?
??? 如果一切順利,到這里你已經可以隨心所欲的傳送文件了,但是,可能此時你會覺得傳送的速度太慢了,要提高傳送的速度就需要設定更高的通信波特率。這里需要涉及到修改2個地方,一個是PSConfig.psr文件,這個文件是一個配置文件,用于來初始化藍牙芯片。打開這個文件,里面有一些地址和值的配置,這里只需要修改波特率這一項即可:&01be=01d8,后面的01d8表示速度(默認的115200,和我的藍牙模塊的默認波特率一樣),修改這個為你想要速度即可,注意這個的速度的修改應該參考一下的公式來進行換算:??
??? 修改完這個地方,還需要修改驅動中的打開串口的波特率。在HCI_BCSP.cpp文件中,HCI_OpenConnection函數中,有:
result = bcspCommunication.OpenConnection(szComPortName, dwBaud, dwDefaultPacketSize, dwThreadPriority, TRUE);
把這里的dwBaud參數,修改為你在上面PSCONfig.psr文件中設定的波特率一樣的即可。此時還應該在OpenConnection函數中開啟硬件控制(波特率太高的情況下)。
???? 修改這2個地方之后,重新編譯,下載NK,注意這里在下載NK的時候,一定要做到給藍牙復位,或重新上電。否則,你會發現連接不上藍牙了。
???? 如果你的串口驅動足夠OK的話,那么此時你的速度應該會提升到你設定的(串口速度/8/2)K/s,很遺憾的是我的速度并沒有提升,估計是我的串口驅動不夠強,沒有使用上硬件控制流的功能.....
?
???? 至此,完成了一個最基本的文件傳送的藍牙的設置,如果希望兩個藍牙之間使用文本數據的方式來通信,可以采用Socket的方式來進行,在下載的文件中有2個別人寫的示例程序(在此感謝原作者),一個是CE上的Socket方式的通信,一個是PC上的藍牙程序。另外,在PC上進行藍牙的Socket開發的時候,你可能還需要先安裝一個XP SP2的SDK,然后才可以進行開發。
Baud?rate?=?pskey_value/0.004096
這里還列有一些典型的速度值:
?
38k4?baud?-?157?(0x009d)
57k6?baud?-?236?(0x00ec)
115k2?baud?-?472?(0x01d8)
230k4?baud?-?944?(0x03b0)
460k8?baud?-?1887?(0x075f)
921k6?baud?-?3775?(0x0ebf)
1382k4?baud?-?5662?(0x161e)
?
http://blog.csdn.net/lailzhihou/article/details/5817994總結
以上是生活随笔為你收集整理的WinCE串口蓝牙的实现 .的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wince下实现GPRS上网,程序控制拨
- 下一篇: 蓝牙PSKEY的调整