1.概述
L2CAP能向上层提供面向连接的或者无连接的数据服务,拥有multiplexing capability and segmentation and reassembly operation。能够接受上层协议或者应用的数据,最大为64K byte,每一个通道都可以进行Flow Control和retransmission。结构如下图:
几个主要特点:
(1)Protocol/channel multiplexing
(2)Segmentation and reassembly
(3)Error control and retransmissions
(4)Support for Streaming
(5)Fragmentation and Recombination
(6)Quality of Service
2.常用术语与概念
L2CAP channel:The logical connection between two endpoints in peer devices, characterized by their Channel Identifiers (CID).(两个设备之间的逻辑连接,以两端的CID标识该Channel)
SDU,or L2CAP SDU:L2CAP和上层交换的数据单元,不包含任何L2CAP的协议信息。
Segment,or SDU segment:Segmentation procedure产生,SDU的一部分。注意,在Basic L2CAp模式中不会使用,只会用在Enhanced Retransmission mode,Streaming mode,Retransmission Mode and Flow Control Mode。【这是显然的,Basic L2CAP没有Control Field嘛】
PDU, or L2CAP PDU:Protocol Data Unit,包含L2CAP协议信息。控制信息和上层的数据信息等。通常是由a Basic L2CAP header开始的,由以下几种PDU:B-frames, I-frames, S-frames, C-frames and G-frames。
B-Frame用在Basic L2CAP Mode中;
I-Frame和S-Frame用在Enhanced Retransmission Mode,Streaming mode, Retransmission mode, and Flow Control Mode中;
C-Frame专用在L2CAP signaling channel;
G-Frame用在Connectionless L2CAP channel,也可用于广播。
3.CID
CID(CHANNEL IDENTIFIERS),某一条L2CAP连接的两个端点的标识。有Fixed Channel 和Dynamically allocated Channel两种。如下图所示:
需要注意的是,ALC-U或者LE-U Logical Link建立起来后,Fixed channel就已经处于有效状态了。如果几个远端设备具有相同的CID,本地设备依然可以识别。下图是建立CID的例子:

建立不同类型的L2CAP连接的CID规则如下:
4.Data Packet Format
首先,L2CAP有5种operation mode:
此外,L2CAP有以下几种连接类型:
A:CONNECTION-ORIENTED CHANNELS in basic L2CAP mode(面向连接,采用基本L2CAP模式)
B: CONNECTIONLESS DATA CHANNEL in basic L2CAP mode(无连接的,采用基本L2CAP模式)
C:CONNECTION-ORIENTED CHANNELS的连接类型分为:BASIC L2CAP MODE和RETRANSMISSION/FLOWCONTROL/STREAMING MODES这两种(面向连接,重传/流量控制/流模式)
情况A采用Basic information frame (B-frame),格式如下:
Length参数指的是Information Field的字节数,Information payload 为0到65535字节。
情况B采用Group frame (G-frame),如下:
参数Length为PSM的字节数加上information的字节数,因为是CONNECTIONLESS DATA CHANNEL,所以CID为0x0002。
PSM为Protocol/Service Multiplexer,PSM至少是16bit,此外有限制条件,必须为以下这种格式:|xxxxxxxx0||xxxxxxxx1|。PSM的定义如下:
可以看出分为连个range,第一个range是SIG分配的协议代表值,第二个range是动态分配的,用来与SDP通信,还可以用来支持特殊协议。
Information部分从0 to 65533字节。
情况C采用Information frame (I-frame)和Supervisory frame (S-frame)配合使用,如下:
这种情况较为复杂,先说S-Frame,S-Frame用来响应I-Frame。
Length参数为除了basic L2CAP header的总共字节数。
Control部分对应三种Control mode:
(1)Standard Control Field
(2)the Enhanced Control Field
(3)theExtended Control Field
Standard Control Field:用于Retransmission mode and Flow Control mode;
Enhanced Control Field:用于Enhanced Retransmission mode and Streaming mode;
Extended Control Field:用于Enhanced Retransmission mode and Streaming mode。
三种Control Mode的格式如下图:
Control部分的相关参数解释如下:
SAR:Segmentation and Reassembly,指明该L2CAP是否是分段过的,格式如下:
TxSeq:Send Sequence Number,对发送的I-Frame计数,用于分段和重组。
ReqSeq:Receive Sequence Number,接受序号,用于重传等
R:Retransmission Disable Bit,用来实现Flow Control.
S:Supervisory function,表示S-Frame的type,定义如下:
P:Poll,The P-bit is set to 1 to solicit a response from the receiver. The receiver shall respond immediately with a frame with the F-bit set to 1.
F:Final(1 bit),The F-bit is set to 1 in response to an S-frame with the P bit set to 1.
L2CAP SDU Length(2byte)
如果L2CAP的SDU比较大,跨越了好几个I-Frame,则SDU Length表示总的SDU的长度。如果SDU没有分段的话,这个Field不用。需要注意的是,SDU Length只出现在Start I-Frame中,此时I-Frame的SAR=0x01。也就是说,在所有分段的I-Frame中,只有最开始的那个需要指明SDU Length,其余的I-Frame都不需要。
Information Payload Field
根据配置的MPS(MAX PUS)大小,可以填充这个Field。
FCS(2byte)
用来check这个Frame,计算比较复杂,不详述。
5.SIGNALING PACKET FORMATS
前面讲了好几种类型的PDU,还有一种C-Frame。C-Frame专用在signaling channel(0x0001或者0x0005)上,signaling commands在上面传输。需要注意的是:0x0001通道的一个C-frame可以同时传输多个command,0x0005只能传输一个。payload Length不能超过MTUsig。下图为定义的Minimum Signaling MTU:

