L2CAP的基本模式(basic mode)数据格式

只愿长相守 提交于 2020-08-18 06:23:43

一. 声明


本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

------------------------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

------------------------------------------------------------------------------------------------------------------------------------------

二. L2CAP数据格式

L2CAP的数据格式除非特别声明,否则都是小端

L2CAP一共有记下几个操作模式

• Basic L2CAP Mode((equivalent to L2CAP specification in Bluetooth v1.1) 默认模式,在未选择其他模式的情况下,用此模式。

• Flow Control Mode,此模式下不会进行重传,但是丢失的数据能够被检测到,并报告丢失。

• Retransmission Mode,此模式确保数据包都能成功的传输给对端设备。

• Enhanced Retransmission Mode,此模式和重传模式类似,加入了Poll-bit等提高恢复效率。

• Streaming Mode,此模式是为了真实的实时传输,数据包被编号但是不需要ACK确认。设定一个超时定时器,一旦定时器超时就将超时数据冲掉。

• LE Credit Based Flow Control Mode,被用于LE设备通讯。

• Enhanced Credit BasedFlow Control Mode

1. 面向连接的基本模式数据格式(CONNECTION-ORIENTEDCHANNELS IN BASIC L2CAP MODE)

格式如下,面向连接的基本模式称为B-frame

参数:

Length:Information payload的长度

Channel ID:The channel ID (CID) identifies the destination channel endpoint of the packet.

Infomation payload:就是后面的数据,有可能是L2CAP本身的(比如signal通道),也有可能是上层协议

我们找一个B-frames来看下

其中:

0x0e 0x00 -> payload len是0xe,也就是CID后面黄色长度

0x40 0x00-> CID为0x0040.

2.无连接的基本模式数据格式(CONNECTIONLESS DATACHANNEL IN BASIC L2CAP MODE)

格式如下,无连接的基本模式称为G-frame

参数:

Length:InFormation payload + PSM的长度

CID:固定0x0002

PSM(Protocol/Service Multiplexer):主要就是用于标识协议的,协议的PSM具体参照,

https://www.bluetooth.com/specifications/assigned-numbers/logical-link-control/

如下:

Protocol and Service Multiplexers (PSMs)

Protocol PSM Reference
SDP 0x0001 See Bluetooth Service Discovery Protocol (SDP), Bluetooth SIG
RFCOMM 0x0003 See RFCOMM with TS 07.10, Bluetooth SIG
TCS-BIN 0x0005 See Bluetooth Telephony Control Specification / TCS Binary, Bluetooth SIG
TCS-BIN-CORDLESS 0x0007 See Bluetooth Telephony Control Specification / TCS Binary, Bluetooth SIG
BNEP 0x000F See Bluetooth Network Encapsulation Protocol, Bluetooth SIG
HID_Control 0x0011 See Human Interface Device, Bluetooth SIG
HID_Interrupt 0x0013 See Human Interface Device, Bluetooth SIG
UPnP 0x0015 See [ESDP], Bluetooth SIG
AVCTP 0x0017 See Audio/Video Control Transport Protocol, Bluetooth SIG
AVDTP 0x0019 See Audio/Video Distribution Transport Protocol, Bluetooth SIG
AVCTP_Browsing 0x001B See Audio/Video Remote Control Profile, Bluetooth SIG
UDI_C-Plane 0x001D See the Unrestricted Digital Information Profile [UDI], Bluetooth SIG
ATT 0x001F See Bluetooth Core Specification
​3DSP 0x0021​ ​​See 3D Synchronization Profile, Bluetooth SIG.
​LE_PSM_IPSP ​0x0023 See Internet Protocol Support Profile (IPSP), Bluetooth SIG
OTS 0x0025 See Object Transfer Service (OTS), Bluetooth SIG
EATT 0x0027 See Bluetooth Core Specification

我们的代码定义如下:

/* Protocol and service multiplexor */
#define SDP_PSM 0x0001
#define RFCOMM_PSM 0x0003
#define TCS_BIN_PSM 0x0005
#define TCS_BIN_CORDLESS_PSM 0x0007
#define BNEP_PSM 0x000F
#define HID_CONTROL_PSM 0x0011
#define HID_INTERRUPT_PSM 0x0013
#define UPNP_PSM 0x0015
#define AVCTP_PSM 0x0017
#define AVDTP_PSM 0x0019
#define AVCTP_BROWSING_PSM 0x001B
#define UDI_C_PLANE 0x001D
#define ATT_PSM 0x001F
#define DSP_3_PSM 0x0021
#define LE_PSM_IPSP_PSM 0x0023
#define OTS_PSM 0x0025
#define EATT_PSM 0x0027

InFormation payload:上层协议的数据。

我们没有K-frame的btsnoop,所以就不贴了

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!