7 Bluez相關(guān)的各種tools的使用
在這一段折騰Bluez的時(shí)間里纸镊,越來(lái)越發(fā)現(xiàn)Bluez相關(guān)的許多工具做得還是挺好用的庭再,主要在Bluez-utils/tools 目錄下做葵。只是有一點(diǎn)讓我很遺憾栏豺,除了man以外很難找到更多的幫助文檔,而man文檔本身對(duì)一些功能的描述也不是很詳細(xì)。
其中有些選項(xiàng)蠢终,如果你不了解藍(lán)牙協(xié)議棧,或者沒(méi)有查閱過(guò)相關(guān)藍(lán)牙芯片的一些文檔茴她,很難搞明白是什么意思寻拂,甚至有些選項(xiàng)的具體參數(shù)值的設(shè)定,如果不讀源碼你都無(wú)從得知有哪些備選值败京。兜喻。梦染。赡麦。
能力有限,下面所寫(xiě)的只是我所用過(guò)的有限的幾個(gè)工具的一些使用經(jīng)驗(yàn)帕识,希望能有所幫助泛粹。
<a name="head7_1"></a> 7.1 Bccmd
Bccmd是用來(lái)和CSR的芯片進(jìn)行BCCMD(Bluecore command protocol)通訊的一個(gè)工具。BCCMD并非藍(lán)牙協(xié)議棧的標(biāo)準(zhǔn)肮疗,而是CSR芯片的專(zhuān)屬協(xié)議
Bccmd的調(diào)用格式為:bccmd [-t <transport>] [-d <device>] <command> [<args>]
Tansport類(lèi)型包括 HCI USB BCSP H4等晶姊,常用的估計(jì)就是HCI和BCSP兩種。需要注意一下他們的使用場(chǎng)合:
HCI是一個(gè)抽象的標(biāo)準(zhǔn)的藍(lán)牙通訊接口伪货,在基于HCI協(xié)議調(diào)用BCCMD時(shí)们衙,需要在Bluez已經(jīng)建立好hci接口的基礎(chǔ)上使用。
BCSP(Bluecore Serial Protocol)是CSR自己制定的傳輸層協(xié)議碱呼,主要目的是用來(lái)加強(qiáng)在沒(méi)有使用CTS蒙挑、RTS進(jìn)行流量控制的情況下進(jìn)行可靠的數(shù)據(jù)傳輸?shù)哪芰ΑF涓拍钍窍鄬?duì)H3 , H4而言愚臀,( 具體分析忆蚀,請(qǐng)參考下面雜項(xiàng)一章中相應(yīng)的小節(jié) )
BCCMD的主要用途就是用來(lái)讀寫(xiě)pskey,這里以 psset 這個(gè)command來(lái)介紹一下格式:
Psset 格式如下: psset [-r] [-s <stores>] <key> <value>
其它都好理解姑裂,關(guān)鍵是-s
參數(shù)之后跟的store
具體的含義馋袜。這個(gè)參數(shù)可以是數(shù)值也可以是字符串
查詢(xún)CSR的BCCMD相關(guān)的文檔,可以找到具體的含義如下:
0x0000 Default
0x0008 psram
0x0001 psi
0x0002 psf
0x0004 psrom
0x0003 psi then psf
0x0007 psi, psf then psrom
0x0009 psram then psi
0x000b psram, psi then psf
0x000f psram, psi, psf then psrom
CSR的藍(lán)牙芯片中舶斧,PSKEY可能存儲(chǔ)在 rom flash eeprom ram等介質(zhì)里欣鳖,這里的數(shù)值指明了psset/get命令操作PSKEY時(shí)所針對(duì)的存儲(chǔ)介質(zhì)及其優(yōu)先順序,通常我們會(huì)用 -s 0x0
或 -s “default”
來(lái)使用該命令茴厉,0x0的含義與0xf一樣泽台。
值得注意的是让网,哪個(gè)參數(shù)是有效的,還取決于哪一類(lèi)的存儲(chǔ)介質(zhì)實(shí)際存在于藍(lán)牙芯片中师痕,此外溃睹,只讀類(lèi)的介質(zhì)對(duì)寫(xiě)操作類(lèi)的命令也是無(wú)效的。
基本上來(lái)說(shuō)胰坟,所修改的都是位于psram中的pskey因篇,此外,pskey修改以后要起作用笔横,還要一并使用 -r
參數(shù)竞滓,或直接用warmreset
命令將藍(lán)牙芯片進(jìn)行warm reset。
7.2 Hciattach
Hciattach主要用來(lái)初始化藍(lán)牙設(shè)備吹缔,它的命令格式如下:
hciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]
其中最重要的參數(shù)就是 type和speed商佑,type決定了要初始化的設(shè)備的型號(hào),可以使用 hciattach –l
來(lái)列出所支持的設(shè)備型號(hào)厢塘。
并不是所有的參數(shù)對(duì)所有的設(shè)備都是適用的茶没,有些設(shè)備會(huì)忽略一些參數(shù)設(shè)置,例如:查看hciattach的代碼就可以看到晚碾,多數(shù)設(shè)備都忽略bdaddr參數(shù)抓半。
Hciattach命令內(nèi)部的工作步驟是:首先打開(kāi)制定的tty設(shè)備,然后做一些通用的設(shè)置格嘁,如flow等笛求,然后設(shè)置波特率為 initial_speed,然后根據(jù)type調(diào)用各自的初始化代碼糕簿,最后將波特率重新設(shè)置為speed探入。所以調(diào)用hciattach時(shí),要根據(jù)你的實(shí)際情況懂诗,設(shè)置好initial_speed和speed蜂嗽。
對(duì)于type BCSP來(lái)說(shuō),它的初始化代碼只做了一件事响禽,就是完成BCSP協(xié)議的同步操作徒爹,它并不對(duì)藍(lán)牙芯片做任何的pskey的設(shè)置。同步操作的具體流程和規(guī)范可以參考CSR的相關(guān)文檔: BCSP Link Establishment Protocol
7.3 其它
下面幾個(gè)芋类,使用了隆嗅,但是沒(méi)有太多研究
7.3.1 Hcidump
Hcidump不在bluez-utils包里,而是在單獨(dú)的hcidump包里侯繁。主要用來(lái)分析捕獲和分析HCI數(shù)據(jù)包胖喳,如果使用bluez過(guò)程中出了什么問(wèn)題,用hcidump往往可以發(fā)現(xiàn)一些出錯(cuò)的線(xiàn)索贮竟,原因丽焊。 參數(shù)很多较剃,基本上hcidump –X –V
就可以幫你獲得詳細(xì)的經(jīng)過(guò)格式解析的數(shù)據(jù)包。
<a name="head7_3_2"></a> 7.3.2 Hcitool
主要用hcitool來(lái)scan遠(yuǎn)端的設(shè)備技健,顯示設(shè)備地址写穴,名稱(chēng)等。
例如:Hcitool scan
雌贱, hcitool inq
7.3.3 Sdptool
主要用來(lái)瀏覽遠(yuǎn)端設(shè)備SDP服務(wù)啊送,或者管理本地的SDPD維護(hù)的數(shù)據(jù)庫(kù)。
常用的應(yīng)該就是查找遠(yuǎn)端設(shè)備的服務(wù)了
例如:
sdptool browse 00:02:72:B0:00:26
瀏覽地址為00:02:72:B0:00:26的設(shè)備所提供的服務(wù)
sdptool search 0x1112 00:02:72:B0:00:26
查找地址為00:02:72:B0:00:26的設(shè)備上的Headset Audio Gateway服務(wù)欣孤。
./sdptool search 0x1112 00:02:72:B0:00:26
Class 0x1112
Inquiring ...
Searching for 0x1112 on 00:02:72:B0:00:26 ...
Service Name: Headset Audio Gateway
Service RecHandle: 0x1001d
Service Class ID List:
"Headset Audio Gateway" (0x1112)
"Generic Audio" (0x1203)
馋没。。降传。
<a name="head7_3_4"></a> 7.3.4 Hciconfig
這個(gè)就不用多說(shuō)了篷朵,格式上很類(lèi)似于ifconfig,用來(lái)設(shè)置HCI設(shè)備的參數(shù)
例如
hciconfig hci0 up
啟動(dòng)hci0接口
hciconfig hci0 iscan
使能位于hci0接口的藍(lán)牙芯片的inquery scan模式(使得設(shè)備能被其它藍(lán)牙設(shè)備發(fā)現(xiàn))