Android HCI日志分析案例1

案例1--蓝牙扫描设备过程分析

应用层发起搜索蓝牙设备,Android 官方提供的蓝牙扫描方式有三种,分别如下:

  • BluetoothAdapter.startDiscovery(); //可以扫描经典蓝牙和BLE两种。
  • BluetoothAdapter.startLeScan();//扫描低功耗蓝牙,在api21中已弃用,不过还是可以使用
  • BluetoothLeScanner.startScan();//新的BLE扫描方法

当应用层调用startDiscovery()时,Host会通过HCI发送一个 Inquiry HCI Command给 Controller。接下来我们会通过分析HCI log,来学习Inquiry的流程。在分析HCI log前,我们先来学习下HCI Command数据包的结构。

1.1 HCI Command 数据包结构

HCI Command数据包结构定义在蓝牙核心协议规范Core_v5.3.pdf中。
HCI Command数据包格式如下,开头的Opcode是区分不同类型的命令的唯一标识,Opcode由OpCode Group Field (OGF) 和 OpCode Command Field (OCF)组成。根据OGF的值,可以将HCI commands进行分类。OpCode 的计算公式为:** OpCode = OGF << 6 + OCF 。有了OpCode计算的方式,我们就可以通过OpCode过滤**HCI log里面的指定类型的HCI Command。

HCI Command packet

OpCode 计算方法

1.2 过滤 Inquiry Command

Inquiry Command 是 Link Control command 类型的command,通过查询 Bluetooth Core Specification 中的 Vol4-> Part E-> 7.1Link Control Command小节,可知,Link Control Command的 OCF值为 0x0001.

Bluetooth Core Specification V5.3

Inquiry Command

因此,Inquiry Command 的Opcode 为 0x0001 << 6 + 0x01 = 0x0401,通过0x0401就确定某条command为 Inquiry Command,该命令的名称为 HCI_Inquiry。

ComProbe Protocol Analysis System 支持过滤功能,通过设置filter可以过滤出 Opcode为 0x0401的log,设置方法如图:

过滤HCI_Inquiry

1.3 扫描过程分析

1.发送Inquiry请求

  • Host发送 Command: HCI_Inquiry

应用层要进行蓝牙设备扫描,Host先发一条 HCI_Inquiry的Command 通知 Controller

HOST发送HCI_Inquiry

  • Controller回复HCI Event

Controller在收到HCI_Inquiry这条Command后,会回复一条Command Status的HCI Event,来表示Controller执行HCI_Inquiry后的状态,即Status: Success。并且这两条HCI log的Frame标号是挨着的,HCI_Inquiry的帧号是127,Command Status的帧号是128。

Controller:Command status

2.扫描结果

扫描完成后,Controller会发送Event: HCI Extended Inquiry Result。以列表中搜索到的Jabra Classic v0.5.3为例,它的HCI Extended Inquiry Result数据包中会包含它的设备名称、它所支持的Service的UUID,和设备类型:Wearable Headset device,因此,Jabra Classic v0.5.3的Icon是一个耳机的图标。

扫描结果

HCI日志详情

以上就是大致的蓝牙搜索到列表显示的流程分析。

如果此文章解答了您的相关疑惑,节约了您的宝贵时间,可以Shang小编鸡腿哟!

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抓取Android BTSnoop蓝牙HCI协议分析工具是一种用于捕获并分析Android设备上的蓝牙数据包的工具。蓝牙HCI协议是蓝牙设备之间进行通信所使用的一种协议,通过抓取并分析这些数据包,可以帮助开发人员或研究人员了解蓝牙设备之间的通信过程,诊断问题,甚至进行逆向工程。 要实现这一目的,可以按照以下步骤进行: 1. 安装抓包工具:首先,在Android设备上安装一个支持抓取蓝牙数据包的抓包工具。常用的工具有Wireshark和Bluetooth HCI Logger。 2. 启用抓包功能:在Android设备上,需要启用开发者选项,并开启蓝牙HCI日志记录功能。具体操作方式可能有所不同,可以通过打开设备的设置菜单,找到开发者选项,并开启蓝牙HCI日志记录选项。 3. 连接设备:将要抓取数据包的Android设备与目标蓝牙设备进行配对和连接。 4. 抓取数据包:通过打开抓包工具,选择蓝牙设备的接口,开始捕获蓝牙数据包。数据包将会被存储到本地设备的存储中。 5. 分析数据包:将抓取到的数据包导入到分析工具中进行分析。分析工具可以对数据包进行解析,并显示出数据包的内容、属性和相关信息。 通过以上步骤,我们可以获取到Android设备上的蓝牙数据包,并利用分析工具对其进行解析。这将有助于了解蓝牙通信过程中的协议细节、错误和异常情况,从而进行问题排查和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值