当前位置: 首页 > 工具软件 > BluetoothKit > 使用案例 >

android ble广播分包,BLE分包写 · Issue #25 · dingjikerbo/Android-BluetoothKit · GitHub

尚嘉勋
2023-12-01

BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

总体流程如下:

1、发端发送控制包,告诉对方要发送的总的包数

2、收端回一个ACK包,表示准备好了,对方可以发送了

3、发端开始批量发送数据,为了速度,不需要对端回复

4、收端收到最后一个包或超时后,开始检查还缺哪些包,然后回复ACK,带上丢的包序号

5、发端重发丢的包

6、收端全部收到,回复ACK,CRC校验,包数据拼接好了传到上层

这里面核心是状态机,另外要注意对于BLE来说,主端和从端都可以收发数据,但是是非对称的。对主端来说,发是write characteristic,收是onCharacteristicChanged,对从端来说,发是sendNotify,收是onCharacteristicWrite。尽管如此,但是协议部分是相同的,所以我们要抽象成两层,底层是收发的物理层,上层是分包的协议层,再上层就是业务层。

 类似资料: