Android BLE 4.3 onDescriptorWrite возвращает статус 128 при включении уведомления о характеристиках

Вопрос по включению характеристик с помощью нового андроида BLE 4.3:

Я не получаю никаких уведомлений от устройства BLE, хотя я включаю уведомления о характеристиках одно за другим асинхронно, используя очередь.

Я также пишу дескриптор с UUID «00002902-0000-1000-8000-00805f9b34fb» с ENABLE_NOTIFICATION_VALUE.

Я следовал рекомендациям из Google sdk doc, а также предложениям различных форумов.

Кстати я получаю статус = 128 на "onDescriptorWrite". Есть идеи, что означает этот статус?

Я прошел через код Google и не увидел никакой информации по этому поводу. Даже исходный код не проливает свет на то, как устанавливается этот статус.

Сообщите мне, сталкивался ли кто-нибудь из вас с этим, когда вы включали уведомления для устройства body media. Также иногда при записи дескриптора я получаю статус 133. Для тестов я использую последнюю версию Nexus 7.


person Murali    schedule 26.08.2013    source источник
comment
Не думаю, что это решит вашу проблему, но 128 - это GATT_NO_RESOURCES. android.googlesource .com / platform / external / bluetooth / bluedroid /.   -  person reTs    schedule 27.08.2013
comment
По моему опыту, код статуса ненадежен, если статус не указан на сайте разработчика.   -  person reTs    schedule 27.08.2013


Ответы (4)


У меня была такая же проблема, и я решил ее отключением и повторным включением интерфейса Bluetooth.

Стек Android BLE кажется еще незрелым и страдает нестабильностью.

person philfr    schedule 31.10.2013

Эта ошибка может быть связана с максимальным порогом, установленным ОС Android.

#define BTA_GATTC_NOTIF_REG_MAX     15

 - for 4.3 max number of notification/indication is 4 
 - for 4.4 max number of notification/indication is 7
 - for 5.0 max number of notification/indication is 15

https://groups.google.com/forum/#!topic/android-platform/FNHO5KB4sKI

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.0.2_r1/bta/gatt/bta_gattc_int.h.

person Aravind Sundar    schedule 29.01.2015

Очень поздний ответ, но он может оказаться ценным для любого, кто сталкивается со статусом 128 (GATT_NO_RESOURCES) при gatt.writedescriptor() вызове.

В моем случае статус 128 обнаружился при попытке записать дескриптор со значением ENABLE_NOTIFICATION_VALUE для характеристики, которая вместо этого требовала подписки для индикации через ENABLE_INDICATION_VALUE.

Так что вместо

BluetoothGattDescriptor descriptor = bluetoothGattCharacteristic.getDescriptor(DESCRIPTOR_UUID);
descriptor.setValue(ENABLE_NOTIFICATION_VALUE);
mGatt.writeDescriptor(descriptor);

собирается

BluetoothGattDescriptor descriptor = bluetoothGattCharacteristic.getDescriptor(DESCRIPTOR_UUID);
descriptor.setValue(ENABLE_INDICATION_VALUE);
mGatt.writeDescriptor(descriptor);

Исправлена ​​проблема. Я предполагаю, что в противном случае будет получен тот же статус ошибки 128.

person Lupinity Labs    schedule 27.05.2017

Я получил эту ошибку при выполнении writeCharacteristic со свойством WriteNoResponse. Когда я указываю аргумент WriteWithoutResponse для writeCharacteristic, проблема исчезает.

person Serhii Koltsiuk    schedule 05.03.2016