L2CAP - Logical Link Control and Adaptation Protocol
L2CAP协议提供更高层面的多路复用协议和数据包封装能力。L2CAP是RFCOMM和BNEP协议的基础。L2CAP是整个蓝牙协议栈里不需要直接被应用调用的模块。但是当你自己开发一个蓝牙协议栈的时候,直接访问L2CAP是有意义的。
L2CAP服务能力
下面可能出现的缩写解释:
PSM:Protocol and Service Multiplexer
MTU:maximal transfer unit
ERTM:Enhanced Retransmission Mode
CBM:Credit-Based Flow-Control Mode
ECBM:Enhanced Credit-Based Flow-Control Mode
LE:Low Energy
1,L2CAP提供5种信道类型:
L2CAP_CHANNEL_TYPE_CLASSIC, // Classic Basic or ERTM
L2CAP_CHANNEL_TYPE_CONNECTIONLESS, // Classic Connectionless
L2CAP_CHANNEL_TYPE_CHANNEL_CBM, // LE
L2CAP_CHANNEL_TYPE_FIXED, // LE ATT + SM, Classic SM
L2CAP_CHANNEL_TYPE_CHANNEL_ECBM // Classic + LE
2,L2CAP提供5种连接方式:
BASIC:一般蓝牙连接
ERTM:增强重发模式
CBM:可信连接模式
ECBM:增强可信连接模式
LE:低功耗连接模式
3,L2CAP提供的主要方法:
l2cap_init
l2cap_add_event_handler
l2cap_remove_event_handler
l2cap_create_channel
l2cap_disconnect
l2cap_reister_service
l2cap_unregister_service
l2cap_accept_connection
l2cap_decline_connection
l2cap_can_send_packet_now
l2cap_request_can_send_now_event
l2cap_reserve_packet_buffer
l2cap_get_outgoing_buffer
l2cap_send_prepared
l2cap_release_packet_buffer
远程访问L2CAP服务
L2CAP是建立在channel上的服务。每个channel都是一个建立在基带上的逻辑链路。每个channel都可绑定一个协议(协议可以绑定多个channel)。多个channel共用一个基带。
远端设备访问本地L2CAP服务的步骤:
1,本地应用初始化L2CAP服务,l2cap_init
2,本地应用建立对外channel并对应远端设备使用的PSM,l2cap_create_channel
3,本地应用注册服务,l2cap_register_service
4,本地应用等待远端设备的L2CAP的连接请求,可以接受也可以拒绝
5,如果接受连接那么进入channel会被打开,然后就可以发送接受远端数据了,l2cap_send
6,为了避免发送速度大于实际空口能力建议在发送前确认是否可发,l2cap_request_can_send
LE数据channel:
发送LE数据需要用LE专属的信道模式,LE CBM。在这个模式下,数据是通过SDUs(Service Data Units)进行发送的,发送数据的大小大于HCI LE ACL的包大小。
LE的数据channel和经典的L2CAP信道相似,但是也提供CBM连接方式。除非4.2的标准被应用,最大的可发包大小为27字节。为了发送更大的数据可以分拆成多个ACL包进行发送。
备注:
蓝牙版本
蓝牙技术联盟自成立以来,发布的蓝牙标准主要有五个版本:
1. 蓝牙1.0:基本码率(BR),空中速率1Mbps,采用GFSK调制方式;
2. 蓝牙2.0:增强码率(EDR),空中速率2~3Mbps,采用DPSK、QPSK调制方式;
3. 蓝牙3.0:高速(HS),空中速率24Mbps,采用802.11调制方式,并引入了全新的交替射频技术;
4. 蓝牙4.0:蓝牙技术的第一个综合性规范,不仅包括了传统蓝牙技术(BR/EDR)和高速蓝牙技术(HS),还加入了全新的低功耗蓝牙技术,空中速率24Mbps;
5. 蓝牙5.0:目前蓝牙技术的最新版本,针对物联网的应用做了很多优化,空中速率24Mbps。