LE: Add instance ID to descriptors (1/4)
If a remote devices offers multiple descriptors with the same UUID, the
instance ID is used to differentiate between them.
Change-Id: I0c36494c980c86abd23f9647196af8d59ef663e9
diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java
index df3ec1a..1ad7bf2 100644
--- a/core/java/android/bluetooth/BluetoothGatt.java
+++ b/core/java/android/bluetooth/BluetoothGatt.java
@@ -261,7 +261,7 @@
public void onGetDescriptor(String address, int srvcType,
int srvcInstId, ParcelUuid srvcUuid,
int charInstId, ParcelUuid charUuid,
- ParcelUuid descUuid) {
+ int descrInstId, ParcelUuid descUuid) {
if (DBG) Log.d(TAG, "onGetDescriptor() - Device=" + address + " UUID=" + descUuid);
if (!address.equals(mDevice.getAddress())) {
@@ -276,7 +276,7 @@
if (characteristic == null) return;
characteristic.addDescriptor(new BluetoothGattDescriptor(
- characteristic, descUuid.getUuid(), 0));
+ characteristic, descUuid.getUuid(), descrInstId, 0));
}
/**
@@ -429,7 +429,8 @@
public void onDescriptorRead(String address, int status, int srvcType,
int srvcInstId, ParcelUuid srvcUuid,
int charInstId, ParcelUuid charUuid,
- ParcelUuid descrUuid, byte[] value) {
+ int descrInstId, ParcelUuid descrUuid,
+ byte[] value) {
if (DBG) Log.d(TAG, "onDescriptorRead() - Device=" + address + " UUID=" + charUuid);
if (!address.equals(mDevice.getAddress())) {
@@ -444,7 +445,7 @@
if (characteristic == null) return;
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
- descrUuid.getUuid());
+ descrUuid.getUuid(), descrInstId);
if (descriptor == null) return;
if (status == 0) descriptor.setValue(value);
@@ -456,7 +457,7 @@
mAuthRetry = true;
mService.readDescriptor(mClientIf, address,
srvcType, srvcInstId, srvcUuid, charInstId, charUuid,
- descrUuid, AUTHENTICATION_MITM);
+ descrInstId, descrUuid, AUTHENTICATION_MITM);
} catch (RemoteException e) {
Log.e(TAG,"",e);
}
@@ -478,7 +479,7 @@
public void onDescriptorWrite(String address, int status, int srvcType,
int srvcInstId, ParcelUuid srvcUuid,
int charInstId, ParcelUuid charUuid,
- ParcelUuid descrUuid) {
+ int descrInstId, ParcelUuid descrUuid) {
if (DBG) Log.d(TAG, "onDescriptorWrite() - Device=" + address + " UUID=" + charUuid);
if (!address.equals(mDevice.getAddress())) {
@@ -493,7 +494,7 @@
if (characteristic == null) return;
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
- descrUuid.getUuid());
+ descrUuid.getUuid(), descrInstId);
if (descriptor == null) return;
if ((status == GATT_INSUFFICIENT_AUTHENTICATION
@@ -503,7 +504,7 @@
mAuthRetry = true;
mService.writeDescriptor(mClientIf, address,
srvcType, srvcInstId, srvcUuid, charInstId, charUuid,
- descrUuid, characteristic.getWriteType(),
+ descrInstId, descrUuid, characteristic.getWriteType(),
AUTHENTICATION_MITM, descriptor.getValue());
} catch (RemoteException e) {
Log.e(TAG,"",e);
@@ -915,11 +916,11 @@
if (device == null) return false;
try {
- mService.readDescriptor(mClientIf, device.getAddress(),
- service.getType(), service.getInstanceId(),
- new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),
- new ParcelUuid(characteristic.getUuid()),
- new ParcelUuid(descriptor.getUuid()), AUTHENTICATION_NONE);
+ mService.readDescriptor(mClientIf, device.getAddress(), service.getType(),
+ service.getInstanceId(), new ParcelUuid(service.getUuid()),
+ characteristic.getInstanceId(), new ParcelUuid(characteristic.getUuid()),
+ descriptor.getInstanceId(), new ParcelUuid(descriptor.getUuid()),
+ AUTHENTICATION_NONE);
} catch (RemoteException e) {
Log.e(TAG,"",e);
return false;
@@ -953,11 +954,10 @@
if (device == null) return false;
try {
- mService.writeDescriptor(mClientIf, device.getAddress(),
- service.getType(), service.getInstanceId(),
- new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),
- new ParcelUuid(characteristic.getUuid()),
- new ParcelUuid(descriptor.getUuid()),
+ mService.writeDescriptor(mClientIf, device.getAddress(), service.getType(),
+ service.getInstanceId(), new ParcelUuid(service.getUuid()),
+ characteristic.getInstanceId(), new ParcelUuid(characteristic.getUuid()),
+ descriptor.getInstanceId(), new ParcelUuid(descriptor.getUuid()),
characteristic.getWriteType(), AUTHENTICATION_NONE,
descriptor.getValue());
} catch (RemoteException e) {