【发布时间】:2020-07-20 17:59:37
【问题描述】:
问题: 在运行 Android 10 的三星设备 (S10e) 上设置 MTU>23 并将数据写入特性后,连接超时并关闭。
根本原因: 超时的原因是手机硬件实际上没有发送任何东西......所以终端设备没有响应(ack)。
我怎么知道这不是终端设备问题: 其他设备(像素)不会出现此问题,如果 S10 运行 Android 9,也不会出现此问题。
详情: 我们在BluetoothGatt中使用requestMtu将MTU改为185,然后onMtuChanged返回mtu值为185,status为GATT_SUCCESS。 当我们发送较长的大约 40 字节的消息时,BluetoothGatt 的 writeCharacteristic 的返回值为 true,但是 onCharacteristicWrite 回调会给我们一个 133 状态码,这不是 GATT_SUCCESS。然后设备将断开连接。
为什么需要更大的 MTU: 我们期望能够使用更大的 MTU,以便我们可以将数据发送到终端设备以提供 Wi-Fi 凭据。终端设备被构建为一次只接受所有凭据(假设 MTU>23 不会成为问题。所以我们有客户无法使用的现场设备。
问题: 有什么想法或解决方法可以尝试吗?
电话信息: 三星s10e 操作系统:安卓 10 Android 安全补丁:2020 年 3 月 1 日
终端设备信息: ESP32
【问题讨论】:
-
您是否尝试过使用例如 nRF Connect 应用程序来查看那里的行为是否相同?您是否检查过 Android HCI 日志或使用 BLE 嗅探器查看真正发送和接收的消息?
-
是的,到 nRF Connect 应用程序。我现在正沿着原木和嗅探路线走下去,但我担心最坏的情况。
-
今天的新学习:任何介于 24 和 512 之间的 MTU 设置都会导致仅允许 20 个字符的有效负载。您可以将 MTU 设置为 24 并全天发送 20 个字符。您可以将 MTU 设置为 512 并整天发送 20 个字符……但是如果您在任一示例中尝试 21 个字符,手机将“不”发送有效负载,但它认为它确实发送了它……然后超时发生并且连接关闭.
-
这在某处似乎非常错误或错误。你能检查数据包日志吗?
-
@Emil 这周晚些时候我会拿到日志。我以前从未检查过“btsnoop 日志”,但我的直觉是它只会说......(发送数据包......没有响应......超时)。 “btsnoop 日志”真的比这更深吗?您推荐哪些工具来捕获数据包日志?
标签: android kotlin bluetooth bluetooth-lowenergy samsung-mobile