Почему статус в обратном вызове 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, он устанавливает смещение каждого чанка на накопленную сумму длин предыдущих чанков.
Так что просто проверьте, что происходит на периферии.