diff options
| author | Zhihai Xu <zhihaixu@google.com> | 2014-03-31 21:21:54 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-03-31 21:21:54 +0000 |
| commit | ae1b763cded7e2cb3eec3cbec0680c25e55c109c (patch) | |
| tree | d7d70836fa563a6e5d141f7f7482e31705811267 /core/java/android | |
| parent | ecaea7e60c0992ac295163f55c1f986a46eef008 (diff) | |
| parent | 580b0a13028ed2187964735a5515d87900d241ce (diff) | |
Merge "LE: Add API to configure MTU for a given connection (3/4)" into klp-modular-dev
Diffstat (limited to 'core/java/android')
5 files changed, 72 insertions, 0 deletions
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 63ebb63944bd..646be0666f8c 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -2026,5 +2026,13 @@ public final class BluetoothAdapter { } } } + + /** + * Callback reporting LE ATT MTU. + * @hide + */ + public void onConfigureMTU(String address, int mtu, int status) { + // no op + } } } diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java index ae6ad3b4f269..bbd0439e51a4 100644 --- a/core/java/android/bluetooth/BluetoothGatt.java +++ b/core/java/android/bluetooth/BluetoothGatt.java @@ -561,6 +561,23 @@ public final class BluetoothGatt implements BluetoothProfile { public void onAdvertiseStateChange(int state, int status) { if (DBG) Log.d(TAG, "onAdvertiseStateChange() - state = " + state + " status=" + status); + } + + /** + * Callback invoked when the MTU for a given connection changes + * @hide + */ + public void onConfigureMTU(String address, int mtu, int status) { + if (DBG) Log.d(TAG, "onConfigureMTU() - Device=" + address + + " mtu=" + mtu + " status=" + status); + if (!address.equals(mDevice.getAddress())) { + return; + } + try { + mCallback.onConfigureMTU(BluetoothGatt.this, mtu, status); + } catch (Exception ex) { + Log.w(TAG, "Unhandled exception in callback", ex); + } } }; @@ -1148,6 +1165,36 @@ public final class BluetoothGatt implements BluetoothProfile { } /** + * Configure the MTU used for a given connection. + * + * <p>When performing a write request operation (write without response), + * the data sent is truncated to the MTU size. This function may be used + * to request a larget MTU size to be able to send more data at once. + * + * <p>A {@link BluetoothGattCallback#onConfigureMTU} callback will indicate + * whether this operation was successful. + * + * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. + * + * @return true, if the new MTU value has been requested successfully + * @hide + */ + public boolean configureMTU(int mtu) { + if (DBG) Log.d(TAG, "configureMTU() - device: " + mDevice.getAddress() + + " mtu: " + mtu); + if (mService == null || mClientIf == 0) return false; + + try { + mService.configureMTU(mClientIf, mDevice.getAddress(), mtu); + } catch (RemoteException e) { + Log.e(TAG,"",e); + return false; + } + + return true; + } + + /** * Not supported - please use {@link BluetoothManager#getConnectedDevices(int)} * with {@link BluetoothProfile#GATT} as argument * diff --git a/core/java/android/bluetooth/BluetoothGattCallback.java b/core/java/android/bluetooth/BluetoothGattCallback.java index 80ea4a695698..5180259cc120 100644 --- a/core/java/android/bluetooth/BluetoothGattCallback.java +++ b/core/java/android/bluetooth/BluetoothGattCallback.java @@ -138,4 +138,19 @@ public abstract class BluetoothGattCallback { */ public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { } + + /** + * Callback indicating the MTU for a given device connection has changed. + * + * This callback is triggered in response to the + * {@link BluetoothGatt#configureMTU} function, or in response to a connection + * event. + * + * @param gatt GATT client invoked {@link BluetoothGatt#configureMTU} + * @param mtu The new MTU size + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the MTU has been changed successfully + * @hide + */ + public void onConfigureMTU(BluetoothGatt gatt, int mtu, int status) { + } } diff --git a/core/java/android/bluetooth/IBluetoothGatt.aidl b/core/java/android/bluetooth/IBluetoothGatt.aidl index 784cdcc5318c..c6b5c3d309a5 100644 --- a/core/java/android/bluetooth/IBluetoothGatt.aidl +++ b/core/java/android/bluetooth/IBluetoothGatt.aidl @@ -73,6 +73,7 @@ interface IBluetoothGatt { 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); + void configureMTU(in int clientIf, in String address, in int mtu); void registerServer(in ParcelUuid appId, in IBluetoothGattServerCallback callback); void unregisterServer(in int serverIf); diff --git a/core/java/android/bluetooth/IBluetoothGattCallback.aidl b/core/java/android/bluetooth/IBluetoothGattCallback.aidl index 7c69a066b465..a78c29b00641 100644 --- a/core/java/android/bluetooth/IBluetoothGattCallback.aidl +++ b/core/java/android/bluetooth/IBluetoothGattCallback.aidl @@ -64,4 +64,5 @@ interface IBluetoothGattCallback { in byte[] value); void onReadRemoteRssi(in String address, in int rssi, in int status); oneway void onAdvertiseStateChange(in int advertiseState, in int status); + void onConfigureMTU(in String address, in int mtu, in int status); } |
