Merge "Use handles to identify GATT attributes (4/4)"
This commit is contained in:
@@ -246,11 +246,12 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
* Updates the internal value.
|
||||
* @hide
|
||||
*/
|
||||
public void onCharacteristicRead(String address, int status, int srvcType,
|
||||
int srvcInstId, ParcelUuid srvcUuid,
|
||||
int charInstId, ParcelUuid charUuid, byte[] value) {
|
||||
public void onCharacteristicRead(String address, int status, int handle, byte[] value) {
|
||||
if (VDBG) Log.d(TAG, "onCharacteristicRead() - Device=" + address
|
||||
+ " UUID=" + charUuid + " Status=" + status);
|
||||
+ " handle=" + handle + " Status=" + status);
|
||||
|
||||
Log.w(TAG, "onCharacteristicRead() - Device=" + address
|
||||
+ " handle=" + handle + " Status=" + status);
|
||||
|
||||
if (!address.equals(mDevice.getAddress())) {
|
||||
return;
|
||||
@@ -265,9 +266,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
&& mAuthRetry == false) {
|
||||
try {
|
||||
mAuthRetry = true;
|
||||
mService.readCharacteristic(mClientIf, address,
|
||||
srvcType, srvcInstId, srvcUuid,
|
||||
charInstId, charUuid, AUTHENTICATION_MITM);
|
||||
mService.readCharacteristic(mClientIf, address, handle, AUTHENTICATION_MITM);
|
||||
return;
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
@@ -276,13 +275,11 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
|
||||
mAuthRetry = false;
|
||||
|
||||
BluetoothGattService service = getService(mDevice, srvcUuid.getUuid(),
|
||||
srvcInstId, srvcType);
|
||||
if (service == null) return;
|
||||
|
||||
BluetoothGattCharacteristic characteristic = service.getCharacteristic(
|
||||
charUuid.getUuid(), charInstId);
|
||||
if (characteristic == null) return;
|
||||
BluetoothGattCharacteristic characteristic = getCharacteristicById(mDevice, handle);
|
||||
if (characteristic == null) {
|
||||
Log.w(TAG, "onCharacteristicRead() failed to find characteristic!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (status == 0) characteristic.setValue(value);
|
||||
|
||||
@@ -298,11 +295,9 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
* Let the app know how we did...
|
||||
* @hide
|
||||
*/
|
||||
public void onCharacteristicWrite(String address, int status, int srvcType,
|
||||
int srvcInstId, ParcelUuid srvcUuid,
|
||||
int charInstId, ParcelUuid charUuid) {
|
||||
public void onCharacteristicWrite(String address, int status, int handle) {
|
||||
if (VDBG) Log.d(TAG, "onCharacteristicWrite() - Device=" + address
|
||||
+ " UUID=" + charUuid + " Status=" + status);
|
||||
+ " handle=" + handle + " Status=" + status);
|
||||
|
||||
if (!address.equals(mDevice.getAddress())) {
|
||||
return;
|
||||
@@ -312,12 +307,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
mDeviceBusy = false;
|
||||
}
|
||||
|
||||
BluetoothGattService service = getService(mDevice, srvcUuid.getUuid(),
|
||||
srvcInstId, srvcType);
|
||||
if (service == null) return;
|
||||
|
||||
BluetoothGattCharacteristic characteristic = service.getCharacteristic(
|
||||
charUuid.getUuid(), charInstId);
|
||||
BluetoothGattCharacteristic characteristic = getCharacteristicById(mDevice, handle);
|
||||
if (characteristic == null) return;
|
||||
|
||||
if ((status == GATT_INSUFFICIENT_AUTHENTICATION
|
||||
@@ -325,8 +315,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
&& mAuthRetry == false) {
|
||||
try {
|
||||
mAuthRetry = true;
|
||||
mService.writeCharacteristic(mClientIf, address,
|
||||
srvcType, srvcInstId, srvcUuid, charInstId, charUuid,
|
||||
mService.writeCharacteristic(mClientIf, address, handle,
|
||||
characteristic.getWriteType(), AUTHENTICATION_MITM,
|
||||
characteristic.getValue());
|
||||
return;
|
||||
@@ -349,21 +338,14 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
* Updates the internal value.
|
||||
* @hide
|
||||
*/
|
||||
public void onNotify(String address, int srvcType,
|
||||
int srvcInstId, ParcelUuid srvcUuid,
|
||||
int charInstId, ParcelUuid charUuid,
|
||||
byte[] value) {
|
||||
if (VDBG) Log.d(TAG, "onNotify() - Device=" + address + " UUID=" + charUuid);
|
||||
public void onNotify(String address, int handle, byte[] value) {
|
||||
if (VDBG) Log.d(TAG, "onNotify() - Device=" + address + " handle=" + handle);
|
||||
|
||||
if (!address.equals(mDevice.getAddress())) {
|
||||
return;
|
||||
}
|
||||
BluetoothGattService service = getService(mDevice, srvcUuid.getUuid(),
|
||||
srvcInstId, srvcType);
|
||||
if (service == null) return;
|
||||
|
||||
BluetoothGattCharacteristic characteristic = service.getCharacteristic(
|
||||
charUuid.getUuid(), charInstId);
|
||||
BluetoothGattCharacteristic characteristic = getCharacteristicById(mDevice, handle);
|
||||
if (characteristic == null) return;
|
||||
|
||||
characteristic.setValue(value);
|
||||
@@ -379,12 +361,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
* Descriptor has been read.
|
||||
* @hide
|
||||
*/
|
||||
public void onDescriptorRead(String address, int status, int srvcType,
|
||||
int srvcInstId, ParcelUuid srvcUuid,
|
||||
int charInstId, ParcelUuid charUuid,
|
||||
int descrInstId, ParcelUuid descrUuid,
|
||||
byte[] value) {
|
||||
if (VDBG) Log.d(TAG, "onDescriptorRead() - Device=" + address + " UUID=" + charUuid);
|
||||
public void onDescriptorRead(String address, int status, int handle, byte[] value) {
|
||||
if (VDBG) Log.d(TAG, "onDescriptorRead() - Device=" + address + " handle=" + handle);
|
||||
|
||||
if (!address.equals(mDevice.getAddress())) {
|
||||
return;
|
||||
@@ -394,16 +372,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
mDeviceBusy = false;
|
||||
}
|
||||
|
||||
BluetoothGattService service = getService(mDevice, srvcUuid.getUuid(),
|
||||
srvcInstId, srvcType);
|
||||
if (service == null) return;
|
||||
|
||||
BluetoothGattCharacteristic characteristic = service.getCharacteristic(
|
||||
charUuid.getUuid(), charInstId);
|
||||
if (characteristic == null) return;
|
||||
|
||||
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
|
||||
descrUuid.getUuid(), descrInstId);
|
||||
BluetoothGattDescriptor descriptor = getDescriptorById(mDevice, handle);
|
||||
if (descriptor == null) return;
|
||||
|
||||
if (status == 0) descriptor.setValue(value);
|
||||
@@ -413,9 +382,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
&& mAuthRetry == false) {
|
||||
try {
|
||||
mAuthRetry = true;
|
||||
mService.readDescriptor(mClientIf, address,
|
||||
srvcType, srvcInstId, srvcUuid, charInstId, charUuid,
|
||||
descrInstId, descrUuid, AUTHENTICATION_MITM);
|
||||
mService.readDescriptor(mClientIf, address, handle, AUTHENTICATION_MITM);
|
||||
return;
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
@@ -435,11 +402,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
* Descriptor write operation complete.
|
||||
* @hide
|
||||
*/
|
||||
public void onDescriptorWrite(String address, int status, int srvcType,
|
||||
int srvcInstId, ParcelUuid srvcUuid,
|
||||
int charInstId, ParcelUuid charUuid,
|
||||
int descrInstId, ParcelUuid descrUuid) {
|
||||
if (VDBG) Log.d(TAG, "onDescriptorWrite() - Device=" + address + " UUID=" + charUuid);
|
||||
public void onDescriptorWrite(String address, int status, int handle) {
|
||||
if (VDBG) Log.d(TAG, "onDescriptorWrite() - Device=" + address + " handle=" + handle);
|
||||
|
||||
if (!address.equals(mDevice.getAddress())) {
|
||||
return;
|
||||
@@ -449,16 +413,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
mDeviceBusy = false;
|
||||
}
|
||||
|
||||
BluetoothGattService service = getService(mDevice, srvcUuid.getUuid(),
|
||||
srvcInstId, srvcType);
|
||||
if (service == null) return;
|
||||
|
||||
BluetoothGattCharacteristic characteristic = service.getCharacteristic(
|
||||
charUuid.getUuid(), charInstId);
|
||||
if (characteristic == null) return;
|
||||
|
||||
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
|
||||
descrUuid.getUuid(), descrInstId);
|
||||
BluetoothGattDescriptor descriptor = getDescriptorById(mDevice, handle);
|
||||
if (descriptor == null) return;
|
||||
|
||||
if ((status == GATT_INSUFFICIENT_AUTHENTICATION
|
||||
@@ -466,9 +421,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
&& mAuthRetry == false) {
|
||||
try {
|
||||
mAuthRetry = true;
|
||||
mService.writeDescriptor(mClientIf, address,
|
||||
srvcType, srvcInstId, srvcUuid, charInstId, charUuid,
|
||||
descrInstId, descrUuid, characteristic.getWriteType(),
|
||||
mService.writeDescriptor(mClientIf, address, handle,
|
||||
descriptor.getCharacteristic().getWriteType(),
|
||||
AUTHENTICATION_MITM, descriptor.getValue());
|
||||
return;
|
||||
} catch (RemoteException e) {
|
||||
@@ -584,6 +538,37 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a characteristic with id equal to instanceId.
|
||||
* @hide
|
||||
*/
|
||||
/*package*/ BluetoothGattCharacteristic getCharacteristicById(BluetoothDevice device, int instanceId) {
|
||||
for(BluetoothGattService svc : mServices) {
|
||||
for(BluetoothGattCharacteristic charac : svc.getCharacteristics()) {
|
||||
Log.w(TAG, "getCharacteristicById() comparing " + charac.getInstanceId() + " and " + instanceId);
|
||||
if (charac.getInstanceId() == instanceId)
|
||||
return charac;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a descriptor with id equal to instanceId.
|
||||
* @hide
|
||||
*/
|
||||
/*package*/ BluetoothGattDescriptor getDescriptorById(BluetoothDevice device, int instanceId) {
|
||||
for(BluetoothGattService svc : mServices) {
|
||||
for(BluetoothGattCharacteristic charac : svc.getCharacteristics()) {
|
||||
for(BluetoothGattDescriptor desc : charac.getDescriptors()) {
|
||||
if (desc.getInstanceId() == instanceId)
|
||||
return desc;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register an application callback to start using GATT.
|
||||
*
|
||||
@@ -832,9 +817,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
|
||||
try {
|
||||
mService.readCharacteristic(mClientIf, device.getAddress(),
|
||||
service.getType(), service.getInstanceId(),
|
||||
new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),
|
||||
new ParcelUuid(characteristic.getUuid()), AUTHENTICATION_NONE);
|
||||
characteristic.getInstanceId(), AUTHENTICATION_NONE);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
mDeviceBusy = false;
|
||||
@@ -877,11 +860,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
|
||||
try {
|
||||
mService.writeCharacteristic(mClientIf, device.getAddress(),
|
||||
service.getType(), service.getInstanceId(),
|
||||
new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),
|
||||
new ParcelUuid(characteristic.getUuid()),
|
||||
characteristic.getWriteType(), AUTHENTICATION_NONE,
|
||||
characteristic.getValue());
|
||||
characteristic.getInstanceId(), characteristic.getWriteType(),
|
||||
AUTHENTICATION_NONE, characteristic.getValue());
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
mDeviceBusy = false;
|
||||
@@ -922,11 +902,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
}
|
||||
|
||||
try {
|
||||
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);
|
||||
mService.readDescriptor(mClientIf, device.getAddress(),
|
||||
descriptor.getInstanceId(), AUTHENTICATION_NONE);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
mDeviceBusy = false;
|
||||
@@ -966,12 +943,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
}
|
||||
|
||||
try {
|
||||
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());
|
||||
mService.writeDescriptor(mClientIf, device.getAddress(), descriptor.getInstanceId(),
|
||||
characteristic.getWriteType(), AUTHENTICATION_NONE, descriptor.getValue());
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
mDeviceBusy = false;
|
||||
@@ -1102,10 +1075,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
|
||||
try {
|
||||
mService.registerForNotification(mClientIf, device.getAddress(),
|
||||
service.getType(), service.getInstanceId(),
|
||||
new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),
|
||||
new ParcelUuid(characteristic.getUuid()),
|
||||
enable);
|
||||
characteristic.getInstanceId(), enable);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
return false;
|
||||
|
||||
@@ -54,14 +54,12 @@ public class BluetoothGattCallbackWrapper extends IBluetoothGattCallback.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCharacteristicRead(String address, int status, int srvcType, int srvcInstId,
|
||||
ParcelUuid srvcUuid, int charInstId, ParcelUuid charUuid, byte[] value)
|
||||
public void onCharacteristicRead(String address, int status, int handle, byte[] value)
|
||||
throws RemoteException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCharacteristicWrite(String address, int status, int srvcType, int srvcInstId,
|
||||
ParcelUuid srvcUuid, int charInstId, ParcelUuid charUuid) throws RemoteException {
|
||||
public void onCharacteristicWrite(String address, int status, int handle) throws RemoteException {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -69,20 +67,15 @@ public class BluetoothGattCallbackWrapper extends IBluetoothGattCallback.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDescriptorRead(String address, int status, int srvcType, int srvcInstId,
|
||||
ParcelUuid srvcUuid, int charInstId, ParcelUuid charUuid, int descrInstId,
|
||||
ParcelUuid descrUuid, byte[] value) throws RemoteException {
|
||||
public void onDescriptorRead(String address, int status, int handle, byte[] value) throws RemoteException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDescriptorWrite(String address, int status, int srvcType, int srvcInstId,
|
||||
ParcelUuid srvcUuid, int charInstId, ParcelUuid charUuid, int descrInstId,
|
||||
ParcelUuid descrUuid) throws RemoteException {
|
||||
public void onDescriptorWrite(String address, int status, int handle) throws RemoteException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotify(String address, int srvcType, int srvcInstId, ParcelUuid srvcUuid,
|
||||
int charInstId, ParcelUuid charUuid, byte[] value) throws RemoteException {
|
||||
public void onNotify(String address, int handle, byte[] value) throws RemoteException {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,28 +50,13 @@ interface IBluetoothGatt {
|
||||
void clientDisconnect(in int clientIf, in String address);
|
||||
void refreshDevice(in int clientIf, in String address);
|
||||
void discoverServices(in int clientIf, in String address);
|
||||
void readCharacteristic(in int clientIf, in String address, in int srvcType,
|
||||
in int srvcInstanceId, in ParcelUuid srvcId,
|
||||
in int charInstanceId, in ParcelUuid charId,
|
||||
in int authReq);
|
||||
void writeCharacteristic(in int clientIf, in String address, in int srvcType,
|
||||
in int srvcInstanceId, in ParcelUuid srvcId,
|
||||
in int charInstanceId, in ParcelUuid charId,
|
||||
void readCharacteristic(in int clientIf, in String address, in int handle, in int authReq);
|
||||
void writeCharacteristic(in int clientIf, in String address, in int handle,
|
||||
in int writeType, in int authReq, in byte[] value);
|
||||
void readDescriptor(in int clientIf, in String address, in int srvcType,
|
||||
in int srvcInstanceId, in ParcelUuid srvcId,
|
||||
in int charInstanceId, in ParcelUuid charId,
|
||||
in int descrInstanceId, in ParcelUuid descrUuid,
|
||||
in int authReq);
|
||||
void writeDescriptor(in int clientIf, in String address, in int srvcType,
|
||||
in int srvcInstanceId, in ParcelUuid srvcId,
|
||||
in int charInstanceId, in ParcelUuid charId,
|
||||
in int descrInstanceId, in ParcelUuid descrId,
|
||||
void readDescriptor(in int clientIf, in String address, in int handle, in int authReq);
|
||||
void writeDescriptor(in int clientIf, in String address, in int handle,
|
||||
in int writeType, in int authReq, in byte[] value);
|
||||
void registerForNotification(in int clientIf, in String address, in int srvcType,
|
||||
in int srvcInstanceId, in ParcelUuid srvcId,
|
||||
in int charInstanceId, in ParcelUuid charId,
|
||||
in boolean enable);
|
||||
void registerForNotification(in int clientIf, in String address, in int handle, in boolean enable);
|
||||
void beginReliableWrite(in int clientIf, in String address);
|
||||
void endReliableWrite(in int clientIf, in String address, in boolean execute);
|
||||
void readRemoteRssi(in int clientIf, in String address);
|
||||
|
||||
@@ -31,27 +31,12 @@ oneway interface IBluetoothGattCallback {
|
||||
void onScanResult(in ScanResult scanResult);
|
||||
void onBatchScanResults(in List<ScanResult> batchResults);
|
||||
void onSearchComplete(in String address, in List<BluetoothGattService> services, in int status);
|
||||
void onCharacteristicRead(in String address, in int status, in int srvcType,
|
||||
in int srvcInstId, in ParcelUuid srvcUuid,
|
||||
in int charInstId, in ParcelUuid charUuid,
|
||||
in byte[] value);
|
||||
void onCharacteristicWrite(in String address, in int status, in int srvcType,
|
||||
in int srvcInstId, in ParcelUuid srvcUuid,
|
||||
in int charInstId, in ParcelUuid charUuid);
|
||||
void onCharacteristicRead(in String address, in int status, in int handle, in byte[] value);
|
||||
void onCharacteristicWrite(in String address, in int status, in int handle);
|
||||
void onExecuteWrite(in String address, in int status);
|
||||
void onDescriptorRead(in String address, in int status, in int srvcType,
|
||||
in int srvcInstId, in ParcelUuid srvcUuid,
|
||||
in int charInstId, in ParcelUuid charUuid,
|
||||
in int descrInstId, in ParcelUuid descrUuid,
|
||||
in byte[] value);
|
||||
void onDescriptorWrite(in String address, in int status, in int srvcType,
|
||||
in int srvcInstId, in ParcelUuid srvcUuid,
|
||||
in int charInstId, in ParcelUuid charUuid,
|
||||
in int descrInstId, in ParcelUuid descrUuid);
|
||||
void onNotify(in String address, in int srvcType,
|
||||
in int srvcInstId, in ParcelUuid srvcUuid,
|
||||
in int charInstId, in ParcelUuid charUuid,
|
||||
in byte[] value);
|
||||
void onDescriptorRead(in String address, in int status, in int handle, in byte[] value);
|
||||
void onDescriptorWrite(in String address, in int status, in int handle);
|
||||
void onNotify(in String address, in int handle, in byte[] value);
|
||||
void onReadRemoteRssi(in String address, in int rssi, in int status);
|
||||
void onMultiAdvertiseCallback(in int status, boolean isStart,
|
||||
in AdvertiseSettings advertiseSettings);
|
||||
|
||||
Reference in New Issue
Block a user