为什么onCharacteristicWrite回调中的状态变为GATT_INVALID_OFFSET?

时间:2018-02-12 12:22:35

标签: java android bluetooth-lowenergy gatt bluetooth-gatt

我正在将一个字节数组数据写入Android中的BLE设备。调用mGatt.writeCharacteristic(characteristicToWrite);后调用onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)回调方法。如果写操作成功,状态将为0,即GATT_SUCCESS = 0,而不是我接收状态为7即GATT_INVALID_OFFSET = 0x7。为什么会这样?有谁能够帮我。先谢谢同行。

1 个答案:

答案 0 :(得分:0)

因为运行GATT服务器的外围设备写错了。

我假设你有一个“长”值,意味着一个大于一个ATT数据包的值。然后,在以下情况下应发回无效偏移错误:

  

如果准备值偏移量大于属性的当前长度   然后,对于此客户端,应丢弃所有待处理的准备写入值,   应清除队列,然后发送错误响应   «无效偏移»。

但是每当Android写入Long值时,它会将每个块的偏移量设置为前一个块长度的累积总和。

所以请检查一下外围设备会发生什么。