在做BLE的过程中好多人遇到这些问题:

1)为什么远端设备发给我的消息我没收到?

2)为什么远端设备发给我的消息和我接收到的不一样?

3)为什么我的消息发布出去?

等等。想要知道为什么,除了经典的logd(万能的printf)之外,Android蓝牙中有一个很重要的debug方式就是btsnoop.log.

这个log记录了host与controller通信的全部内容,列出了蓝牙协议栈的各个层的消息通信图谱。注意,由于这个log是协议栈自己生成的,它只列出了协议栈发出去的和接收到的消息,若是由于其它原因,例如UART 驱动丢包等导致的问题,则需要使用其它的log工具来寻找原因(例如uart sniffer)。

snoop log并不是蓝牙创造出来的东西,而是由SUN发明的一种log格式,主要应用到IEEE802 的各种log的身上。和任何文件一样,JPEG,MP3等,它有固定的格式。

感兴趣的同学可以到下面的链接来查看snoop log的格式:

http://www.fte.com/webhelp/FTS4BT/Content/Technical_Information/BT_Snoop_File_Format.htm

以及

https://www.rfc-editor.org/rfc/pdfrfc/rfc1761.txt.pdf

大致长这个样子:

我们在此不再详述snoop log文件本身的格式。知道了这些格式,其实我们自己也可以写一个btsnoop解析器,但是没有必要再造一个轮子。

wireshark和fte的capture file viewer都可以用来查看btsnoop log。

可以到如下网址下载wireshark软件。

https://www.wireshark.org/download.html

效果如下:

或者到fte的网站上下载BPA500的capture file viewer软件来查看。

http://www.fte.com/products/BPA500-download.aspx

效果如下(frontline的viewer软件看起来更直观一点。):

注意在打开btsnoop的时候右下角的打开文件格式选项要为*.log的格式。

铺垫都说完了,再说说btsnoop log怎么样从安卓手机中来。 首先要打开手机的开发者模式(不知道怎么打开的可使用搜索引擎来搜索。笔者还记得有几个版本的安卓还需要连续点击多少下还是怎么的)并选中打开蓝牙HCI日志,例如笔者使用的的三星galaxy手机为:

打开这个设置之后,一般正常的手机都会生成btsnoop log,可以连上去ADB或者文件管理器来搜索查找这个文件,根据手机品牌以及型号的不同在手机里存储的位置也不同。

重要的问题来了,我们如何来查看这个文件的内容呢?

首先复习一点HCI的理论知识。

我们知道HCI其实严格意义上来讲不是一个层layer的概念(与L2CAP或者RFCOMM等相比),而是host和controller的接口,这两个接口之间传递的消息可称为HCI数据包。HCI的“纯”数据格式中并没有定义数据的流向,即是从host到controller还是相反。

host与controller传递消息时,在每个HCI包的前面会有一个indicater来指示这个HCI数据的类型,由此可以知道其方向如何。

我们这里只说1-4的数据类型。

HCI Command Packet:host发给controller,主要是HCI 命令, 注意是命令,不是数据。

HCI Event Packet:controller发给host。对应于command packet。

HCI ACL Data Packet: host发给controller或者相反。主要是L2CAP发送和接收的数据,我们上层的所有数据,注意是数据,而不是命令,都是通过这个type来传递的。

HCI Synchronous Data Packet:用来传输语音(SCO)数据的。注意一般都会通过PCM接口来传输SCO数据。

对于一些设置名字,读取本机蓝牙地址等等的命令,都是通过HCI command packet来做的,例如:


而发送出去的和接收的上层数据都是通过ACL data packet的type来完成的,例如:

于是一来一回,我们就可以知道stack自己发出去(实际上是尝试发给controller)的数据,与我们从app发到stack的数据,以及stack接收到的数据,和发送到app的数据,是否一致,是否有遗漏。

上面所说的两个软件都比较清晰的列出了HCI,L2CAP以及ATT和GATT的各个层的命令和数据,也非常便于我们查看和找出问题在什么地方。

相同的,如果是调试安卓蓝牙的其它profile,例如HF或者PBAP等等,也是很方便的。

当然,这要求我们需要对协议栈的每个层次都要有基本的了解,这样才能看懂log。

