1. 程式人生 > >Bluez除錯工具hcitool與gattool的使用例項

Bluez除錯工具hcitool與gattool的使用例項

Bluez協議棧在安裝完以後,會提供兩個命令列除錯工具,hcitool與gattool,我們可以根據提供的工具來輕鬆的除錯我們的藍芽裝置。
當然

需要注意的是,在除錯BLE裝置時,需要獲得root許可權。

藍芽裝置的開啟與關閉

首先,檢視在使用hci工具時,我們需要檢視當前能夠識別的藍芽裝置,這裡我們需要使用的工具是hciconfig命令,該命令如ifconfig一樣,可以控制藍芽裝置的開啟與關閉,在預設情況下,藍芽裝置在插入host時是不會自動開啟的,所以我們在除錯之前要先開啟裝置。

如果我們需要檢視藍芽裝置的話:

$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
    BD Address: 00
:02:72:14:27:0E ACL MTU: 1021:8 SCO MTU: 64:1 DOWN RX bytes:2715 acl:1 sco:0 events:146 errors:0 TX bytes:2500 acl:0 sco:0 commands:133 errors:0

會輸出以上內容,我們可以看到藍芽裝置的編號為hci0,這是host分配給裝置的ID,我們用來啟動或關閉裝置也是需要該ID來控制。

開啟與關閉裝置:

#裝置開啟
sudo hciconfig hci0 up
#裝置關閉
sudo hciconfig hci0 down

hcitool命令及引數

在開啟藍芽裝置以後,就可以使用hcitool工具集對藍芽進行控制,工具集引數 分為兩部分,一為正常的藍芽裝置除錯,二為低功耗即BLE裝置, 工具引數如下:

$  hcitool                                                      
hcitool - HCI Tool ver 4.93
Usage:
        hcitool [options] <command> [command parameters]
Options:
        --help  Display help
        -i dev  HCI device
Commands:
        dev     Display local devices
        inq     Inquire remote devices
        scan    Scan
for remote devices name Get name from remote device info Get information from remote device spinq Start periodic inquiry epinq Exit periodic inquiry cmd Submit arbitrary HCI commands con Display active connections cc Create connection to remote device dc Disconnect from remote device sr Switch master/slave role cpt Change connection packet type rssi Display connection RSSI lq Display link quality tpl Display transmit power level afh Display AFH channel map lp Set/display link policy settings lst Set/display link supervision timeout auth Request authentication enc Set connection encryption key Change connection link key clkoff Read clock offset clock Read local or remote clock lescan Start LE scan lewladd Add device to LE White List lewlrm Remove device from LE White List lewlsz Read size of LE White List lewlclr Clear LE White list lecc Create a LE Connection ledc Disconnect a LE Connection lecup LE Connection Update For more information on the usage of each command use: hcitool <command> --help

官方資料 參考資料

