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()开启连接请求,涉及到连接库(CONNECT
Lib)的中继和转发给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等模块同样是适用的。

最新文章

  1. React(一)基础点
  2. Android Studio Jar、so、library项目依赖
  3. HookIAT的启动程序
  4. php array 排序 感悟
  5. POJ2395 最小生成树 - Prime算法
  6. ProducerConsumerDemo
  7. VC编程 快捷键增加的几种方式
  8. 获取android源码中遇到的问题
  9. Beautiful Dream hdu3418 (直接做或二分)
  10. ASP.NET Core 认证与授权[7]:动态授权
  11. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十七节--Quartz与ABP框架Abp.Quartz及扩展
  12. c++ primer第15章这几个例子中的构造函数形式不太理解
  13. mysql-笔记-默认值
  14. 2018-2019 20165220 网络对抗 Exp5 MSF基础
  15. Java多线程(五)——线程等待与唤醒
  16. 联想R720面板右下部分按压后和上面按键串联了
  17. python之装饰器(函数)
  18. 在做销售录入界面时,如何使用dbgrid?(50分)
  19. dig命令详解
  20. POJ 3468 A Simple Problem with Integers(线段树模板之区间增减更新 区间求和查询)

热门文章

  1. win下修改mysql默认的字符集以防止乱码出现
  2. 上层建筑——DOM元素的特性与属性(dojo/dom-attr)
  3. nw.js如何处理拖放操作
  4. Unity3d使用经验总结 数据驱动篇
  5. 使用hexo+github搭建免费个人博客详细教程
  6. 修复Telerik reporting 在网页中使用时的样式
  7. 自制Unity小游戏TankHero-2D(1)制作主角坦克
  8. Redis和Memcached的区别详解
  9. Java正则表达式应用详解
  10. Design4:数据库设计规范