Loading framework/java/android/bluetooth/BluetoothGatt.java +66 −96 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading @@ -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 Loading @@ -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; Loading @@ -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); Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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. * Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading framework/java/android/bluetooth/BluetoothGattCallbackWrapper.java +5 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading framework/java/android/bluetooth/IBluetoothGatt.aidl +5 −20 Original line number Diff line number Diff line Loading @@ -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); Loading framework/java/android/bluetooth/IBluetoothGattCallback.aidl +5 −20 Original line number Diff line number Diff line Loading @@ -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); Loading Loading
framework/java/android/bluetooth/BluetoothGatt.java +66 −96 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading @@ -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 Loading @@ -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; Loading @@ -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); Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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. * Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading
framework/java/android/bluetooth/BluetoothGattCallbackWrapper.java +5 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
framework/java/android/bluetooth/IBluetoothGatt.aidl +5 −20 Original line number Diff line number Diff line Loading @@ -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); Loading
framework/java/android/bluetooth/IBluetoothGattCallback.aidl +5 −20 Original line number Diff line number Diff line Loading @@ -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); Loading