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

Integration Facebook SSO is not working
Android SoundPool only can play audio/Video from Raw or asset folder not from SDcard?
How to make the content of your fragment tabhost occupy full width?
ViewPager widget not taking assigned weight
Running JNA's Native.loadLibrary on android
AlertDialog and some views clickables
Google Places API (Android) INVALID_REQUEST - am I missing something?
Progress Bar in dialog in Android
Android open send mail intent and receive callback when user send mail
ANDROID: what is the best approach with the fragment?
Unable to open SQLite database stored at assets\databases using SQLiteAssetHelper
Fill facebook share item with title, text and link (Android)
Android WebView - see page in full size (like on pc)
AdMob only displaying Test Banner
Android prevent layout from moving up on focus on edit field
Adding GooglePlayServices support into my Android projects using Eclipse

Categories

HOME
fabricjs
localization
jmeter
pagination
google-spreadsheet
character-encoding
graphics
carousel
emscripten
3d-reconstruction
telegram-bot
zip
polling
jquery-ui
lanczos
elasticsearch-5
openpyxl
plist
mod-security
windows-ce
emoji
rtf
comsol
shared-libraries
soci
identity-management
boost-icl
simpleitk
guzzle
dataflow-diagram
visual-studio-extensions
joptionpane
google-cloud-print
interbase
gp
constexpr
mobx
git-squash
r-grid
sammy.js
carriage-return
yowsup
parse-tree
wurfl
protein-database
gdata
metawidget
linqpad
ntvs
openal
tf
lightning
x-ray
google-cse
page-replacement
stdmap
wpas
jqchart
flyout
gameplay-kit
smartfoxserver
greatest-n-per-group
jclouds
qiime
gcloud-ruby
sklearn-pandas
yajsw
false-sharing
rasterize
dynatree
page.js
xmltype
cryptographichashfunction
cross-join
boost-program-options
viewer
ssis-data-flow
cbind
trdion2011
functional-java
renderer
websphere-esb
hibernate-entitymanager
solace-mq
node-blade
boost-msm
fitbounds
urlrewriter
entity-attribute-value
expression-blend-4
tournament
nhprof
cac
presentation-layer
load-time
vs-android
wordprocessingml
pbcopy

Resources

Encrypt Message