| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 蓝牙核心规范(V5.2)7.0-深入详解之L2CAP(1)(五星推荐☆☆☆☆☆) -> 正文阅读 |
|
[Java知识库]蓝牙核心规范(V5.2)7.0-深入详解之L2CAP(1)(五星推荐☆☆☆☆☆) |
目录 ?1.?L2CAP作用??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.?L2CAP架构? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ?? 3..CID(通道标识符)?????????????????????????????????????????????????????????????????? ????? 4.?数据包格式?????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 4.1.?基本L2CAP模式下的面向连接的通道??????????????????????????????????????????????? 4.2.?基本L2CAP模式下的面向无连接的通道??????????????????????????????????????? ? ? 4.3.?在重传/流体控制/流媒体模式中的面向连接的信道????? ? ? ? ? ? ? ? ? ? ? ?? ?4.3.4?信息有效载荷字段????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 5.?信号包格式???????????????????????????????????????????????????????????????????????????????? ?5.1?L2CAP_COMMAND_REJECT_RSP(代码为0x01)?????????????????????????? ?6.?配置参数选项???????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ?6.1?? 最大传输单元(MTU)??????????????????????????????????????????????????????????????????? ?6.2?? 刷新超时选项?????????????????????????????????????????????????????????????????????????????????? ?6.3?? 服务质量(qos)选项????????????????????????????????????????????????????????????????????????? ?6.4?? 重传输和流量控制选项?????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ??? ?6.5?? 帧检查顺序(fcs)选项???????????????????????????????????????????????????????????????????? ?6.6?? 扩展流量规范选项???????????????????????????????????????????????????????????????????????? ?6.7?? 扩展窗口大小选项?????????????????????????????????????????????????????????????????????????
?1.?L2CAP作用??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
????????2.?L2CAP层提供逻辑通道,称为L2CAP通道的逻辑通道,在一个或多个逻辑链路上多路复用。
? 2.?L2CAP架构? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ???
?
?
?
?
3..CID(通道标识符)?????????????????????????????????????????????????????????????????? ?????????????通道标识符(CID)是表示设备上的逻辑通道端点的本地名称。cid的范围与逻辑链接相关,如图2.1所示。空标识符(0x0000)不得用作目标端点。从0x0001到0x003F的标识符为特定的L2CAP函数保留。这些通道被称为固定通道。至少应支持L2CAP信道(固定通道0x0001)或L2CAP LE信道(固定通道0x0005)。如果支持固定通道0x0005,则应支持固定通道0x0004和0x0006(见表2.2)。可以支持其他固定通道。L2CAP_INFORMATION_REQ/L2CAP_INFORMATION_RSP机制(应用于确定远程设备在ACL-U逻辑链路上支持哪些固定通道。? ????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.?数据包格式?????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
4.1.?基本L2CAP模式下的面向连接的通道???????????????????????????????????????????????
4.2.?基本L2CAP模式下的面向无连接的通道??????????????????????????????????????? ? ?
4.3.?在重传/流体控制/流媒体模式中的面向连接的信道????? ? ? ? ? ? ? ? ? ? ? ???4.3.1?L2CAP头字段? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
??4.3.2?控制字段? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ??S帧和I帧都包含控制域,控制域有三种:?
控制字段有两种帧类型:信息帧类型和监控帧类型 。
????????I帧应用场景:L2CAP实体间信息传输。
?
? ? ? ? S帧应用场景:?用于确认i帧并请求i帧的重新传输。 ?
?4.3.3?L2CAP SDU长度字段? ? ? ????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ?????????当SDU跨越多个i帧时,应通过SAR=0b01=“L2CAPSDU的开始”识别序列中的第一个SDU帧。???????? ????????L2CAP SDU长度字段应指定SDU中八位数的总数。L2CAP SDU Length字段应出现在带有SAR=0b01(L2CAPSDU的开始)的I帧中,并且不得用于任何其他I帧中。当SDU未分段(SAR=0b00)时,不需要L2CAPSDU长度字段,也不应存在。? ??4.3.4?信息有效载荷字段????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?? ? ? ? ?注意其长度。 ???4.3.5?FCS字段???????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? ? ? ?帧检查序列(FCS)一共2个字节。 ????????FCS由生成器多项式g(D)=D^16+D^15+D^2+1构建. ????????16位LFSR最初加载的值为0x0000,如图3.11所示。开关S设置在位置1,数据移入,LSB first在最后一位进入LFSR后,开关设置在位置2,寄存器内容从右到左传输(从位置15开始,然后是位置14等)。 ?????????FCS生成的例子: ????????1.I帧 ? ? ? ? Length=14 ? ? ? ? Control=0x0002(2 (SAR=0b00, ReqSeq=0b000000, R=0, TxSeq=0b000001)?
????????Information Payload = 00 01 02 03 04 05 06 07 08 09 (10 octets, hexadeci-
mal notation)
?????????===>FCS = 0x6138 ????????===>Dato to Send?= 0E 00 40 00 02 00 00 01 02 03 04 05 06 07 08 09 38 61 ?
(hexadecimal notation)
????????2.RR帧
????????Length = 4
????????Control = 0x0101 (ReqSeq=0b000001, R=0, S=0b00)
????????==> FCS = 0x14D4
????????==> Data to Send = 04 00 40 00 01 01 D4 14 (hexadecimal notation)
4.4.?基于信用的流量控制模式的连接通道和增强基于信用的流量控制模式??????????????????????????????????????????????????????????????????????????????????????????????????????????????4.4.1?L2CAP Header字段????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????Length:2+L2CAP SDU Length) ????????CID:标识数据包的目标通道端点。 ?4.4.2?L2CAP SDU Length字段?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????SDU的第一个K帧应包含L2CAPSDU Length字段,该字段应指定SDU中八进制的总数。所有属于同一SDU的后续k帧不应包含L2CAP SDU? Length字段。 ?4.4.3 ?information Payload field字段???????????????????????????????????????????????????????????????????????? ????注意长度。 5.?信号包格式?????????????????????????????????????????????????????????????????????????????????????????下面主要介绍在对等设备上的两个L2CAP实体之间传递的信号命令。 ????????通过ACL-U逻辑链路管理信道的信道应使用CID0x0001,通过LE-U逻辑链路管理信道的信道应使用CID0x0005。 ????????一旦设置了底层逻辑传输并启用了L2CAP流量,信令通道就可用。 ????????通过固定通道CID0x0001,可以在单个c帧中发送多个命令,而通过固定通道CID0x0005,每个c帧只需要发送一个命令。命令采用请求、响应和指示的形式执行。所有L2CAP实现都应支持接收有效载荷长度不超过信令MTU的c帧。C帧(MTUsig)的最小支持有效载荷长度见表4.1。L2CAP实现不应该使用超过对等设备MTUsig的C帧。如果设备接收到一个超过其MTUsig的C帧,则它应发送一个包含所支持的MTUsig的L2CAP_COMMAND_REJECT_RSP。实现程序应能够处理通过固定通道CID0x0001发送的L2CAP数据包中的多个命令的接收。
?????????Code:标识命令的类型.当在接收的信令通道上使用未知或不允许的代码字段接收包时,将响应发送L2CAP_COMMAND_REJECT_RSP包。 ?Identifier ????????请求设备设置此字段,并且响应设备在其响应中使用相同的值。在每个信道内,每个连续命令应使用不同的标识符。在在命令中原始传输一个标识符之后,如果随后使用了所有其他标识符,则可以回收该标识符。 ?????????RTX和ERTX计时器用于确定远程终端何时不响应信令请求。在RTX或ERTX计时器到期时,如果重新发送了重复的请求,则应使用相同的标识符。 ????????在特定信令信道上接收重复请求的设备应在同一信令信道上进行重复响应的响应。带有无效标识符的命令响应将被静默地丢弃。信号标识符0x00是一个非法标识符,不得在任何命令中使用。 ?Length ????????仅表示命令的数据字段的大小,即它不包括代码、标识符和长度字段。 Data ?????????数据字段的长度是可变的。代码字段确定数据字段的格式。长度字段决定了数据字段的长度。 ?5.1?L2CAP_COMMAND_REJECT_RSP(代码为0x01)???????????????????????????????????当具有未知命令码的响应不合适时,应发送L2CAP_COMMAND_REJECT_RSP包。该标识符应与被拒绝的命令数据包的标识符相匹配。实现程序应始终发送这些数据包,以响应未知的信号数据包。L2CAP_COMMAND_REJECT_RSP数据包不应该响应于已标识的响应数据包。 ????????当L2CAP包中包含多个命令,并且包超过接收机的信令MTU(MTUsig)时,应响应发送单个L2CAP_COMMAND_REJECT_RSP包。该标识符应与L2CAP数据包中的第一个请求命令相匹配。如果只识别响应,则应悄悄丢弃数据包。? ?数据字段包括: ????????Reason? ?6.?? 配置参数选项???????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?
?6.1?? 最大传输单元(MTU)???????????????????????????????????????????????????????????????????? ?MTU向远程设备指示本地设备可以在此通道中接收到大于最小要求的MTU。所有L2CAP实现应支持ACL-U逻辑链接和23个八进制上的LE-U逻辑链接至少48八位的MTU.然而,一些协议和概要文件明确地需要支持更大的MTU。一个信道的最小MTU是L2CAP最小48位MTU中较大的一个,以及使用该信道的协议和配置文件明确要求的任何MTU。
?6.2?? 刷新超时选项??????????????????????????????????????????????????????????????????????????????????? ?此选项用于通知接收者发送者将使用的刷新超时。如果使用了扩展流规范,则不得使用此选项。类型为0x02,有效载荷大小为2个字节。刷新超时选项是配置的。 如果远程设备对此选项返回负响应,而本地设备不能尊重建议值,则应通过发送原始值的新请求继续配置过程,或者断开通道连接。刷新超时适用于同一ACL逻辑传输上的所有通道,但通过HCIACL数据包中的Packet_Boundary_Flag标记单个L2CAP数据包为不可自动切换的,可以在数据包上覆盖。 Flush Timeout:
?6.3?? 服务质量(qos)选项??????????????????????????????????????????????????????????????????????????????????如果没有协商出QoS配置参数,则链路应假设为默认参数。QoS选项为0x03的类型。如果使用了“扩展流规范”选项,则不应使用此选项。QoS选项是可以协商的。图6.4指定了此选项的格式。???????? ????????在L2CAP_CONFIGURATION_REQ中,此选项描述了来自发送请求的设备的传出流量。在正L2CAP_CONFIGURATION_RSP中,此选项描述了对发送响应的设备的传入流量流协议。在负L2CAP_CONFIGURATION_RSP中,此选项描述到发送响应的设备的首选传入流量。? ?????????L2CAP实现只需要支持“最优结果”服务,对任何其他服务类型的支持都是可选的。最好的努力不需要任何保证。如果请求中没有放置QoS选项,则应假设为最佳努力。如果需要任何QoS保证,则应发送一个QoS配置请求。 ????????远程设备的L2CAP_CONFIGURATION_RSP包含取决于结果字段值的信息。如果请求是为了保证服务,则响应应包括请求中包含的任何通配符参数的具体值。如果结果是“故障-不可接受的参数”,响应应包括一份输出流量规格参数列表和使远程设备可以从本地设备接受新L2CAP_CONNECTION_REQ的参数值。在L2CAP_CONFIGURATION_REQ中显式引用或隐含的配置参数都可以包含在L2CAP_CONFIGURATION_RSP中。回想一下,L2CAP_CONFIGURATION_REQ中缺失的配置参数都具有它们最近接受的值。 ????????如果L2CAP_CONFIGURATION_REQ包含任何设置为“不关心”的QoS选项参数,那么L2CAP_CONFIGURATION_RSP应将相同的参数设置为“不关心”。此规则同时适用于最佳结果和有保证的服务。 ?Flags:预留
Service Type:
?????????此字段表示所需的服务级别。表5.1定义了可用的不同服务。默认值为“Best effort”。 ????????如果选择了“最佳努力”,则远程设备应将其余参数视为可选参数。远程设备可以选择忽略这些字段,尝试满足这些参数,但不提供任何响应(在响应消息中省略了QoS选项),或使用它将尝试满足的设置进行响应。 ????????如果选择了“无流量”,则应忽略其余的字段,因为没有跨通道向输出方向发送的数据。 Token Rate(4字节)? ?????????该字段的值表示应用程序传输数据的平均数据速率。应用程序可以以这个速率连续地发送数据。在短时间范围内,应用程序可能发送的数据会超过平均数据速率,这取决于指定的令牌桶大小和峰值带宽(见下文)。令牌桶的大小和峰值带宽允许应用程序以一种“突发”的方式传输数据。 ?????????在两个L2CAP对等点之间发出的令牌速率是由应用程序传输的数据,应排除L2CAP协议的开销。通过L2CAP和链路管理器之间的接口发出的令牌速率应包括L2CAP协议开销。此外,通过该接口发出信号的令牌速率值还可以包括将多个L2CAP通道聚合到同一ACL逻辑传输上。 ?????????令牌速率是提供流量信用的比率。积分可以累积到令牌桶的大小。当应用程序传输数据时,就会消耗流量积分。当流量传输,可用信用不足时,流量不合格。服务质量保证只提供给合格的流量。对于不符合条件的流量,可能缺少带宽和缓冲空间等资源。此外,不符合的流量可能违反其他流量的QoS保证。 ????????令牌速率值0x00000000表示没有指定令牌速率。这是默认值,表示“不在乎”。当选择了被担保的服务时,不应使用默认值。值0xFFFFFFFF是与可用的最大令牌速率相匹配的通配符。此值的含义取决于服务类型。为了尽最大努力,这个值是提示应用程序想要尽可能多的带宽。对于有保证的服务,该值表示在请求时可用的最大带宽。 ?Token Bucket Size ???????????令牌桶大小指定了应用程序可以用来传输数据的“突发性”的限制。该应用程序可以立即提供等于令牌桶大小的数据突发,但受峰值带宽的限制。令牌桶的大小以八进制的形式指定。 ????????在两个L2CAP对等点之间发出的令牌桶大小是由应用程序传输的数据,应排除L2CAP协议的开销。在L2CAP和链路管理器之间的接口上显示的令牌桶大小应包括L2CAP协议开销。此外,此接口上的令牌桶大小值可能包括将多个L2CAP通道聚合到同一ACL逻辑传输上。 ????????值0x000000000表示不需要令牌桶;这是默认值。当选择了被担保的服务时,不应使用默认值。值0xFFFFFFFF是与最大令牌桶匹配的通配符。此值的含义取决于服务类型。为了尽最大努力,该值表示应用程序需要一个尽可能大的桶。对于有保证的服务,该值表示最大的L2CAPSDU大小。? ????????令牌桶大小是通过L2CAP通道所携带的流量的一个属性。最大传输单元(MTU)是L2CAP实现的一个属性。对于有保证的服务,令牌桶的尺寸应小于或等于MTU。
Peak Bandwidth
????????限制了连续发送来自应用程序的数据包的速度。一些系统可以利用这些信息,从而实现更有效的资源分配。
????????在两个L2CAP对等点之间发出的峰值带宽信号指定了由应用程序传输的数据,并应排除L2CAP协议的开销。通过L2CAP和链路管理器之间的接口发出的峰值带宽应包括L2CAP协议开销。此外,该接口上的峰值带宽值可能包括将多个L2CAP通道聚合到同一个ACL逻辑传输上。
????????在两个L2CAP对等点之间发出的峰值带宽信号指定了由应用程序传输的数据,并应排除L2CAP协议的开销。通过L2CAP和链路管理器之间的接口发出的峰值带宽应包括L2CAP协议开销。此外,该接口上的峰值带宽值可能包括将多个L2CAP通道聚合到同一个ACL逻辑传输上。
?????????0x000000000的值表示“不在乎”。这说明设备对传入的最大带宽没有偏好,并且是默认值。当选择了被担保的服务时,不应使用默认值。
Access Latency
?????????该字段的值是L2CAP数据包到空中接口的最大可接受延迟。对这个数字的精确解释取决于这个流参数在哪个接口上发出信号。当在两个L2CAP对等点之间发出信号时,访问延迟是从上层接收到L2CAPSDU和L2CAPSDU通过空中传输开始之间的最大可接受的延迟。当通过L2CAP和链路管理器之间的接口发出信号时,是L2CAPPDU的第一个片段存储在控制器缓冲区中与L2CAP包的初始传输之间的最大延迟。 ????????因此,当在L2CAP和链路管理器之间发出信号以解释在L2CAP传输侧的任何排队延迟时,访问延迟值可能会有所不同。此外,访问延迟值可能包括将多个L2CAP通道聚合到同一个ACL逻辑传输上。 ????????访问延迟以微秒为单位表示。值0xFFFFFFFF表示“不关心”,为默认值。当选择了被担保的服务时,不应使用默认值。
Delay Variation
?????????该字段的值是两个L2CAP对等点之间的L2CAPSDU的最大可能延迟和最小可能延迟之间的差值,以微秒为单位。延迟变化是一个纯粹的信息参数。值0xFFFFFFFF表示“不关心”,为默认值。 ?6.4?? 重传输和流量控制选项?????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ????6.5?? 帧检查顺序(fcs)选项??????????????????????????????????????????????????????????????????????6.6?? 扩展流量规范选项??????????????????????????????????????????????????????????????????????????????? ?6.7?? 扩展窗口大小选项?????????????????????????????????????????????????????????????????????????????????? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/31 10:34:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |