Bluez相關的各種tools的使用(主要用到hcidump)

在這一段折騰Bluez的時間裏,越來越發現Bluez相關的許多工具做得還是挺好用的,主要在Bluez-utils/tools 目錄下。只是有一點讓我很遺憾,除了man以外很難找到更多的幫助文檔,而man文檔本身對一些功能的描述也不是很詳細。

其中有些選項,如果你不瞭解藍牙協議棧,或者沒有查閱過相關藍牙芯片的一些文檔,很難搞明白是什麼意思,甚至有些選項的具體參數值的設定,如果不讀源碼你都無從得知有哪些備選值。。。。

 

能力有限,下面所寫的只是我所用過的有限的幾個工具的一些使用經驗,希望能有所幫助。

7.1        Bccmd
Bccmd是用來和CSR的芯片進行BCCMD(Bluecore command protocol)通訊的一個工具。BCCMD並非藍牙協議棧的標準,而是CSR芯片的專屬協議

Bccmd的調用格式爲:bccmd [-t <transport>] [-d <device>] <command> [<args>]

 

Tansport類型包括 HCI USB BCSP H4等,常用的估計就是HCI和BCSP兩種。需要注意一下他們的使用場合:

HCI是一個抽象的標準的藍牙通訊接口,在基於HCI協議調用BCCMD時,需要在Bluez已經建立好hci接口的基礎上使用。

BCSP(Bluecore Serial Protocol)是CSR自己制定的傳輸層協議,主要目的是用來加強在沒有使用CTS、RTS進行流量控制的情況下進行可靠的數據傳輸的能力。其概念是相對H3 , H4而言,( 具體分析,請參考下面雜項一章中相應的小節 )

 

BCCMD的主要用途就是用來讀寫pskey,這裏以 psset 這個command來介紹一下格式:

Psset 格式如下: psset [-r] [-s <stores>] <key> <value>

其它都好理解,關鍵是-s參數之後跟的store具體的含義。這個參數可以是數值也可以是字符串

查詢CSR的BCCMD相關的文檔,可以找到具體的含義如下:

 

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的藍牙芯片中,PSKEY可能存儲在 rom flash eeprom ram等介質裏,這裏的數值指明瞭psset/get命令操作PSKEY時所針對的存儲介質及其優先順序,通常我們會用 –s 0x0 或 –s “default” 來使用該命令,0x0的含義與0xf一樣。

 

值得注意的是,哪個參數是有效的,還取決於哪一類的存儲介質實際存在於藍牙芯片中,此外,只讀類的介質對寫操作類的命令也是無效的。

 

基本上來說,所修改的都是位於psram中的pskey,此外,pskey修改以後要起作用,還要一併使用 –r參數,或直接用warmreset命令將藍牙芯片進行warm reset。

 

 

7.2        Hciattach
Hciattach主要用來初始化藍牙設備,它的命令格式如下:

 

hciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]

 

其中最重要的參數就是 type和speed,type決定了要初始化的設備的型號,可以使用 hciattach –l 來列出所支持的設備型號。

並不是所有的參數對所有的設備都是適用的,有些設備會忽略一些參數設置,例如:查看hciattach的代碼就可以看到,多數設備都忽略bdaddr參數。

 

Hciattach命令內部的工作步驟是:首先打開制定的tty設備,然後做一些通用的設置,如flow等,然後設置波特率爲 initial_speed,然後根據type調用各自的初始化代碼,最後將波特率重新設置爲speed。所以調用hciattach時,要根據你的實際情況,設置好initial_speed和speed。

 

對於type BCSP來說,它的初始化代碼只做了一件事,就是完成BCSP協議的同步操作,它並不對藍牙芯片做任何的pskey的設置。同步操作的具體流程和規範可以參考CSR的相關文檔: BCSP Link Establishment Protocol

 

7.3        其它
下面幾個,使用了,但是沒有太多研究

7.3.1          Hcidump
Hcidump不在bluez-utils包裏,而是在單獨的hcidump包裏。主要用來分析捕獲和分析HCI數據包,如果使用bluez過程中出了什麼問題,用hcidump往往可以發現一些出錯的線索,原因。 參數很多,基本上hcidump –X –V 就可以幫你獲得詳細的經過格式解析的數據包。

7.3.2          Hcitool
主要用hcitool來scan遠端的設備,顯示設備地址,名稱等。

例如:Hcitool scan, hcitool inq

 

7.3.3          Sdptool
主要用來瀏覽遠端設備SDP服務,或者管理本地的SDPD維護的數據庫。

常用的應該就是查找遠端設備的服務了

例如:

sdptool browse 00:02:72:B0:00:26 瀏覽地址爲00:02:72:B0:00:26的設備所提供的服務

sdptool search 0x1112 00:02:72:B0:00:26 查找地址爲00:02:72:B0:00:26的設備上的Headset Audio Gateway服務。

 

./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)

。。。

 

7.3.4          Hciconfig
這個就不用多說了,格式上很類似於ifconfig,用來設置HCI設備的參數

例如

hciconfig hci0 up 啓動hci0接口

hciconfig hci0 iscan 使能位於hci0接口的藍牙芯片的inquery scan模式(使得設備能被其它藍牙設備發現)

發佈了24 篇原創文章 · 獲贊 19 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章