1.概述

    前面一篇博文已经介绍到远端设备对本地的Connection request进行了response,目前L2CAP的连接处于pending状态。这篇将继续抓取下面的一些packets,来看L2CAP Connection的建立过程。
 
2.一些Frame
Frame50:HCI收到ACL Data,传到L2CAP层,是远端的information request
00001001 00100000 00001010 00000000 00000110 00000000 00000001 00000000 00001010 00000011 00000010 00000000 00000011 00000000
Connection Handle: 9
Broadcast Flag: No broadcast, point-to-point
Packet Boundary Flag: First automatically-flushable L2CAP packet
Total Length: 10
PDU Length: 6
Channel ID: 0x0001
Code: 00001010 = 0xa Information request
Identifier: 3
Command Length: 2
InfoType: 00000011 00000000 = 0x0003 Fixed Channels supported
注:这里远端设备显然查询本地设备支持的fixed Channel类型
 
Frame51:返回information response,HCI收到L2CAP层的ACL Data
00001001 00100000 00010100 00000000 00010000 00000000 00000001 00000000 00001011 00000011 00001100 00000000 00000011 00000000 00000000 00000000 00001010 00000000 00000000 00000000 00000000 00000000 00000000 00000000
这里只看重点部分:
Channel ID: 0x0001
Code: 00001011 = 0x0b Information response
InfoType: 00000011 00000000 = 0x03 Fixed Channels Supported
Result: Success
        Data:8个字节表示支持的fixed channel,p1427和p1430
   这里表示支持L2CAP Signaling channel和AMP Manager Protocol Channel这两个fixed Channel
注:这里本地设备返回response,表明自己支持两个fixed channel,分别是L2CAP Signaling channel和AMP Manager Protocol Channel这两个fixed Channel。
 
Frame54:远端设备再次返回information response
  这次返回的是上面中介绍的Frame42:本地发送的ID为32的information request
00001001 00100000 00010100 00000000 00010000 00000000 00000001 00000000 00001100 00000000 00000011 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Code: 0x0b Information response
Identifier: 0x20 = 32 //对应上次的information request
        InfoType: 0x03  Fixed Channels Supported //也是询问的支持的fixed channel
        Result: Success
        Data:8个字节表示支持的fixed channel,p1427和p1430
  这里表示支持只支持L2CAP Signaling channel
注:远端返回的information response表明其只支持L2CAP Signaling channel
 
Frame55-Frame61:HCI进行了一些command,Read_Clock_offset,Get_Link_Quality等。
 
Frame62:L2CAP收到远端的Connection response
   在Frame48中本地已经收到远端的connection response,只是状态为pending,这里再次接受到connection response,也许表示成功了。如下:
00001001 00100000 00010000 00000000 00001100 00000000 00000001 00000000 00000011 00000100 00001000 00000000 01000100 00000000 01000000 00000000 00000000 00000000 00000000 00000000
Code: 0x03 Connection response
Destination Channel ID: 0x0044
Source Channel ID: 0x0040   //本地的CID,这个CID在本地发送connection request中确定
      Result: Connection successful
Status: Connection successful

注:到这里,本地发送的connection request已经被远端response,并且状态为成功。

 
//从这里开始,进入Configure 的过程
Frame63:本地发送Configure request

00001001 00000000 00010000 00000000 00001100 00000000 00001000 00000000 01000100 00000000 00000000 00000000 00000001 00000010 00000000 00000100

Channel ID: 0x0001
Code: 0x04 Configure request
        Identifier: 0x05 = 5
  Destination Channel ID: 0x0044  //发送的目标设备的CID
C Flag: Last Configuration Request

我们看看configure 部分的结构:

Type:0x01 MAXIMUM TRANSMISSION UNIT

length:0x02 = 2
config data:0x0400 = 1024
注:本地发送的configure request是关于设置MTU的,这里配置的是1024。
 
Frame66:收到slave发送的configure request
00001001 00100000 00010000 00000000 00001100 00000000 00000001 00000000 00000100 0000010000001000 00000000 01000000 00000000 00000000 00000000 00000001 00000010 00000000 00000001
Code: 0x03 Configure request 
ID:0x04 =4
configure Type:0x01 关于MTU
length:0x02
Data:0x0100 = 256
注:也就是slave建议的MTU为256个字节。
 
Frame67:本地发送configure response
00001001 00000000 00001110 00000000 00001010 00000000 00000001 00000000 00000101 0000010000000110 00000000 01000100 00000000 00000000 00000000 00000000 00000000
Code:0x05 Configure response
Identifier: 4 //对应Frame66slave的configure request
Results: Success 
//这里奇怪的是应该还有两个字节的Config部分,这里怎么木有了。。。result后就结束了
注:这是本地设备对远端设备的configure request的resposne,结果是成功,应该是接受了远端设备256MTU的配置。
 
Frame73:远端返回configure resposne
00001001 00100000 00001110 00000000 00001010 00000000 00000001 00000000 00000110 00000000 01000000 00000000 00000000 00000000 00000000 00000000
Code: 0x05 Configure response
Identifier: 5
Source Channel ID: 0x0040
Results: Success
注:这里也没有config部分,到result域就结束了。。。不过成功表示接受了1024的MTU配置吧。
 
3.总结
  在这部分,本地部分主要是发送information requset和远端设备交换设备信息,发送connection requset建立L2CAP的连接,以及发送configure request进行参数配置。在这个过程里,远端的slave也会发送information requset和configure requset,双方进行信息交换和参数配置。至此,本地的configure部分结束,下面进行验证部分。

最新文章

  1. HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)
  2. Eclipse下Android开发错误之Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace
  3. Android强制弹出,隐藏输入法.
  4. 第一个MySQL 存储过程
  5. C#判断当前操作系统
  6. 让Maven支持代理
  7. 关于SpringMVC控制器的一点补充
  8. Codechef April Challenge 2019 游记
  9. C++ map的方法
  10. 3、VNC
  11. Images之multi-stage builds
  12. linux下安装kafka
  13. Android上的单元测试
  14. [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用
  15. java学习--Reflection反射机制
  16. emacs之配置7,tabbar插件
  17. net.mvc中并发限制
  18. C++_类和动态内存分配6-复习各种技术及队列模拟
  19. nmon系统监控
  20. 结合Mysql和kettle邮件发送日常报表_20161001

热门文章

  1. Win7-64bit系统下安装mysql的ODBC驱动
  2. Winedt打开tex文件报错error reading的解决方案
  3. 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程
  4. 简单几何(点与线段的位置) POJ 2318 TOYS && POJ 2398 Toy Storage
  5. 简单几何(推公式) UVA 11646 Athletics Track
  6. 模拟 Coder-Strike 2014 - Round 1 A. Poster
  7. Chart系列(一):Chart的基本元素
  8. LightOJ1422 Halloween Costumes(区间DP)
  9. 【Linux下进程机制】从一道面试题谈linux下fork的运行机制
  10. new在c#方法中的使用