此篇文章用於說明如何在wince系統上實現串列埠藍芽,希望給想在ce上實現這個功能的「新手」朋友乙個幫助。
先說一下我的硬體環境:csr bc4 rom藍芽晶元,s3c6410,wince6.0系統。
硬體連線:把藍芽的rx,tx,cts,rts和板子上的相應口連線,注意是交叉連線,我這裡連線的是uart1。還有就是給藍芽供電,地,天線等。
硬體連線好之後,給藍芽上電,先來搜一把?我當初就是這麼幹的,我的目的是想驗證一下藍芽有沒有接好之類的,掏出手機一搜,結果什麼也沒有搜到,當時我很鬱悶,但是今天回頭來想想,認為當時什麼也沒搜到才算是正常的,如果當時能搜到這個藍芽,那麼,估計這個藍芽在系統上也不會被認到了(指的是想在系統的控制面板裡面,使用ce自帶的藍芽進行搜尋配對等操作)。
好了,現在也搜不到藍芽,也不能驗證模組有沒有接好,還是不管那麼多了,下面開始上軟體,用軟體來驗證。首先來實現讓系統認到這個硬體(使用ce自帶的程式進行搜尋配對等)。
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這個同級目錄下的元件,只新增這乙個,其它的請不要新增。
如果運氣不好,沒反應,那麼可以從以下幾個方面著手查詢,先確認相應的dll和登錄檔檔案是否有加入到系統中。查詢驅動是否有載入(bthbcsp.dll)正常情況下,次驅動被載入,會跑到hci_bcsp.cpp檔案的hci_openconnection函式中去,所以可以再這個函式中加上列印看看,是否有跑進來。如果跑進來了,而沒有成功,那麼請跟進看看跑到**就失敗退出了之類的,以我的板子上為例,我的在開啟串列埠後進行串列埠配置的時候就有個地方失敗了,所以我在提供的驅動中也是遮蔽了這裡的,具體的位置在hci_bcsp.cpp檔案的openconnection函式中:
#if 0
if (!setupcomm (serialporthandle, serialbuffersize, serialbuffersize))
#endif
這裡可以根據你的具體情況放開試試。
如果順利的話,此時,你已經可以搜尋配對了,但這還不夠,我們還需要傳送檔案看看,這個需要加入obex元件:
依次展開這個目錄下的所有子項,並新增它們。 新增後編譯nk就可以傳送檔案了。
[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/]
;"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函式中開啟硬體控制(波特率太高的情況下)。
如果你的串列埠驅動足夠ok的話,那麼此時你的速度應該會提公升到你設定的(串列埠速度/8/2)k/s,很遺憾的是我的速度並沒有提公升,估計是我的串列埠驅動不夠強,沒有使用上硬體控制流的功能.....
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)
本文出自:
WinCE串列埠藍芽的實現
此篇文章用於說明如何在wince系統上實現串列埠藍芽,希望給想在ce上實現這個功能的 新手 朋友乙個幫助。先說一下我的硬體環境 csr bc4 rom藍芽晶元,s3c6410,wince6.0系統。硬體連線 把藍芽的rx,tx,cts,rts和板子上的相應口連線,注意是交叉連線,我這裡連線的是uar...
WinCE藍芽驅動
1 wince藍芽驅動 2 wince藍芽學習一 wince6.0藍芽協議棧 3 wince上藍芽說明文件 4 wince藍芽應用的實現 藍芽耳機 5 基於wince作業系統的藍芽高質量音訊傳輸的實現.pdf 8 error failed reading e32 structure in modul...
Win CE串列埠通訊
今天學習了wince下的串列埠通訊實驗。現小結如下 1。裝置檔名 裝置檔名字首由3個大寫字母組成,用來標識與特殊流介面驅動程式相對應的特殊裝置檔名。檔名字首儲存在登錄檔的相應驅動程式的鍵值中。如com 序列驅動程式 acm 音訊壓縮管理器 等。2。訪問裝置驅動方法 通過createfile read...