Почему статус в обратном вызове onCharacteristicWrite становится GATT_INVALID_OFFSET?

Я записываю байтовый массив данных на устройство BLE в Android. После звонка mGatt.writeCharacteristic(characteristicToWrite); onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) метод обратного вызова вызывается. Если бы операция записи была успешной, статус был бы равен 0, т.е. GATT_SUCCESS = 0, Вместо этого я получаю статус как 7 т.е. GATT_INVALID_OFFSET = 0x7, Почему это происходит? Кто-нибудь может мне помочь. Заранее спасибо сверстникам.

1 ответ

Решение

Поскольку периферийное устройство, на котором работает сервер GATT, записано неправильно.

Я предполагаю, что у вас есть "длинное" значение, означающее значение больше, чем умещается в одном пакете ATT. Затем ошибка Invalid Offset должна быть отправлена ​​обратно в следующем случае:

Если смещение подготовительного значения больше текущей длины значения атрибута, то все ожидающие значения подготовительной записи должны быть отброшены для этого клиента, очередь должна быть очищена, а затем ответ об ошибке должен быть отправлен с "Неверное смещение".

Но всякий раз, когда Android записывает значение Long, он устанавливает смещение каждого чанка на накопленную сумму длин предыдущих чанков.

Так что просто проверьте, что происходит на периферии.

Другие вопросы по тегам