From c28caad44be9dd0b163962ae8a9c81d1fc6e193f Mon Sep 17 00:00:00 2001 From: Jakub Pawlowski Date: Tue, 29 Dec 2015 13:19:21 -0800 Subject: Implementation of BluetoothDevice.createBondOutOfBand This patch implements out of band pairing that uses optional data. Currently, it works only for LE transport, using Temporary Key value. In the future fields might be added to OOBData to support other options for optional data. Change-Id: I0811182efb72ac5f80521ed4876b32603cb628c1 --- api/current.txt | 9 ++++ api/system-current.txt | 9 ++++ core/java/android/bluetooth/BluetoothDevice.java | 12 ++--- core/java/android/bluetooth/IBluetooth.aidl | 2 + core/java/android/bluetooth/OobData.aidl | 19 +++++++ core/java/android/bluetooth/OobData.java | 63 ++++++++++++++++++++++++ 6 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 core/java/android/bluetooth/OobData.aidl create mode 100644 core/java/android/bluetooth/OobData.java diff --git a/api/current.txt b/api/current.txt index c39c526d3200..caaea05004d1 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6987,6 +6987,15 @@ package android.bluetooth { field public static final int TYPE_SCO = 2; // 0x2 } + public class OobData implements android.os.Parcelable { + ctor public OobData(); + method public int describeContents(); + method public byte[] getSecurityManagerTk(); + method public void setSecurityManagerTk(byte[]); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + } package android.bluetooth.le { diff --git a/api/system-current.txt b/api/system-current.txt index 6578be4140a1..caa734b81954 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7208,6 +7208,15 @@ package android.bluetooth { field public static final int TYPE_SCO = 2; // 0x2 } + public class OobData implements android.os.Parcelable { + ctor public OobData(); + method public int describeContents(); + method public byte[] getSecurityManagerTk(); + method public void setSecurityManagerTk(byte[]); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + } package android.bluetooth.le { diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index d27dfa04faf0..9faba1a9f365 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -872,18 +872,16 @@ public final class BluetoothDevice implements Parcelable { * *

Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}. * - * @param hash - Simple Secure pairing hash - * @param randomizer - The random key obtained using OOB + * @param transport - Transport to use + * @param oobData - Out Of Band data * @return false on immediate error, true if bonding will begin * * @hide */ - public boolean createBondOutOfBand(byte[] hash, byte[] randomizer) { - //TODO(BT) - /* + public boolean createBondOutOfBand(int transport, OobData oobData) { try { - return sService.createBondOutOfBand(this, hash, randomizer); - } catch (RemoteException e) {Log.e(TAG, "", e);}*/ + return sService.createBondOutOfBand(this, transport, oobData); + } catch (RemoteException e) {Log.e(TAG, "", e);} return false; } diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index 235811680584..9cd7d0585af5 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -20,6 +20,7 @@ import android.bluetooth.IBluetoothCallback; import android.bluetooth.IBluetoothStateChangeCallback; import android.bluetooth.BluetoothActivityEnergyInfo; import android.bluetooth.BluetoothDevice; +import android.bluetooth.OobData; import android.os.ParcelUuid; import android.os.ParcelFileDescriptor; @@ -56,6 +57,7 @@ interface IBluetooth BluetoothDevice[] getBondedDevices(); boolean createBond(in BluetoothDevice device, in int transport); + boolean createBondOutOfBand(in BluetoothDevice device, in int transport, in OobData oobData); boolean cancelBondProcess(in BluetoothDevice device); boolean removeBond(in BluetoothDevice device); int getBondState(in BluetoothDevice device); diff --git a/core/java/android/bluetooth/OobData.aidl b/core/java/android/bluetooth/OobData.aidl new file mode 100644 index 000000000000..d831c647769b --- /dev/null +++ b/core/java/android/bluetooth/OobData.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.bluetooth; + +parcelable OobData; diff --git a/core/java/android/bluetooth/OobData.java b/core/java/android/bluetooth/OobData.java new file mode 100644 index 000000000000..01f72efb22ac --- /dev/null +++ b/core/java/android/bluetooth/OobData.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.bluetooth; + +import android.os.Parcel; +import android.os.Parcelable; + +import android.util.Log; + +/** + * Out Of Band Data for Bluetooth device. + */ +public class OobData implements Parcelable { + private byte[] securityManagerTk; + + public byte[] getSecurityManagerTk() { + return securityManagerTk; + } + + public void setSecurityManagerTk(byte[] securityManagerTk) { + this.securityManagerTk = securityManagerTk; + } + + public OobData() { } + + private OobData(Parcel in) { + securityManagerTk = in.createByteArray(); + } + + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeByteArray(securityManagerTk); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public OobData createFromParcel(Parcel in) { + return new OobData(in); + } + + public OobData[] newArray(int size) { + return new OobData[size]; + } + }; +} \ No newline at end of file -- cgit v1.2.3-59-g8ed1b