蓝牙查看和分析btsnoop.log相关推荐

  1. toad查看oracle的plsql包,Oracle logminer 分析redo log(TOAD与PLSQL)

    Oracle logminer 分析redo log Oracle 11g r2 RAC centos 6.5 设置时间格式 select to_char(sysdate,'yyyy-mm-dd hh ...

  2. 工具分析HCI Log[FrontLineWireshark]

    Android 蓝牙学习 @# Android 蓝牙 文章目录 1. Frontline 分析HCI Log 2. Wireshark 打开HCI Log 3. Ellisys 1. Frontlin ...

  3. 使用Oracle LogMiner分析archived log

    2019独角兽企业重金招聘Python工程师标准>>> 今日收了预警邮件,发生archived log增长过快的现象.无法确定问题原因,使用LogMiner对archived log ...

  4. Android系统开发(3)---如何分析ANR Log的总结

    如何分析ANR Log的总结 引起ANR问题的根本原因,总的来说可以归纳为两类: 应用进程自身引起的,例如: 主线程阻塞.挂起.死循环 应用进程的其他线程的CPU占用率高,使得主线程无法抢占到CPU时 ...

  5. 蓝牙比较常分析的东西

    通信,就是我问你答,你问我答,就是这么一个过程.不用想的那么复杂 那么,通信往往出问题了,是原因呢 1.我问你不答 2.我问你答的很慢 3.我问的很慢 4.我问你答的不对 往往表现就是通信速度变慢,通 ...

  6. IOS反汇编工具Hopper分析Crash Log

    2019独角兽企业重金招聘Python工程师标准>>> 在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使 ...

  7. 虚拟机常用的内存查看与分析工具

    内存查看与分析工具,下面是日常监控可以使用的一些工具, 在调试时应用比较多的是堆栈信息,查看这篇文章: Java Thread Dump 性能分析 gc日志输出 在jvm启动参数中加入 1 2 3 4 ...

  8. Android Studio - HPROF文件查看和分析工具

    Android Studio - HPROF文件查看和分析工具 Android Studio 翻译的官方文章 原文链接 当你在Android Studio中使用Android Monitor里的Mem ...

  9. 【Git】Git 基础命令 ( 查看提交记录 git log | 版本回滚 git reset | 撤销回滚 git reflog )

    文章目录 一.查看提交记录 git log 1.查看详细提交记录 2.查看简略提交记录 二.版本回滚 git reset 1.Git 中的版本表示 HEAD~1 2.版本库代码回滚 三.撤销回滚 1. ...

最新文章

  1. c#语言程序设计实例,C#语言程序设计用.ppt
  2. vc++怎么利用ado连接数据库(mysql)
  3. ol xyz 加载天地图_OpenLayer学习之加载天地图
  4. tomcat的热部署
  5. 20145209刘一阳《JAVA程序设计》第七周课堂测试
  6. 帧同步_微信小游戏接入“熊孩子噩梦”健康系统 帧同步能力上线
  7. Gruntjs: grunt-contrib-jst
  8. html游戏代码_新手使用的Mac系统的简易代码编辑器推荐
  9. 中国海洋科技发展迅速 海洋重器世界领先
  10. 数据结构名次计算和排序算法
  11. 最全HTTP协议详解
  12. 淘淘商城系列(一)—— 电商行业的背景介绍(一)
  13. 第3章 数据分析工具Pandas
  14. docker logs 参数解释
  15. linux 指定某个节点,11g RAC单独关闭某个节点的疑问
  16. 关于Zoom连不了,明明别人可以连接,却提示会议号不存在
  17. 爬虫是什么,该如何学习爬虫呢?
  18. 基于java面对对象编程范式笔记
  19. 读书笔记:《代码大全2》
  20. 2018年7月23日安全快讯

热门文章

  1. Python 算法交易实验56 ADBS:QuantData-灌入离线数据
  2. python爬虫天气实例_Python爬虫 --- 2.4 Scrapy之天气预报爬虫实践
  3. 硬仗酒:新国货更要注重国人的精神表达
  4. 跨境电商卖家必知的【圣诞节营销】终极指南(一)
  5. 内容分发技术平台_内容分发平台及排名_编辑机器人|Giiso智搜
  6. 丝印代码html,丝印代码反查型号:ic上的丝印为HH1YA,封装是SOT23-6的,请问是什么型号呢?...
  7. 计算机作业批改反思,作业批改有效性的反思
  8. Wiki的商业化之道
  9. c语言io口置1,AVR C语言编程的小技巧-IO口置位
  10. 微信战狼计划之小程序开发 视频教程