furuihai 发表于 2017-12-29 17:59:17

bluez 调试工具hcitool和gattool 调用方法及参数中文说明

hcitool命令及参数在打开蓝牙设备以后,就可以使用hcitool工具集对蓝牙进行控制,工具集参数 分为两部分,一为正常的蓝牙设备调试,二为低功耗即BLE设备, 工具参数如下:
命令说明调用方式
参数
–help进入帮助hcitool –help
-i在host插有多个蓝牙适配器的情况下,可以通过该参数来指定某控制某一适配器hcitool -i
命令下面的命令是普通蓝牙设备,不需要sudo
dev同hciconfig一样,显示当前适配器设备,输出格式为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
info通过指定MAC地址来获取设备的相关信息。hcitool info
spinq开启定期查询,使设备被发现,没有则无输出hcitool spinq
epinq关闭定期查询,没有则无输出hcitool epinq
cmd向远程设备发送命令hcitool cmd < ogf > < ocf >
con显示当前连接信息hcitool con
cc连接设备,可以设置数据类型,与主从关系hcitool cc < bdaddr >
hcitool cc [–ptype=pkt_types] < bdaddr > 可以设置接收数据的类型,数据类型包括,可以设置多个类型,类型中间以逗号分隔,默认接收所有类型数据
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 >
sr设置设备的主从关系hcitool sr < bdaddr > < role >
cpt设置远程设备数据类型hcitool cpt < bdaddr > < packet_types >可以设置接收数据的类型,数据类型包括,可以设置多个类型,类型中间以逗号分隔
rssi显示设备的信号强度hcitool rssi < bdaddr>
lq显示设备的链路质量hcitool lq < bdaddr>
tpl显示设备的发射功率级别hcitool tpl < bdaddr>
afh显示设备的AFH(适应性跳频)的信道地图hcitool afh < bdaddr>
lp设置或显示设备的链路hcitool lp < bdaddr>
lst设置或显示连接超时时间,默认情况下连接超时断开连接为20s可以设置超时时间来缩短超时断开连接的时间hcitool lst < bdaddr>
auth请求设备配对认证hcitool auth < bdaddr>
enc设置连接加密,同样可以关闭连接加密hcitool enc < bdaddr>
key更新与远程设备的link keyhcitool key < bdaddr>
clkoff读取远程设备的时钟偏移量,不过这个变量不太靠谱hcitool clkoff < bdaddr>
clock读取本地时钟或远程设备的时钟hcitool 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>
lecup更新BLE设备的连接及状态hcitool lecup
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模式对蓝牙设备进行控制。
参数说明调用方式
-i指定适配器gatttool -i < hciX> -b < MAC Address>
-b指定远程设备,在连接多个设备的情况下需要指定控制某一设备gatttool -b < bdaddr>
-t指定设备的类型,是开放设备还是私密设备gatttool -b < MAC Address> -t
-m设置数据包长度-m MTU
–sec-leve设置数据发送级别,默认情况下是low,需要高频发射数据的情况下需要将级别设置为high,但相应的耗电会上升gatttool -b < MAC Address> -l
-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匹配一个valuegatttool -b –char-write –uuid –value
–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



yuanqinhao 发表于 2017-12-29 18:01:40

:):):):):):):)
页: [1]
查看完整版本: bluez 调试工具hcitool和gattool 调用方法及参数中文说明