美文网首页
常用的hcitool命令

常用的hcitool命令

作者: 狼少丷 | 来源:发表于2024-06-25 10:23 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:常用的hcitool命令

          本文链接:https://www.haomeiwen.com/subject/gvodcjtx.html