wandersnail / easyble-x

A simple framework for Android Bluetooth Low Energy (BLE)
Apache License 2.0
156 stars 37 forks source link

请问下,已经设置MTU成功,为什么有时还是会出现发送的数据断帧? #16

Closed phoebewow closed 3 years ago

phoebewow commented 4 years ago

MTU设置为150,发送数据大多数都正常,可以完整发送,但偶尔在发送时却会发生发送的数据被分包的情况,这个有解决方法吗? 还有就是有时发送的数据,明明相隔了超过50毫秒,但在下位机中却是收到粘包的数据

wandersnail commented 4 years ago

每次发送的时候都需要设置包大小为MTU-3。 下位机粘包问题,不能完全指望延时来解决,因为读buffer的时候就可能已有多个包在buffer里了,应该根据协议在下位机程序里自行拆包。不然你下位机读buffer的周期需小于app发送包延时

phoebewow commented 4 years ago

val options = WriteOptions.Builder() .setPackageSize(data.size) .setPackageWriteDelayMillis(5) .setRequestWriteDelayMillis(10) .setWaitWriteResult(true) .setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE) .build() builder.setWriteOptions(options) connection?.execute(builder.build())

是这样子吗?我的最大MTU是158的

wandersnail commented 4 years ago

是的

phoebewow commented 4 years ago

按照上面的方法,现在好像不会出现断帧的情况了,还需要多测一下,另外还想问问,这个自动分包的发送间隔,按设置来看是间隔5MS,但我用逻辑分析仪来看的话,自动分的包每个包间隔了44MS,部分更是高达104MS