BluetoothGatt:协商新的 MTU 成功,但无法使用新的大小(相差 3 个字节)

2024-01-23

我正在开发一个使用 BLE 在设备之间交换数据的应用程序。

为了获得更好的性能,在连接两个设备后,我正在协商增加 MTU,以便通过 BLE 交换更大的数据包。

连接蓝牙设备并读取所有服务和特征后,我请求使用以下方法增加 MTU:

private void requestMtu() {
    //gatt is a BluetoothGatt instance and MAX_MTU is 512
    this.gatt.requestMtu(MAX_MTU);
}

之后,在BluetoothGattCallback我得到 MTU 请求成功,并且新的 MTU 与我请求的 MTU 匹配:

@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
    super.onMtuChanged(gatt, mtu, status);

    if (status == BluetoothGatt.GATT_SUCCESS) {
        this.supportedMTU = mtu;
    }
}

问题是,当我尝试发送512字节的数据包时,在另一边(onCharacteristicWriteRequest:)我得到 509 字节。

有任何想法吗?


MTU 大小表示 ATT 有效负载中可使用的最大字节数。 ATT 写入请求有效负载(为特征写入而发送)如下所示:

1字节属性操作码 2字节属性句柄 N字节属性值

由于 MTU 大小为 512 字节,因此最大大小 N 可以为 512 - 3 = 509 字节

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BluetoothGatt:协商新的 MTU 成功,但无法使用新的大小(相差 3 个字节) 的相关文章

随机推荐