命令 說明 呼叫方式
引數
–help 進入幫助 hcitool –help
-i 在host插有多個藍芽介面卡的情況下,可以通過該引數來指定某控制某一介面卡 hcitool -i [dbaddr] [command]
命令 下面的命令是普通藍芽裝置,不需要sudo
dev 同hciconfig一樣,顯示當前介面卡裝置,輸出格式為[hciid MAC] hcitool dev
inq 查詢可發現的遠端裝置,與scan不同的是,除了能查詢出MAC以外,還可以查出遠端裝置的時鐘偏移值“clock offset”與裝置型別“class”,scan是不會輸出相關裝置的型別,這可以讓我們區分裝置是藍芽耳機,或藍芽滑鼠 hcitool inq
hcitool inq [–length=N]設定最大查詢時間
hcitool inq [–numrsp=N]設定最大查詢數量
hcitool inq [–iac=lap]指定查詢的lac碼
hcitool inq [–flush]清除快取
scan 查詢可發現的遠端裝置,與inq不同的是,除了能查詢出MAC以外,還可以輸出裝置的名字【名字寫在標準的module中,若查詢不到該key對應的values則會輸出N/A】,可以通過設定引數來獲取裝置的型別,資訊等 hcitool scan
hcitool scan[–length=N]設定最大查詢時間
hcitool scan[–numrsp=N]設定最大查詢數量
hcitool scan[–iac=lap]指定查詢的lac碼
hcitool scan[–class]查詢裝置型別
hcitool scan[–info]查詢裝置資訊
hcitool scan[–oui]查詢裝置唯一標識
hcitool scan[–flush]清除快取
name 通過指定MAC地址來獲取裝置的名稱,該命令可以補全inq查詢時無法輸出裝置名稱的問題. hcitool name [dbaddr]
info 通過指定MAC地址來獲取裝置的相關資訊。 hcitool info [dbaddr]
spinq 開啟定期查詢,使裝置被發現,沒有則無輸出 hcitool spinq
epinq 關閉定期查詢,沒有則無輸出 hcitool epinq
cmd 向遠端裝置傳送命令 hcitool cmd < ogf > < ocf > [parameters]
con 顯示當前連線資訊 hcitool con
cc 連線裝置,可以設定資料型別,與主從關係 hcitool cc < bdaddr >
hcitool cc [–ptype=pkt_types] < bdaddr > 可以設定接收資料的型別,資料型別包括[DM1, DM3, DM5,DH1,DH3,DH5, HV1, HV2, HV3],可以設定多個型別,型別中間以逗號分隔,預設接收所有型別資料
hcitool cc [–role=m/s] < bdaddr >可以設定裝置的主從關係,M為master,S為slave,預設為s
Example: hcitool cc –ptype=dm1,dh3,dh5 01:02:03:04:05:06
cc –role=m 01:02:03:04:05:06
dc 斷開遠端裝置連線 hcitool dc < bdaddr > [reason]
sr 設定裝置的主從關係 hcitool sr < bdaddr > < role >
cpt 設定遠端裝置資料型別 hcitool cpt < bdaddr > < packet_types >可以設定接收資料的型別,資料型別包括[DM1, DM3, DM5,DH1,DH3,DH5, HV1, HV2, HV3],可以設定多個型別,型別中間以逗號分隔
rssi 顯示裝置的訊號強度 hcitool rssi < bdaddr>
lq 顯示裝置的鏈路質量 hcitool lq < bdaddr>
tpl 顯示裝置的發射功率級別 hcitool tpl < bdaddr> [type]
afh 顯示裝置的AFH(適應性跳頻)的通道地圖 hcitool afh < bdaddr>
lp 設定或顯示裝置的鏈路 hcitool lp < bdaddr> [link policy]
lst 設定或顯示連線超時時間,預設情況下連線超時斷開連線為20s可以設定超時時間來縮短超時斷開連線的時間 hcitool lst < bdaddr> [new value in slots]
auth 請求裝置配對認證 hcitool auth < bdaddr>
enc 設定連線加密,同樣可以關閉連線加密 hcitool enc < bdaddr> [encrypt enable]
key 更新與遠端裝置的link key hcitool key < bdaddr>
clkoff 讀取遠端裝置的時鐘偏移量,不過這個變數不太靠譜 hcitool clkoff < bdaddr>
clock 讀取本地時鐘或遠端裝置的時鐘 hcitool clock [bdaddr] [which clock]
BLE裝置命令 以下命令需要root許可權才能執行
lescan 搜尋BLE裝置 hcitool lescan
hcitool lescan[–privacy]啟用隱私搜尋
hcitool lescan [–passive]預設引數,設定被動掃描
hcitool lescan [–discovery=g/l] 設定搜尋條件為綜合裝置或限制裝置
hcitool lescan [–duplicates]過濾重複的裝置
lewladd 將裝置加入BLE白名單 hcitool lewladd [–random] < bdaddr>可宣告該裝置的MAC地址為隨機地址,有的BLE裝置可以被設定為隨機MAC地址以增加私密性,為以後也能連線到該MAC地址,需要宣告MAC地址是隨機,這樣才能用舊的MAC地址連線到裝置
lewlrm 將裝置移除BLE白名單 hcitool lewlrm < bdaddr>
lewlsz 輸出白名單裝置列表 hcitool lewlsz
lewlclr 清空白名單列表 hcitool lewlclr
lecc 連線BLE裝置 hcitool lecc < bdaddr>
hcitool lecc [–random] < bdaddr>隨機MAC地址連線
hcitool lecc –whitelist 連線所有白名單裝置
ledc 斷開BLE裝置的連線。在通過lecc連結後,hci工具會隨機分配給該裝置一個handle名,斷開連線時需要使用該handle,因為在藍芽4.0以後,一個藍芽介面卡可以連線7個BLE裝置 hcitool ledc < handle> [reason]
lecup 更新BLE裝置的連線及狀態 hcitool lecup [Options]
Options:
-H, –handle < 0xXXXX>指定更新狀態的BLE裝置Handle,在通過lecc連結後,hci工具會隨機分配給該裝置一個handle名
-m, –min < interval> 設定裝置藍芽的休眠時間與–max聯合使用,設定的區間為: 0x0006~0x0C80
-M, –max < interval> 設定例項【hcitool lecup –handle 71 –min 6 –max 100】
-l, –latency < range> 設定BLE資料傳輸速率,區間為: 0x0000~0x03E8
-t, –timeout < time> N * 10ms 設定裝置超時等待時間,區間為 0x000A~0x0C80
備註: min/max引數區間為7.5ms到4s,誤差在1.25ms,timeout的區間為100ms到32s

