我正在将一个字节数组数据写入Android中的BLE设备。调用mGatt.writeCharacteristic(characteristicToWrite);
后调用onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)
回调方法。如果写操作成功,状态将为0,即GATT_SUCCESS = 0
,而不是我接收状态为7即GATT_INVALID_OFFSET = 0x7
。为什么会这样?有谁能够帮我。先谢谢同行。
答案 0 :(得分:0)
因为运行GATT服务器的外围设备写错了。
我假设你有一个“长”值,意味着一个大于一个ATT数据包的值。然后,在以下情况下应发回无效偏移错误:
如果准备值偏移量大于属性的当前长度 然后,对于此客户端,应丢弃所有待处理的准备写入值, 应清除队列,然后发送错误响应 «无效偏移»。
但是每当Android写入Long值时,它会将每个块的偏移量设置为前一个块长度的累积总和。
所以请检查一下外围设备会发生什么。