BLE L2CAP层中,数据传输时常涉及到将较大的数据包拆分成多个较小的片段或分段,以便更好地适应传输过程中的限制条件。处理这个问题的方式有两种:分段和分片。
分段是指在将数据拆分成若干较小的数据块时,直接按照一定大小进行分割,每个分段的大小都是相等的。在BLE的L2CAP层中,这个大小为64字节。如下代码示例使用L2CAP分段的方法传输数据:
bt_status_t l2cap_send_segments(uint16_t handle, uint16_t cid, const uint8_t* data, uint32_t len) {
uint32_t offset = 0;
uint32_t remain = len;
while (remain > 0) {
uint32_t size = (remain > L2CAP_DEFAULT_MTU) ? L2CAP_DEFAULT_MTU : remain;
bt_status_t status = send_l2cap_packet(handle, cid, data + offset, size);
if (status != BT_STATUS_SUCCESS) {
return status;
}
remain -= size;
offset += size;
}
return BT_STATUS_SUCCESS;
}
分片是指将数据拆分成多个大小不一的片段,每个片段的大小由传输时的实际限制条件决定。在BLE的L2CAP层中,片段大小通常由接收端的MTU(Maximum Transmission Unit,最大传输单元)和双方协商的MTU共同决定。如下代码示例使用L2CAP分片的方法传输数据:
bt_status_t l2cap_send_fragments(uint16_t handle, uint16_t cid, const uint8_t* data, uint32_t len) {
uint32_t offset = 0;
uint32_t remain = len;
while (remain > 0) {
uint32_t size =