在signaling channel上定义的L2CAP PDU的格式如下:
结构和B-Frame是一样的。
signaling commands的根式如下:

参数的含义如下:
Code (1 octet):指定Command的type,一般有以下几种:
参数Identifier (1 octet):标识一个req和res,相匹配。
参数Length (2 octets):指明data field字节数。
参数Data (0 or more octets):Command数据。
6.Command
这段描述在Signaling Channel上的Command,共有19种Type.
(1)COMMAND REJECT (CODE 0x01):
(2)CONNECTION REQUEST (CODE 0x02):用来建立连个Device之间的L2CAP连接。
source CID为发起这个Req的Device的CID。
(3)CONNECTION RESPONSE (CODE 0x03):对应CONNECTION REQUEST
注意:参数Destination CID为发出这个res的Device的CID,而Source CID为接受这个Res的Device的CID。【可能是为了和CONNECTION REQUEST的定义相匹配吧】
Result (2 octets):
Status (2 octets):result为pending情况下有效。
(4)CONFIGURATION REQUEST (CODE 0x04):建立L2CAP连接时需要的配置。

在这里,DCID就为接受这个req的Device的CID,
Flags不解释
Configuration Options提供所有的配置信息,如果是个empty Configuration,Length配置成0x0004.
Configuration Option的格式定义如下:
Type (1 octet):
配置成0:接收方无法识别option,则拒绝这个req
配置成1:接收方无法是被option,则skip这个req
Length (1 octet):定义option data中的字节数
(5)CONFIGURATION RESPONSE (CODE 0X05):回应CONFIGURATION REQUST

SCID为接受者这个res的Device的CID
Flags (2 octets)不解释
其余的Command的结构和以上的类似,不一一叙述,参考Spec1425-1438.
7.一些Configuration Options
(1)MAXIMUM TRANSMISSION UNIT (MTU):
所有的L2CAP implementations需要支持最下48byte(ACL-U上)和23Byte(LE-U上)。

MTU:the maximum SDU size(字节数)
(2)FLUSH TIMEOUT OPTION;
Extended Flow Specification使用时不用该使用该option。

