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 00001011 0010000000001100 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 00000001 00000000 00000100 0000010100001000 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 00000101 0000010100000110 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部分结束,下面进行验证部分。