基于 L2CAP 协议的蓝牙 BLE 设备通信指南

蓝牙 BLE 是什么

蓝牙BLE,即蓝牙低功耗 (Bluetooth Lower Energy)是一种蓝牙通信标准,设计用于短距离通信和低功耗应用。

相比经典蓝牙,BLE 更加节能,传输距离更远,连接更快。BLE 主要用于健身设备、医疗设备、家居自动化等场景。

蓝牙 BLE 设备的连接

信道

L2CAP的基本概念是信道(Signaling Channel)。信道是个抽象概念,表示两个设备某个协议层之间的通道。每个信道分配一个2字节的信道ID——CID(Channel ID),每个信道功用不同,比如CID=0x0004的信道表示属性协议(Attribute Protocol)专用信道。对于BLE协议,L2CAP共有三个信道ID:

  • 0x0004 – 属性协议
  • 0x0005 – 低功耗信令信道
  • 0x0006 – 安全管理协议

其他信道则用于经典蓝牙。协议复用可以理解为,不同的协议走不同的信道,互不干扰。

代码

#define ATT_CID 4;

// 创建 L2CAP socket
int s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);

// 绑定 L2CAP socket
struct sockaddr_l2 bind_addr = {0};
bind_addr.l2_family = AF_BLUETOOTH;
bind_addr.l2_cid = htobs(ATT_CID); // ATT 信道 CID
bdaddr_t any_addr = {
 
 {0, 0, 0, 0, 0, 0}};
bacpy(&bind_addr.l2_bdaddr, &any_addr);
bind_addr.l2_bdaddr_type = BDADDR_LE_PUBLIC;
int err = bind(s, (struct sockaddr *)&bind_addr, sizeof(bind_addr));
if (err) {
    return -1;
}

// 连接 L2CAP socket
struct sockaddr_l2 conn_addr = {0};
conn_addr.l2_family = AF_BLUETOOTH;
conn_addr.l2_cid = htobs(ATT_CID); // ATT CID
str2ba(mac_address.c_str(), &conn_addr.l2_bdaddr);
conn_addr.l2_bdadd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jax在coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值