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

Why Is My Custom Android ArrayAdapter Not Refreshing Its ListView When New Data Is Added To The Array?
ssl page with ssl iframe broken on android 5.1
Cordova build fails with “Cannot find module lodash/object/assign”
Android XML shows different than live version
retrofit : deal with property that can be either empty string or an array
How do I display the notification message in android what I get from the server
viewing gridView items in android
android - Master/Detail view with NavigationDrawer
Android custom Edit Text View Error
Feature Database to Generate IOT Scenarios For Different Ecosystems
How to make Ejabberd connection with Smack client Android?
Sending Sms by intent but when press back button its not resuming my application
How to get deep link working in WebView
How can I pass data doInBackground inside a snippet in other class?
Not getting Latitude and Longitude in android
cAT uninstalling app and device not found

Categories

HOME
windows
cobalt
paraview
fuelux
polymer
mjml
apache-spark-mllib
jwplayer
spring-data-mongodb
rds
permissions
jax-ws
banner
angularfire2
pkcs#11
flume
p2p
entitymanager
glyphicons
git-extensions
xmonad
topology
backpack-for-laravel
scriptella
dapper-extensions
jquery-multiselect
mat
fractions
intersystems-cache
bringtofront
carrierwave
nsurl
dotspatial
laravel-eloquent
yowsup
openerp-7
cd
amazon-ses
azure-arm
odoo-website
laravel-elixir
apriori
naming
avcapturedevice
show-hide
flask-login
vaadin-charts
httr
puredata
term
clarifai
jquery-ui-draggable
manova
tinkerpop
java-bytecode-asm
context-sensitive-grammar
otp
restore
visual-studio-2008-sp1
slackware
redistributable
tinkerpop3
greatest-n-per-group
hclust
clipboard.js
embedding
hadoop-partitioning
boost-serialization
np-spring
crouton-os
dynatree
google-refine
fits
dot.js
gamekit
qtwebengine
variadic-templates
crowd
administration
entry-point
universal-image-loader
strawberry-perl
build-script
jquery-slider
clickbank
xmltodict
scriptaculous
printdialog
cffile
scringo
traceability
virtual-pc
device-width
android-loadermanager
subgraph
multiplexing
predicatebuilder
koken
jqote
rmdir
cgbitmapcontextcreate
uipagecontrol
strsep
metaweblog
cruisecontrol.rb
easyb
sifr
software-lifecycle
dsoframer
soappy

Resources

Encrypt Message