2013-08-26 27 views
5

Pytanie o włączaniu właściwości przy użyciu nowego androida BLE 4.3:Android BLE 4,3 onDescriptorWrite zwraca stan 128 na cechach umożliwiających zgłoszenie

ja nie dostaję żadnego powiadomienia z urządzenia BLE choć włączyć powiadomienia na jednej cechy przez jeden asynchronicznie za pomocą kolejki.

Też piszę deskryptor z UUID "00002902-0000-1000-8000-00805f9b34fb" z ENABLE_NOTIFICATION_VALUE.

Podążyłem za rekomendacją Google SDK Doc, a także sugestiami z różnych forów.

Przy okazji otrzymuję status = 128 w "onDescriptorWrite". Jakiś pomysł, co oznacza ten status?

Poszedłem przez kod Google i nie widziałem żadnych informacji na ten temat. Nawet kod źródłowy nie rzuca żadnego światła, ponieważ ustawiono ten status.

Daj mi znać, jeśli ktoś z was doświadczył tego po włączeniu powiadomień dla urządzenia multimedialnego. Czasami dostaję status 133 na piśmie deskryptora. Używam najnowszego Nexusa 7 do moich testów.

+1

Nie myśl, że to rozwiąże twój problem, ale 128 to GATT_NO_RESOURCES. https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-4.3_r1.1/stack/include/gatt_api.h – reTs

+0

Z mojego doświadczenia wynika, że ​​kod statusu nie jest wiarygodny, chyba że status jest określony w strona programisty. – reTs

Odpowiedz

3

Miałem ten sam problem i rozwiązałem go, wyłączając i ponownie włączając interfejs bluetooth.

Stos systemu Android BLE wydaje się być wciąż niedojrzały i ma problemy z niestabilnością.

2

Ten błąd może być związany z maksymalnym progiem nałożonym przez system operacyjny 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

-1

Dostałem ten błąd podczas wykonywania writeCharacteristic z właściwością WriteNoResponse. Kiedy podam argument WriteWithoutResponse dla , problem znika.

0

Bardzo spóźniona odpowiedź, ale może okazać się cenna dla każdego, kto ma status 128 (GATT_NO_RESOURCES) w rozmowie gatt.writedescriptor().

W moim przypadku status 128 pojawił się podczas próby napisania deskryptora o wartości ENABLE_NOTIFICATION_VALUE dla cechy wymagającej subskrypcji dla wskazania za pośrednictwem ENABLE_INDICATION_VALUE.

Więc zamiast

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

będzie dla

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

rozwiązaniu problemu. Zakładam, że na odwrót pojawi się ten sam status błędu 128.