gattool命令及其引數

使用hcitool是為了對裝置的連線進行管理,那麼對BLE資料進行精細化管理的話,就需要用到gattool,使用gattool對藍芽裝置傳送指令的操作上要比hcitool的cmd齊全很多,關於gattool的使用分為兩種,一種直接使用引數對藍芽裝置進行控制,二就是使用-I引數進入gattool的interactive模式對藍芽裝置進行控制。

首先,看一下gattool的引數:

# gattool -h

Usage:
  gatttool [OPTION...]

Help Options:
  -h, --help                                Show help options
  --help-all                                Show all help options
  --help-gatt                               Show all GATT commands
  --help-params                             Show all Primary Services/Characteristics arguments
  --help-char-read-write                    Show all Characteristics Value/Descriptor Read/Write arguments


Application Options:
  -i, --adapter=hciX                        Specify local adapter interface
  -b, --device=MAC                          Specify remote Bluetooth address
  -t, --addr-type=[public | random]         Set LE address type. Default: public
  -m, --mtu=MTU                             Specify the MTU size
  -p, --psm=PSM                             Specify the PSM for GATT/ATT over BR/EDR
  -l, --sec-level=[low | medium | high]     Set security level. Default: low
  -I, --interactive                         Use interactive mode

具體含義如下:

