1

我为 BLE 设备编写了固件,接收数据包时需要 40 个字节。

我的问题是:我的 android 设备是否需要接收事件“onMtuChanged()”才能发送超过 23 个字节?换句话说,这个回调是否允许我的设备发送超过 23 个字节?

其次,有没有办法让我在 android 内部设置 MTU 大小,这样我就不必请求 MTU 交换?我的 BLE 设备在接收到数据(网状网络的一部分)后断开连接,因此我每次发送数据时都必须交换 MTU 请求。它大大减慢了传输速度。

4

2 回答 2

1

要允许传输超过默认 MTU,必须协商新的 MTU。根据规范,禁止在未交换较大 MTU 的情况下发送较大的数据包。您可以从 Android 端(正如您已经发现的那样)或从外围设备端(在这种情况下 Android 不会给您任何回调)启动 MTU 更改。

如果您不喜欢执行此操作所需的额外往返,为什么不发送两个无响应写入数据包?这将适合 40 个字节,并且可以在单个连接事件期间发送。

于 2018-02-25T09:49:03.627 回答
0

这允许发送超过 23 个字节。

您可以使用片段:<br> gatt.requestMtu(MTU);//MTU is that you want to send bytes

回调将onMtuChanged(BluetoothGatt, int, int)指示此操作是否成功。

如果你不是每次都交换 MTU 请求,你应该通过官方方式重新连接,gatt不要null在每次你想再次发送字节时保留。

于 2018-02-26T03:26:45.447 回答