首页 > 代码库 > 七、L2CAP

七、L2CAP

1.      L2CAP

在BR/EDR模式下,在connection procedure成功执行后,两台设备通过一条物理信道(physical channel)连接在一起,同时两者之间建立起了一条物理链路(Physical link),以及缺省的ACL-U和ACL-C逻辑链路(Logical Links)也随之建立起来了。通过Link Manager协议,可以建立额外的更多的逻辑链路。这一过程是通过与远端蓝牙设备交换链路管理消息(Link Manager Protocol messages)来协商构建和设置这些逻辑链路的。One of these links (ACL-C) transports the LMP control protocol and is invisible to the layers above the Link Manager. The other link (ACL-U) transports the L2CAP signaling protocol and any multiplexed L2CAP best-effort channels。It is common to refer to a default ACL logical transport, which can be resolved by context, but typically refers to the default ACL-U logical link(经常地我们需要访问ACL逻辑传输,通常我们通过访问缺省的ACL-U逻辑链路). Also note that these two logical links(ACL-C与ACL-U) share a logical transport。

对于LE模式下面,同样建立了LE-C和LE-U两个逻辑链路,通过LE-U传输L2CAP协议数据包。

逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol),是蓝牙系统中的核心协议,相应的规范位于Core Version 4.1的vol 3:Part A。

 技术分享

L2CAP负责适配基带中的上层协议。它同LM并行工作,向上层协议提供面向连接和无连接的数据服务,并提供多路复用,分段和重组操作。允许高层次的协议和应用能够以64KB的长度发送和接收数据包(L2CAP Serveice Data Units, SDU)。L2CAP提供了逻辑信道,名为L2CAP Channels,即在一个或多个逻辑链路上进行多路复用。

L2CAP可分为两个部件:
1. Channel Manager 

2. Resource Manager

 技术分享

http://www.cnblogs.com/hzl6255/p/3801732.html这篇博客对L2CAP进行了比较详细的归纳和总结,这里不再赘述。

1.1      连接消息序列图

两个L2CAP实体建立连接的消息时序图如下:

技术分享

 

图的上半部分演示了一次完整L2CAP连接请求过程,上层用户层通过调用L2CAP库提供的ConnectionL2capConnectRequest()开启连接请求,涉及到连接库(CONNECTLib)的中继和转发给BlueStack。图的下半部分演示了一次L2CAP的注册过程,L2CAP在使用之前必须进行注册,注册过程不涉及到多个设备之间的交互。

1.2      L2CAP消息层次结构

 技术分享

上图是ADK程序Connect库以及L2CAP模块涉及到的消息层次结构图。图的上半部分是upstream过程——BlueCore在接收到L2CAP_PRIM后,转发给L2CAP模块的消息处理函数,后者根据消息的类型进行不同的L2CAP请求处理。图的下半部分表示downstream过程——L2CAP模块通过构建L2CAP_XXX_T类型primitive,然后发送给BlueCore。

这一架构对于HCI,DM,RFCOMM,SDP等模块同样是适用的。

七、L2CAP