我为 BLE 设备编写了固件,接收数据包时需要 40 个字节。
我的问题是:我的 android 设备是否需要接收事件“onMtuChanged()”才能发送超过 23 个字节?换句话说,这个回调是否允许我的设备发送超过 23 个字节?
其次,有没有办法让我在 android 内部设置 MTU 大小,这样我就不必请求 MTU 交换?我的 BLE 设备在接收到数据(网状网络的一部分)后断开连接,因此我每次发送数据时都必须交换 MTU 请求。它大大减慢了传输速度。
我为 BLE 设备编写了固件,接收数据包时需要 40 个字节。
我的问题是:我的 android 设备是否需要接收事件“onMtuChanged()”才能发送超过 23 个字节?换句话说,这个回调是否允许我的设备发送超过 23 个字节?
其次,有没有办法让我在 android 内部设置 MTU 大小,这样我就不必请求 MTU 交换?我的 BLE 设备在接收到数据(网状网络的一部分)后断开连接,因此我每次发送数据时都必须交换 MTU 请求。它大大减慢了传输速度。
要允许传输超过默认 MTU,必须协商新的 MTU。根据规范,禁止在未交换较大 MTU 的情况下发送较大的数据包。您可以从 Android 端(正如您已经发现的那样)或从外围设备端(在这种情况下 Android 不会给您任何回调)启动 MTU 更改。
如果您不喜欢执行此操作所需的额外往返,为什么不发送两个无响应写入数据包?这将适合 40 个字节,并且可以在单个连接事件期间发送。
这允许发送超过 23 个字节。
您可以使用片段:<br>
gatt.requestMtu(MTU);//MTU is that you want to send bytes
回调将onMtuChanged(BluetoothGatt, int, int)
指示此操作是否成功。
如果你不是每次都交换 MTU 请求,你应该通过官方方式重新连接,gatt
不要null
在每次你想再次发送字节时保留。