Flush Timeout以毫秒计算。
其余还有QUALITY OF SERVICE (QOS) OPTION,RETRANSMISSION AND FLOW CONTROL OPTION,FRAME CHECK SEQUENCE (FCS) OPTION,EXTENDED FLOW SPECIFICATION OPTION等,可参考4.0的Spec。
8.FRAGMENTATION AND RECOMBINATION
未完待续。。。
- ZT 蓝牙的AVCTP协议笔记
蓝牙的AVCTP协议笔记 (2013-07-31 08:52:41) 转载▼ 标签: bluetooth avctp command response 分类: Bluetooth 1.概述 A ...
- ZT 蓝牙的AVDTP协议笔记
我的电子杂烩饭 http://blog.sina.com.cn/wuchuchu2012 [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 Tifnan Qing 微博 加好友 发纸条 写 ...
- 一篇关于蓝牙SDP和L2CAP协议的文章
SDP地址:http://www.cnblogs.com/strive-forever/archive/2011/11/04/2236640.html L2CAP地址:http://www.cnblo ...
- 蓝牙的AVCTP协议笔记
1.概述 AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,它是一个总体的协议,具体的控制信息由其指定的协议(如AVRCP)实现,AVCTP本身只指定控制comm ...
- 蓝牙的AVDTP协议笔记
1.概述 AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL)是用来描述音频/视频在蓝牙设备间的传输的协议,是A2DP协议的基础协议,其在协议栈中 ...
- 蓝牙的OBEX协议
1.概述 OBEX为Object Exchange,用于在蓝牙设备间传数据对象,来源于红外定义的协议,后被蓝牙采用.OBEX在蓝牙协议层中的位置如下图(在之前的OBEX版本中,OBEX是通过R ...
- 蓝牙--对象交换协议(OBEX)
1.OBEX协议概述 OBEX是IrOBEX的简称,IrOBEX协议是红外数据协会IrDA开发的用于红外数据链路上数据对象交换的会话层协议.OBEX是一种紧凑高效的二进制协议,功能类似于HTTP协议. ...
- 蓝牙—服务发现协议(SDP)
服务搜索协议(SDP)提供了应用发现可用服务以及确定可用服务特点的方法.SDP发现协议提供下面的能力 <1>为客户提供搜索所需要服务的能力. <2>允许基于服务类型搜索服务 & ...
- 蓝牙的SDP协议总结
1.概念 SDP协议让客户机的应用程序发现存在的服务器应用程序提供的服务以及这些服务的属性.SDP只提供发现服务的机制,不提供使用这些服务的方法.每个蓝牙设备都需要一个SDP Service, ...
随机推荐
- android 自定义相机画面倒立解决方案
有部分手机的影像是倒立的,如何解决这个问题呢? 请看下面 public static void setCameraDisplayOrientation(Activity activity, int c ...
- Hark的数据结构与算法练习之圈排序
算法说明 圈排序是选择排序的一种.其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字.根据比较移动到不需要移动时,就代表一圈结束.最终要进行n-1圈的比较 ...
- lr参数化——500户并发迭代1次 循环取5条数据
lr参数化——500户并发迭代1次 循环取5条数据 比如vuser1.vuser2.vuser3..........,vuser500 shuju1,shuju2,shuju3,shuju4,shuj ...
- 转 BHO API HOOK Wininet基于IE编程的一些资料
BHO原理:推荐vc base中的文章: 如何使用BHO定制你的Internet Explorer浏览器 API HOOK的基本原理:推荐C++ builder 研究中的文章: API Hook基 ...
- LightOJ1382 The Queue(树形DP)
题目大概是说给一棵树的n个结点从1到n编号,要求每个结点的编号大于其父结点,问有多少种编号方式. 想了挺久的,感觉有点眉目,最后画了下样例YY出解法: 首先求出以每个结点为根的子树大小,记为size[ ...
- BZOJ4060 : [Cerc2012]Word equations
首先通过hash建树 设f[i][j]表示第i个特殊符号从P的第j位开始匹配能到达哪里 记忆化搜索,对于底层贪心匹配. #include<cstdio> #include<cstri ...
- HDU 1241 (DFS搜索+染色)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1241 题目大意:求一张地图里的连通块.注意可以斜着连通. 解题思路: 八个方向dfs一遍,一边df ...
- HDU 4671 Partition(定理题)
题目链接 这题,明显考察搜索能力...在中文版的维基百科中找到了公式. #include <cstdio> #include <cstring> #include <st ...
- TC SRM 584 DIV 2
第一次在DIV2 AK了. 250水题. 500,FLoyd搞出所有边的最短路,然后找最短路,中最长的,如果有不连通的边返回-1 1000,组合DP,各种慌乱,在最后1分钟时,交上了,感觉很棒,最后还 ...
- 《菊与刀》--[美]鲁思·本尼迪克特(Ruth Benedict)
<菊与刀>这本书实在是好看. 下面是一些书摘: * 由在美国曾经全力以赴与之战斗的敌人中,日本人的脾气是最琢磨不透的. * “菊”本是日本皇家家微,“刀”是武家文化的象征. * 日本人的格 ...