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等模块同样是适用的。

七、L2CAP的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  2. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. 《LoadRunner12七天速成宝典》来了

    看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...

  4. 【SAP业务模式】之ICS(七):IDOC配置

    这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...

  5. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  6. Nodejs之MEAN栈开发(七)---- 用Angular创建单页应用(下)

    上一节我们走通了基本的SPA基础结构,这一节会更彻底的将后端的视图.路由.控制器全部移到前端.篇幅比较长,主要分页面改造.使用AngularUI两大部分以及一些优化路由.使用Angular的其他指令的 ...

  7. Go语言实战 - 网站性能优化第一弹“七牛云存储”

    由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...

  8. redis成长之路——(七)

    扩展性封装 虽说现在StackExchange.Redis免费,万一到时候和servicestack.redis一样要收费呢,所以先留一口,后续的可以再处理 实例代码点击这里查看 redis成长之路- ...

  9. discuz接入七牛sdk

    自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件   解释:就 ...

随机推荐

  1. Java多线程11:ReentrantLock的使用和Condition

    ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. Reentran ...

  2. JDBC学习2:为什么要写Class.forName("XXX")?

    Class.forName(String name) 接上一篇JDBC.本来这个内容是放在前面的一篇里面的一起的,后来发现越写越多,想想看就算了,还是单独开一篇文章好了,这样也能写得更加详细点. 上一 ...

  3. Aoite 系列(01) - 比 Dapper 更好用的 ORM

    Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Data 适用于市面上大多数的数据库提供程序,通过统一封装,可以在日常开发中简单便捷的操作数 ...

  4. IE浏览器不能自动显示PDF文件的解决办法

    今天更新了Adobe的PDF Reader,更新后发现在网页上无法预览PDF文件了,点击PDF的连接,浏览器就会提示下载或者打开,感觉很不爽,经过一番百度,找到了解决办法,在这里分享一下. 打开IE浏 ...

  5. C# Lambda表达式详解,及Lambda表达式树的创建

    最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介 ...

  6. [ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

    1.CC2530的IO口概述 CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC.定时器或USART外设.这些I/O 口的用途可以通过一系列 ...

  7. Android中viewPager的一两点使用

    Android中viewPager的一两点使用 viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用. 使用viewP ...

  8. swift 字符串和数字相互转化

    //NSString 类型 转为整型,浮点型, var test:NSString = "3.3" println("test\(test)") println ...

  9. DDD~领域事件中使用分布式事务

    回到目录 对于一个聚合来说,它可能会被附加很多事件,这里我们叫它领域事务,因为一个聚会我们可以把它理解成一个领域,一个业务.对于领域事件不清楚的同学可以看看我的这篇文章<DDD~领域事件与事件总 ...

  10. PSR规范

    背景 Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年.FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和 ...