我正在开发一个 BLE 应用程序。我已经完成了在移动应用程序(CENTRAL - BluetoothGattClient)和外围设备(GATT SERVER)之间建立通信,尽管不是很整齐。
PERIPHERAL 有一项服务,该服务又具有 CENTRAL 已启用通知的单一特征。双方的读/写都是通过这个特性发生的
这是来自 CENTRAL(移动)端的完整通信流程
问题 1
有时,在接收来自 PERIPHERAL 的多个数据包时,我会在完成写入 ACK(步骤 9)之前收到读取通知 - 'onCharcteristicChanged()',即在 onCharctristicWrite() 之前调用 onCharcteristicChanged()。
在这种情况下,虽然我发出 bleGatt.readCharacteristic(charac) 但 onCharactristicRead() 永远不会被调用。中央卡住了。等待时无法读取。
问题 2
有时,在发送 ACK 时,在发出 bleGatt.writeCharactristic(charac) 后,不会调用 onChactristicWrite(),因此 PERIPHERAL 没有收到 ACK 并且通信停止。
问题 3
整体沟通非常缓慢。写入一大块(<=20 字节)数据需要 > 400 毫秒。
有没有更好的策略来正确同步读/写?我试图通过使用 BluetoothGattCallbacks 来做到这一点,但正如解释的那样,它无法正常工作。
可以做些什么来提高通信速度?
READ 和 WRITE 都发生在同一个线程中。
我已经在 Moto E (Marshmallow)、Moto G5 (Nougat) 和 Samsung S6 (Lollipop) 上对此进行了测试。跨设备的行为是一致的。
我的外围设备是nRF52840。
谢谢