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

Align checkboxes underneath spinners
how to put a geopoint from user current location in parse.com
getIdentifier not working to get id of resource
Design Support Library, Toolbar buttons cropped ripple
How to inject a Presenter into a View (MVP pattern) using Dagger2
How do you pass information to and from a non activity class?
Android set Automatically auto_fit for Grid View
Android OutOfMemoryError when switching between 4 activities for some time
Android Auto - Voice - Cannot perform “Play [x] on [y]”
I've got a weird bug when using a ViewPager inside a Fragment
“RadioGroup” must be followed by either attribute specifications, “>” or “/>”
is there any side effect of creating multiple database files for a single android application?
How to access shared file
Record video with a set duration with getUserMedia using Phone Camera
Everytime I do a “git status” it tells me that I have modified about 800 files that I haven't touched at all
PerspectiveTransform and Crop Rectangle in Android using openCV

Categories

HOME
service-worker
google-app-engine
grok
fabricjs
cobalt
awk
powerpoint
camera
apiblueprint
rendering
permissions
jquery-ui
discrete-mathematics
dkim
mod-security
redis-sentinel
ycsb
internationalization
dimensional-modeling
identity-management
nim
breadth-first-search
undertow
resourcebundle
jquery-callback
xunit
delimiter
has-and-belongs-to-many
linked-data
bringtofront
iis-express
nsurl
constexpr
custom-controls
mustache
sql-delete
least-squares
sharepoint-workflow
zoomify
linq-to-objects
trigonometry
branching-and-merging
uiimage
httr
jide
libgphoto2
vugen
google-cse
amq
subnet
avx
swingworker
restore
cronexpression
preprocessor
jtwig
project-organization
boost-serialization
ikiwiki
findfirst
httpruntime.cache
jaunt-api
vhosts
java-money
dllimport
pypiserver
page.js
pax-exam
sha512
dnssec
bcache
mass-assignment
boost-program-options
imagefilter
xml-namespaces
jjaql
vbe
decoupling
twitter-bootstrap-rails
square-bracket
sbcl
windows-embedded-standard
android-usb
visual-studio-express
modular
tlf
observium
http-status-code-410
correlated-subquery
httponly
lr
umra
mtu
ie-compatibility-mode
aspmenu
isapi-extension
tui

Resources

Encrypt Message