引數 說明 呼叫方式
-i 指定介面卡 gatttool -i < hciX> -b < MAC Address>
-b 指定遠端裝置,在連線多個裝置的情況下需要指定控制某一裝置 gatttool -b < bdaddr>
-t 指定裝置的型別,是開放裝置還是私密裝置 gatttool -b < MAC Address> -t [public/random]
-m 設定資料包長度 -m MTU
–sec-leve 設定資料傳送級別,預設情況下是low,需要高頻發射資料的情況下需要將級別設定為high,但相應的耗電會上升 gatttool -b < MAC Address> -l [low/medium/high]
-I 進入interactive模式 gatttool -b < MAC Address> -I
以下引數可以直接在interactive模式下使用,也可以在命令列直接使用
–primary 尋找BLE中可用的服務 gatttool -b < MAC Address> –primary
–characteristics 檢視裝置服務的特性,其中handle是特性的控制代碼,char properties是特性的屬性值,char value handle是特性值的控制代碼,uuid是特性的標識。 gatttool -b < MAC Address> –characteristics
–char-desc 配合檢視服務特性使用,可以檢視該裝置所有服務特性的值,該值型別為鍵值對 gatttool –b < MAC Address> –char-desc [–uuid 0x000]可以通過設定UUID來檢視某一特性的值
–char-write 更新特性的值,該更新類似於鍵值對,一個uuid匹配一個value gatttool -b –char-write –uuid [0x000] –value [0]
–char-write-req 讀取notifications裡的內容,可以設定listen來開啟監聽否則每次只讀一次,監聽讀取notifications時需要向該handle寫入一個1,在命令列中16進位制的表示為0100,若向該handle寫入0200的話則改為讀取indications的內容 gatttool -b < MAC Address> –char-write-req –handle=0xXXXX –value=0100 –listen
完整示例: gatttool -i hci0 -b aa:bb:cc:dd -t random –char-write-req -a 0x0039 -n 0100 –listen

相關推薦

Bluez除錯工具hcitoolgattool的使用例項

Bluez協議棧在安裝完以後,會提供兩個命令列除錯工具,hcitool與gattool,我們可以根據提供的工具來輕鬆的除錯我們的藍芽裝置。 當然 需要注意的是,在除錯BLE裝置時,需要獲得root許可權。 藍芽裝置的開啟與關閉 首先,檢視在使用h

藍芽除錯工具hcitool的使用例項

  這個工具據說是基於BlueZ的,但是Android4.2以後不再採用BlueZ取而代之的是BlueDroid,具體詳見《Android 4.2藍芽介紹-Android中的Bluetooth》。但是一般解決方案中都是兩手準備,在正常使用的時候是BlueDroid,而在除錯

《wiki官網教程》 4 視覺化除錯工具

一、儲存和回放資料 1、錄製資料(通過建立一個bag檔案) 記錄ROS系統執行時的話題資料,記錄的話題資料將會累積儲存到bag檔案中。 1、Terminal 1: $ roscore Terminal 2: $ rosrun turtlesim turtlesim_node

微信小程式小白總結全攻略2-學習路線相關資源和除錯工具

廢話都在前一章講了,這裡直接切入正題。 下面以我自己的微信小程式全棧學習路線(淺嘗輒止式的),按照時間順序往下依次列出,並附上對應的除錯工具和方法、學習資源以及我的評價 一、前端部分 (一)HTML(超文字標記語言:HyperText Markup Language) 除錯工具:

Vue開發除錯工具--除錯工具

主要講三個東西: Vue.js devtools開發工具的使用 使用debugger和sourcemap除錯Vue元件 vscode中除錯Vue元件 Vue.js devtools開發工具的使用

Redis Lua程式設計除錯工具使用

前言 Redis自2.6.0版本開始內建Lua直譯器。 Lua,輕量級指令碼語言,號稱最快的指令碼語言。 兩者結合將爆發出巨大的威力。 簡介 Redis Lua指令碼可以呼叫原生的Redis命令,也可以包含自定義的控制流、邏輯運算、數學運算等,將複雜的業務邏輯封

arm-linux-gdb除錯工具的安裝交叉編譯gdbserver

arm-linux-gdb除錯工具的安裝與交叉編譯gdbserver 分類:嵌入式 開發環境:LPC3250 開發板:安裝linux2.6.39; 交叉編譯工具:arm-none-linux-gnueabi-gcc pc的虛擬機器:Linux version 2.6.32.

arm-linux-gdb & gdbserver 遠端除錯工具的搭建使用

     由於嵌入式系統資源有限性,一般不能直接在ARM上進行除錯,通常採用arm-linux-gdb+gdbserver的方式進行遠端除錯。Target端(ARM)使用 Gdbserver,host端(PC主機)使用arm-linux-gdb,雙方最好統一編譯工具鏈。在應用

