android


BLE notification subscription gets 133


1 Android phone (N5X 6.0.1) is running a BLE server, another one (N5X O) is subscribing.
Notification for a characteristic can be enabled however, on the write descriptor part, I'm consistently getting a 133.
Server.java
bluetoothGattServer = bluetoothManager.openGattServer(this, serverCallback);
BluetoothGattService service = new BluetoothGattService(Constants.SERVICE,
BluetoothGattService.SERVICE_TYPE_PRIMARY);
characteristic =
new BluetoothGattCharacteristic(Constants.CHARACTERISTIC,
BluetoothGattCharacteristic.PROPERTY_NOTIFY,
BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);
// public static UUID DESCRIPTOR = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
characteristic.addDescriptor(new BluetoothGattDescriptor(Constants.DESCRIPTOR,
BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattDescriptor.PERMISSION_WRITE));
characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
service.addCharacteristic(characteristic);
bluetoothGattServer.addService(service);
All the other UUIDs have been created from here.
Client.java
device.establishConnection(false)
.flatMap(bleConnection -> bleConnection.setupNotification(Constants.CHARACTERISTIC))
.flatMap(onNotificationReceived -> onNotificationReceived)
.subscribe(data -> {
Log.d(TAG, "data: " + data);
}, throwable -> {
Log.d(TAG, "data error " + throwable);
});
logcat
05-15 15:26:50.097 D/BluetoothGatt: setCharacteristicNotification() - uuid: 8d7dda32-3759-11e7-a919-92ebcb67fe33 enable: true
05-15 15:26:50.105 D/RxBle#Radio: QUEUED RxBleRadioOperationDescriptorWrite(60042487)
05-15 15:26:50.110 D/RxBle#Radio: FINISHED RxBleRadioOperationServicesDiscover(231218312)
05-15 15:26:50.112 D/RxBle#Radio: STARTED RxBleRadioOperationDescriptorWrite(60042487)
05-15 15:27:20.119 D/RxBle#Radio: FINISHED RxBleRadioOperationDescriptorWrite(60042487)
05-15 15:27:20.121 D/BluetoothGatt: setCharacteristicNotification() - uuid: 8d7dda32-3759-11e7-a919-92ebcb67fe33 enable: false
05-15 15:27:20.126 D/RxBle#BluetoothGatt: onDescriptorWrite descriptor=00002902-0000-1000-8000-00805f9b34fb status=133
05-15 15:27:20.129 D/BLE: data error BleGattDescriptorException{macAddress=42:EE:5A:C6:C1:F0, status=133 (0x85 -> https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.1.0_r1/stack/include/gatt_api.h), bleGattOperationType=BleGattOperation{description='DESCRIPTOR_WRITE'}}
Note: if I'm using the native Android API, I'm able to subscribe and receive notifications without having to write into the descriptor.
Bluetooth Core Specification says that if a characteristic supports notifications it should contain a Client Characteristic Config descriptor and start notifying only when CCC descriptor will be written with a proper value.
It seems that in your configuration there is a problem which manifests as status = 133. It seems that you may have made a mistake when setting properties on the characteristic. I assume that you want to have a characteristic that you can read, write and set notifications - in this situation it would look like:
characteristic =
new BluetoothGattCharacteristic(Constants.CHARACTERISTIC,
BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PROPERTY_WRITE, BluetoothGattCharacteristic.PROPERTY_NOTIFY,
BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);
Potential workaround
Some chinese manufacturers are not conforming to the Bluetooth Core Specification and they do not have CCC descriptor. If you are able to get the notifications without setting CCC then you could use a compatibility mode RxBleConnection.setupNotifications(characteristic, NotificationSetupMode.COMPAT) although it is discouraged and a proper fix to the configuration should be aplied.

Related Links

how to add more items from edittext to recyclerview in android
How to get particular key value from firebase data?
how to make two functions in android ,one to connect to socket and second to send message to it?/
Gradle sync failed: Could not find method compile() for arguments > [directory 'libs']
Delphi Android Kinvey BAAS service not available
Button is not doing anything
Managing Text for multiple launguages
NativeScript Does Not Recognize “android.Manifest.permission.READ_CONTACTS”
How to upload selected Google drive file upload into database in android? Here How to Fix Unexpected response code 302 in Volley?
How to discover Service using NsdManager?
Can BaseColumns._ID be used as an ID in multiple tables
How to Approve Instagram Api Permissions for Android App
android - why alertDialog showing on homescreen?
save data in nonactivity class from another nonactivity class and fetch data from activity class in android
Change a CardView's row in a RecyclerView every x sec
Android: SearchView setQuery does not set text on orientation change

Categories

HOME
asp.net-web-api
cygwin
phantom-dsl
grok
apache-flink
phpmyadmin
youtube-data-api-v3
battery
saml-2.0
pyqt4
onclick
echo
mel
opengl-es-3.0
heat
job-scheduling
google-picker
delphi-xe5
oledb
simpleitk
symbols
react-toolbox
epsilon
zxing
interpreter
beta
draft-js-plugins
onload
has-and-belongs-to-many
user-defined-functions
carrierwave
mql
ntp
boost-asio
mobx
volatile
python-2.6
dumpbin
hreflang
hard-drive
baidu-map
searchkit
raft
playframework-2.1
openalpr
news
signals-slots
softmax
install.packages
tcc
flask-login
monkey-testing
puredata
vaadin-elements
configurationmanager
openblas
remedy
filehandle
monkey
grails-plugin
omxplayer
myspace
neon
udpclient
embedding
stream-processing
upx
libav
cycle2
toolkit
evolus-pencil
jquery-forms-plugin
variadic-templates
cosine-similarity
sql-scripts
teaspoon
jjaql
ora-06550
gtm-oauth2
http-patch
correlated-subquery
predicatebuilder
automationelement
listactivity
twitterizer
visualj#
cldc
scrubyt
linfu-dynamicproxy
firefox-3
flvplayback

Resources

Encrypt Message



code
soft
python
ios
c
html
jquery
cloud
mobile