关键字:bluetooth 蓝牙协议  HCI剖析 HCI概述 HCI笔记 LMP L2CAP SDP RFCOMM 


作者:zhongjun

本着互相学习的目的,来分享此一系列的文章,欢迎转载,请注明作者,尊重版权,谢谢

文章有不当处请指正,共同学习


此系列目前这样打算:

LMP剖析 + 模拟源码:

蓝牙LMP剖析(一)

蓝牙LMP剖析(二)

HCI剖析 + 模拟源码:

蓝牙HCI剖析(二)

蓝牙HCI剖析(三)

L2CAP剖析 + 模拟源码(未完成)
SDP剖析 + 模拟源码(未完成)

rfcomm剖析 + 模拟源码(未完成)

------------------------------------------------------------------------------------------------------------------------------------

华丽分割线,进入正题

------------------------------------------------------------------------------------------------------------------------------------

一.HCI介绍

HCI提供了访问bluetooth control的统一接口,通俗来讲,就是定义了特定的格式来控制蓝牙芯片来做相应的动作(比如inquiry,connect,disconnect)
还有一个问题,为什么我们发送的HCI data 芯片能识别并且执行相应的动作呢?
-》很简单,蓝牙芯片中也有HCI协议代码,烧到Bluetooth chip中,所以我们发送的data可以被正确的parse,执行相应的动作后再准确的回送给我们response

二.传送过程

三.Format

一共分四种packets format,COMMAND(host->control),EVENT(host<-control),ACL(host<-->control),SCO(host<-->control)

1.COMMAND(host->control)

通俗来讲就是蓝牙协议栈发送给芯片的命令,让芯片来执行相应的动作
foramt如图所示

参数:
OCF & OGF在文章二中有介绍
Parameter Total Length:后续参数的长度
举一例:

图4

2.EVENT(host<-control)

通俗来讲就是协议栈发给芯片命令后,芯片收到或者执行返回给蓝牙协议栈的status或者结果

format如图所示

参数:
Event Code:在文章二有详细列表
Parameter Total Length:后续参数的长度

举一例:

3.ACL(host<-->control)

通俗来讲,上层协议的data(L2CAP,SDP,RFCOMM,AVDTP,AVCTP,HFP AT,A2DP,AVRCP,PBAP,MAP,BNEP,HID等)都是透过这个packets传的
format如图所示:

参数:
Handle:建立蓝牙ACL连线后会有一个handle句柄
PB flag:一张图就懂了

BC flag:一张图就懂了

Parameter Total Length:后续参数的长度
举例:

4.SCO(host<-->control)
通俗来讲,比较多的在HFP,HSP通话中传送这个data format
format如图所示:

参数::
Connection_Handle:LMP建立SCO link的时候的句柄

Packet_Status_Flag (in packets sentby the Controller):

Data_Total_Length:后续参数的长度

蓝牙HCI剖析(一)相关推荐

  1. 蓝牙HCI剖析(三)

    HCI源码: bt_hci.h [cpp] view plain copy /* * This file is part of the HCI protocal. * Data  :20160506 ...

  2. 蓝牙HCI剖析(二)

    一.概述: 此篇文章主要是总结下HCI command 和 event 二.command 三.event: 四.此command和event是参照之前的一本书截图的,对于最新的core 4.2有很多 ...

  3. Android O HIDL的使用例子 -- 蓝牙HCI 服务进程

    1.1.Treble 计划概览 Android O 引入" Treble" 计划,目标是通过重构 Android OS 的 framework,使 Android 设备制造商能更快 ...

  4. 获取Android蓝牙HCI日志

    在我刚在开发者选项下开启开启蓝牙HCI信息搜集日志时, 使用adb并无法拿到btsnoop_hci.log. 随后查阅了许多资料, 折腾了许久, 包括什么要获取root权限等等. 最终在把USB连接方 ...

  5. 蓝牙HCI Dongle说明

    Chipsets 本项目主要实现了蓝牙Host协议栈,并没有包含Controller部分,如果需要实现蓝牙交互,按照Core Spec,需要通过HCI接口连接其他蓝牙芯片实现蓝牙功能. 由于HCI接口 ...

  6. Android 蓝牙抓包和分析 (1) 启用蓝牙HCI信息收集日志

    蓝牙通信其实和http通信有点类似,http通过接口交互抓取数据包也很方便,但是到了蓝牙就没那么方便了,本文就是介绍如何实现蓝牙数据包的抓取. 怎么抓包 另一种更为简便的抓包方式请阅读Android ...

  7. 蓝牙HCI command/event/acl/sco格式介绍

    一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍. 第二篇:Transp ...

  8. 使用Android手机抓取蓝牙HCI包

    准备工作 一台安卓手机(应该不需要root权限) wireshark Frontline ComProbe Protocol Analysis System(CPAS) log文件获取 打开HCI侦听 ...

  9. 蓝牙-HCI错误码列表

    错误码定义: 1 /* Success code */ 2 #define HCI_SUCCESS 0x00 3 /* Possible error codes */ 4 #define HCI_UN ...

最新文章

  1. Spring Boot项目开启异步使用多线程完整代码案例
  2. 《Nmap渗透测试指南》—第2章2.2节使用Zenmap进行扫描
  3. ping不通win7、8解决方法以及nc后门的制作
  4. MapReduce分析NCDC 年气象数据最低温度与最高温度
  5. 关于 asp.net 服务器控件几个 ID 的说明
  6. c++ STL平常练习-3
  7. Oracle logmnr使用
  8. 12通过作用域链实现闭包
  9. [网络安全自学篇] 九十二.《Windows黑客编程技术详解》之病毒启动技术创建进程API、突破SESSION0隔离、内存加载详解(3)
  10. Linux版本的SVN客户端,好的Linux(Ubuntu)SVN客户端
  11. CSS固定定位(position: fixed;/background-attachment: fixed;)
  12. 六一儿童节倾情奉献,校内首发,CSDN再发,2011年冬季c/c++程序员找工作心得
  13. BI可视化分析之Pentaho
  14. LDAP认证服务客户端配置
  15. 股票的发行原理是什么?
  16. 十进制整数,转换成八进制和十六进制数并输出。
  17. 理光打印机MP 3054 SP苹果电脑MAC驱动
  18. peakdet: Peak detection using MATLAB 峰识别 峰面积计算 peak area 相关matlab基本详解
  19. 舞会 关灯 黑帽子 白帽子问题
  20. SCRT连接服务器缓慢解决方法

热门文章

  1. python类继承实例_Python实现类继承实例
  2. 手机的基站与基站之间是如何通讯的?
  3. nmap 快速扫描所有端口
  4. 走过童年时代,智能家居要长大了吗
  5. 科普 | 什么是贴片电阻?
  6. [转]神经机器翻译(NMT)相关资料整理
  7. 一种Δ-∑模数转换器中梳状滤波器的设计
  8. 【每日早报】2019/08/22
  9. 计算机软件创新,利川计算机软件学院_创新学校
  10. 自学网络安全(黑客)该如何系统学习