hcitool 工具命令如下:
# hcitool 允许用户执行各种针对蓝牙设备的操作,包括扫描设备、建立连接、获取设备信息等。用户可以根据需要使用不同的命令来管理和控制蓝牙设备。
Options:
--help: 显示帮助信息。
-i dev: 指定 HCI 设备。
Commands:
dev: # 显示本地蓝牙设备的信息。
inq: # 在远程设备上进行蓝牙设备的查询。
scan: # 扫描周围的蓝牙设备。
name: # 获取远程蓝牙设备的名称。
info: # 获取远程蓝牙设备的详细信息。
spinq: # 启动周期性的蓝牙设备查询。
epinq: # 停止周期性的蓝牙设备查询。
cmd: # 提交任意的 HCI 命令。
con: # 显示当前的蓝牙连接。
cc: # 创建到远程蓝牙设备的连接。
dc: # 与远程蓝牙设备断开连接。
sr: # 切换蓝牙连接的主/从角色。
cpt: # 更改蓝牙连接的数据包类型。
rssi: # 显示蓝牙连接的接收信号强度指示(RSSI)。
lq: # 显示蓝牙连接的链路质量。
tpl: # 显示蓝牙连接的传输功率级别。
afh: # 显示蓝牙连接的自适应频率跳变(AFH)信道映射。
lp: # 设置或显示蓝牙连接的链路策略设置。
lst: # 设置或显示蓝牙连接的链路监督超时。
auth: # 请求进行蓝牙连接的身份验证。
enc: # 设置蓝牙连接的加密。
key: # 更改蓝牙连接的链接密钥。
clkoff: # 读取时钟偏移量。
clock: # 读取本地或远程时钟。
lescan: # 开始低功耗蓝牙(LE)扫描。
leinfo: # 获取低功耗蓝牙(LE)远程设备信息。
lewladd: # 将设备添加到低功耗蓝牙(LE)白名单。
lewlrm: # 从低功耗蓝牙(LE)白名单中删除设备。
lewlsz: # 读取低功耗蓝牙(LE)白名单的大小。
lewlclr: # 清除低功耗蓝牙(LE)白名单。
lerladd: # 将设备添加到低功耗蓝牙(LE)解析列表。
lerlrm: # 从低功耗蓝牙(LE)解析列表中删除设备。
lerlclr: # 清除低功耗蓝牙(LE)解析列表。
lerlsz: # 读取低功耗蓝牙(LE)解析列表的大小。
lerlon: # 启用低功耗蓝牙(LE)地址解析。
lerloff: # 禁用低功耗蓝牙(LE)地址解析。
lecc: # 创建一个低功耗蓝牙(LE)连接。
ledc: # 断开一个低功耗蓝牙(LE)连接。
lecup: # 更新低功耗蓝牙(LE)连接。
命令有很多, 解下来介绍一些常用的命令,以供参考。
小提示:每个命令都有自己单独的帮助信息
# 例如:
hcitool dev -h
# 就会有关于这个命令的用法
dev命令:
该命令用于查询系统上有几个蓝牙设备,并显示出蓝牙设备的地址
$ hcitool dev
Devices:
hci0 5C:8A:AE:19:07:EF
inq命令:
发现周围蓝牙设备的信号
$ hcitool -ihci0 inq
Inquiring ...
12:34:56:78:9a:bc clock offset: 0x5f91 class: 0x2a410c
inq: invalid option -- 'h'
Usage:
inq
--length=N
: 指定查询的最大持续时间,以1.28秒为单位。--numrsp=N
: 指定要接收的最大查询响应数。--iac=lap
: 指定查询访问码(Inquiry Access Code)。--flush
: 刷新查询缓存。
scan 命令:
该命令就类似于手机上扫描蓝牙的功能,他会显示出蓝牙名字和设备地址
$ hcitool -i hci0 scan
Scanning ...
11:22:33:44:55:66 mybt
00:11:22:33:44:55 aaa
# 同样scan 命令也可以携带参数:
# scan [--length=N] [--numrsp=N] [--iac=lap] [--flush] [--class] [--info] [--oui] [--refresh]
`--length=N` # 表示扫描时间,留意他的描述,时间等于1.28s * N
`--class` # 还可以查询出设备的类型
`--info` # 表示显示详细信息
# 其余的参数自行尝试体验吧
name 命令:
当我们只知道设备的蓝牙地址而不知道名字的时候,可以用这个命令查询设备名
$ hcitool -i hci0 name 11:22:33:44:55:66
mybt
info 命令:
该命令需要蓝牙地址作为输入参数,它的功能是查询对应设备的详细信息
$ sudo hcitool -i hci0 info 11:22:33:44:55:66
Requesting information ...
BD Address: 88:A9:B7:E6:F1:8F
Device Name: mybt
LMP Version: (0xa) LMP Subversion: 0x4228
Manufacturer: Broadcom Corporation (15)
Features page 0: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
<3-slot packets> <5-slot packets> <encryption> <slot offset>
<timing accuracy> <role switch> <sniff mode> <RSSI>
<channel quality> <SCO link> <HV2 packets> <HV3 packets>
<u-law log> <A-law log> <CVSD> <paging scheme> <power control>
<transparent SCO> <broadcast encrypt> <EDR ACL 2 Mbps>
<EDR ACL 3 Mbps> <enhanced iscan> <interlaced iscan>
<interlaced pscan> <inquiry with RSSI> <extended SCO>
<EV4 packets> <EV5 packets> <AFH cap. slave>
<AFH class. slave> <LE support> <3-slot EDR ACL>
<5-slot EDR ACL> <sniff subrating> <pause encryption>
<AFH cap. master> <AFH class. master> <EDR eSCO 2 Mbps>
<EDR eSCO 3 Mbps> <3-slot EDR eSCO> <extended inquiry>
<LE and BR/EDR> <simple pairing> <encapsulated PDU>
<err. data report> <non-flush flag> <LSTO> <inquiry TX power>
<EPC> <extended features>
Features page 1: 0x0f 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Features page 2: 0x7f 0x07 0x00 0x00 0x00 0x00 0x00 0x00
# 信息非常全面,包括蓝牙芯片的,名称、链路管理协议的版本、制造商信息、蓝牙设备支持的特性、支持的不同速率等
cmd命令:
这个命令非常好用,它允许我们不用写代码就可以发送自己想发的任何HCI命令,我们先看下帮助信息
$ hcitool cmd --help
Usage:
cmd <ogf> <ocf> [parameters]
Example:
cmd 0x03 0x0013 0x41 0x42 0x43 0x44
从帮助信息看出,cmd
命令接收一串hex数据作为输入参数,上面给出了一个例子cmd 0x03 0x0013 0x41 0x42 0x43 0x44
我们查询蓝牙Spec可以知道,这一串数字表示设置蓝牙名字,0x41 0x42 0x43 0x44
的ascii形式是1234
,即这条命令是把本地蓝牙名称设置为1234
,我们可以试一下
$ sudo hcitool cmd 0x03 0x0013 0x41 0x42 0x43 0x44
< HCI Command: ogf 0x03, ocf 0x0013, plen 4
41 42 43 44
> HCI Event: 0x0e plen 4
01 13 0C 00
从上面看出,命令已经被成功执行了,0x0e
表示command complete event
,最有一个一个字节00
是命令的返回码,表示命令执行成功,有兴趣的还可以尝试更多的命令
con 命令:
该命令显示设备当前所有的蓝牙连接,包括经典蓝牙的连接和BLE的连接
$ hcitool -i hci0 con
Connections:
< LE 12:34:56:C2:9C:C7 handle 64 state 1 lm MASTER
cc 命令:
该命令用于创建经典蓝牙的连接
# 帮助信息如下
cc: invalid option -- 'h'
Usage:
cc [--role=m|s] [--ptype=pkt_types] <bdaddr>
Example:
cc --ptype=dm1,dh3,dh5 01:02:03:04:05:06
cc --role=m 01:02:03:04:05:06
# 以下是对cc命令中列出的参数和选项的解释:
--role=m|s: 指定连接的角色,m表示主设备(master),s表示从设备(slave)。
--ptype=pkt_types: 指定数据包类型(Packet Type),可以是dm1、dh1、dm3、dh3、dm5、dh5中的一个或多个组合。
<bdaddr>: 要连接的蓝牙设备的地址。
# 下面是一些示例用法:
#1 创建一个连接并指定数据包类型为dm1、dh3和dh5。
cc --ptype=dm1,dh3,dh5 01:02:03:04:05:06
#2 创建一个主设备角色的连接到地址为01:02:03:04:05:06的蓝牙设备。
cc --role=m 01:02:03:04:05:06
dc命令:
该命令用于断开经典蓝牙的连接
# 很简单就一个用法, 提示信息中<> 为必选参数,[] 为可选参数
# hcitool dc <bdaddr> [reason]
hcitool dc 01:02:03:04:05:06
sr命令:
该命令用于经典蓝牙切换Master/Slave
hcitool sr <bdaddr> <role>
# <bdaddr>: 蓝牙设备的地址,用于指定要设置角色的目标设备。
# <role>: 要设置的角色,可以是0(slave,从设备)或1(master,主设备)。
hcitool sr 00:11:22:33:44:55 1
lescan 命令:
该命令用于扫描周围的BLE设备,也就是低功耗蓝牙
$ sudo hcitool -i hci0 lescan
LE Scan ...
0B:0F:0C:32:31:E8 (unknown)
08:F0:B0:54:FF:FF (unknown)
08:F0:B0:54:FF:FF EDIFIER BLE
46:43:9F:23:40:83 (unknown)
46:43:9F:23:40:83 LE-OpenRun Pro
...
该命令还可以接收一些扫描参数,可以自行尝试
$ hcitool lescan --help
Usage: # 启用隐私
lescan [--privacy] enable privacy
# 设置扫描类型为被动模式,默认为主动模式(active)
lescan [--passive] set scan type passive (default active)
# 仅扫描白名单中的地址
lescan [--whitelist] scan for address in the whitelist only
# 启用一般(general)或有限(limited)的发现过程
lescan [--discovery=g|l] enable general or limited discoveryprocedure
# 不过滤重复项
lescan [--duplicates] don't filter duplicates
leinfo 命令:
该命令用于获取BLE设备的信息,它接收一个蓝牙地址作为参数输入
$ hcitool -i hci0 leinfo 12:34:56:C2:9C:C7
Requesting information ...
Handle: 70 (0x0046)
LMP Version: 5.0 (0x9) LMP Subversion: 0x321
Manufacturer: Broadcom Corporation (15)
Features: 0xff 0x00 0x00 0x08 0x00 0x00 0x00 0x00
LE白名单命令:
# 获取白名单列表大小
$ hcitool -i hci0 lewlsz
# 添加白名单
$ hcitool -i hci0 lewladd 12:34:56:C2:9C:C7
# 移除白名单
$ hcitool -i hci0 lewlrm 12:34:56:C2:9C:C7
# 清空白名单
$ hcitool -i hci0 lewlclr
BLE的连接命令:
# 连接BLE设备
$ hcitool -i hci0 lecc 12:34:56:C2:9C:C7
Connection handle 64
# 断开BLE连接
$ hcitool -i hci0 ledc 64
# 更新BLE连接参数
$ hcitool -i hci0 lecup --handle 64 --timetou 100
帮助信息
$ hcitool -i hci0 lecup --help
Usage:
lecup <handle> <min> <max> <latency> <timeout>
Options:
# LE连接句柄。
--handle=<0xXXXX> LE connection handle
# 设置最小连接间隔。
--min=<interval> Range: 0x0006 to 0x0C80
# 设置最大连接间隔。
--max=<interval> Range: 0x0006 to 0x0C80
# 设置从机延迟。
--latency=<range> Slave latency. Range: 0x0000 to 0x03E8
# 设置超时时间。
--timeout=<time> N * 10ms. Range: 0x000A to 0x0C80
# 范围为0x0006到0x0C80,对应实际时间范围为7.5毫秒到4秒,乘法因子为1.25毫秒。
min/max range: 7.5ms to 4s. Multiply factor: 1.25ms
# 超时时间,N * 10毫秒,范围为0x000A到0x0C80,对应实际时间范围为100毫秒到32秒,超时时间必须大于最大连接间隔。
timeout range: 100ms to 32.0s. Larger than max interval
网友评论