Linux下的C/C++開發除錯工具

  Linux開發環境相當完善,且功能完整,它主要由GNU的編譯器和庫,以及大量的系統例程及庫組成,能夠支援C++、C和組合語言程式,重點是針對C++和C語言。因為Linux的原始碼主要是用C語言實現的,開發人員可以方便地獲取並進行修改和重新編譯,因此為Linux作業系統提供

Ibatis程式碼自動生成工具——Abator安裝應用例項(圖解)

使用也比較簡單,以下做個例項來介紹: 一、環境準備 我的環境:Eclipse SDK  Version: 3.5.2                JDK1.6                Oracle9i 二、外掛安裝 1、點選"Help>In

Makefile管理工具GDB除錯工具學習筆記

一、Makefile專案管理工具: 1、用途: ①專案程式碼編譯管理 ②節省編譯專案時間 ③一次編寫終身受益 2、規則記錄: (1)、三要素: 目標、依賴、命令,格式如下: 目標:依賴(條件) 命令 /*注意:命令前有一

MapReduce程式除錯工具--MRUnit簡介使用

MRUnit簡介:         當hadoop的MapReduce作業提交到叢集環境中執行,對於出問題的定位比較是比較麻煩的,有時需要一遍遍的修改程式碼和打印出日誌來排查一個很小的問題,如果資料量大的話除錯起來相當耗時間。因此有必要使用良好的單元測試手段來儘早的消除

ubuntu 下串列埠除錯工具 minicom安裝配置

      如果專案中使用的bootloader為 u-boot,那麼在用minicom向目標板傳送kernel時 會發生一些錯誤。故若您使用的是u-boot,建議您使用kermit,關於kermit的安裝和配置 使用請參考這篇文章:     儘管與u-boot的組合中

遠程連接工具puttymtputty

-c end 多個 rlogin log gree plus 工具 googl PuTTY是一個Telnet、SSH、rlogin、純TCP以及串行接口連接軟件 官網 http://www.chiark.greenend.org.uk/~sgtatham/putty/ pu

Postman工具——請求響應

true 數據類型 json 一個數 head 預覽效果 1.7 rep margin 兩個內容: Request 請求和 Response 響應,下面就開始了。 一、Request 請求 Request 請求,我們只介紹常用的四種:GET、POST、PUT、DELETE,

rsync同步工具介紹使用

多選 文件信息 工具 源文件 指定 應用 表示 logs 快速 一、rsync同步工具介紹與使用 rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳

Saltstack自動化運維工具 實戰部署

caf 主動推送 n-k 分鐘 啟動服務 ade 個人觀點 ots 處理 自動化工具比較Puppet也許是四款工具中最深入人心的。就可用操作、模塊和用戶界面而言,它是最全面的。Puppet呈現了數據中心協調的全貌,幾乎涵蓋每一個運行系統,為各大操作系統提供了深入的工具。初始

版本管理工具gitsvn簡介

clear 碼代碼 check fig 常用指令 ons 自己的 開發 1.0 版本管理工具 版本管理工具簡介 常見版本管理工具 cvs(Concurrent Versions System) vss(Visual SourceSafe) svn 常用的版本管理工具 g

JAVA多線程提高十:同步工具CyclicBarrierCountDownLatch

將在 con 構造方法 interrupt getc bool 區別 成績 tco 今天繼續學習其它的同步工具:CyclicBarrier與CountDownLatch 一、CyclicBarrier CyclicBarrier是一個同步輔助類,它允許一組線程互相等待,

常用網絡工具認識使用

mar 設定 字段 固定ip 紅色 五類 選擇 p地址 並排 常用的網絡工具包括:網線測試儀,光功率計,光模塊認識,網線制作,IP-KVM 還有光纖擴容器,多功能查線儀等 現在主要要認識:網線測試儀,光功率計和IP-KVM的這三類機房常用工具的使用方法 1.網線測試儀定義: