一.概述

    上一篇博文介绍的是inquiry的整个过程中HCI层的command和event。在寻找到有效的远端蓝牙设备后,开始建立ACL连接,这里仅仅反应HCI层的数据包,对于LM层和Baseband层的数据可能需要抓取FW的log进行查看。

 
二.建立ACL连接的过程
1. Create_Connection command
  该命令参数如下:
BD_ADDR,
Packet_Type,
Page_Scan_Repetition_Mode,
Reserved,
Clock_Offset,
Allow_Role_Switch
00000101 00000100 00001101 10000000 10011001 00100011 01001100 11100000 00000000 00011000 11001100 00000001 00000000 10010010 11000111 00000001
Opcode: 0x0405
Total Length: 00001101 = 0x0d = 13
BD_ADDR:10000000 10011001 00100011 01001100 11100000 00000000 = 0x00e04c239980
下图是inquiry过程中的一个extended inquiry result event:

从上图可以看出这个地址属于一个rk3066的设备,实际是一个平板电脑
Packet_Type:00011000 11001100 = 0xcc18(DM1-DH1, DM3-DH3, DM5-DH5)
Page_Scan_Repetition_Mode:00000001 = 0x01(R1)
Clock_Offset:10010010 11000111 = 0xc792(18322)  //CLKslave-CLKmaster
Allow_Role_Switch:00000001(本地设备是master,接受role switch)
 
2. Command status event
该event参数如下:
Status,
Num_HCI_Command_Packets,
Command_Opcode
00001111 00000100 00000000 00000010 00000101 00000100
EventCode: 00001111 = 0x0F
Total Length: 00000100 = 0x04
status = 00000000 = 0x00 表示command成功
Num_HCI_Command_Packets = 00000010 = 0x02
Command Opcode:和Create_connection command一样为 00000101 00000100 = 0x0405
 
3.Connection Complete event
   建立成功,返回Connection Complete event,该event参数如下:
Status,  
Connection_Handle, 
BD_ADDR,
Link_Type, 
Encryption_Enabled
00000011 00001011 00000000 00001001 00000000 10000000 10011001 00100011 01001100 11100000 00000000 00000001 00000000
EventCode: 00000011 = 0x03
Total Length: 00001011 = 0x0b = 11
Status: 0x0000(Success)
Connection_Handle:00001001 00000000 = 9
BD_ADDR: 10000000 10011001 00100011 01001100 11100000 00000000 = 0x00e04c239980
Link_Type:00000001 = 0x01(ACL connection (Data Channels))
Encryption_Enabled:00000000(不加密)
 
三.总结
  建立ACL Connection在HCI层上看比较简单,只有Create_Connection command和Command status event以及Connection Complete event两个event。在建立连接后,得到重要的Connection handle,建立起ACL连接,这个连接一旦建立起来,L2CAP signaling channel(CID = 0x0001)就已经存在,L2CAP可以在这个Channel进行一些数据传输病建立L2CAp连接。这在下一篇介绍。

最新文章

  1. .net汉字转字母
  2. jquery css事件编程 尺寸设置
  3. 分享一些Hadoop环境搭建所用到的软件
  4. const、static、extern三个关键字
  5. libevent使用<一> libevent导入项目
  6. oracle疑难杂症问题
  7. leetcode 147. Insertion Sort List ----- java
  8. [改善Java代码]asList方法产生的List对象不可更改
  9. IDEA 整合Junit实现自动生成测试代码
  10. Away3D 的实体收集器Bug
  11. Linux下常见权限操作相关命令
  12. Oracle EBS-SQL (SYS-5):sys_配置文件查询.sql
  13. 【ActiveMQ】持久化消息队列的三种方式
  14. Mac上使用Visual Studio Code开发/调试.NET Core代码
  15. Google Summer of Code 建议被接收的5个技巧
  16. Git add和commit步骤分析
  17. Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode
  18. 2017年 Java 程序员,风光背后的危机
  19. 04_Linux目录文件操作命令1(mv ls cd...)_我的Linux之路
  20. unity连接photon服务端模块

热门文章

  1. 自定义ContentProvider的一些细节探究
  2. 【转】Hadoop集群添加磁盘步骤
  3. 抓包工具Fiddler的使用
  4. javascript优化--03高质量编码
  5. Ubuntu 安装Redis体验
  6. WPF之TextBox
  7. lua if
  8. robotium 新建 android 测试项目:
  9. topcoder SRM 592 DIV2 LittleElephantAndBooks
  10. HDU 4533 威威猫系列故事——晒被子