summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothGatt.java
diff options
context:
space:
mode:
authorSubramanian Srinivasan <quic_subrsrin@quicinc.com>2022-02-23 20:34:36 -0800
committerSubramanian Srinivasan <quic_subrsrin@quicinc.com>2022-04-14 12:16:22 -0700
commit283c2542904d17e67b4b7405d078ecc8b2f19c10 (patch)
tree6dea7134e0f7270a4b754fb7816c811622d782a4 /framework/java/android/bluetooth/BluetoothGatt.java
parente5ec0e08a69df03eb56f53559b6a64f28ff385c9 (diff)
Add Enhanced connection update SDK APIs
Add support for following ECU support. 1. Enhanced connection update SDK APIs support. 2. Enhanced connection update support in Bluetooth apk and stack. CRs-Fixed: 3127801 Change-Id: I29a8d10aad4c797f7b082297dabaa3049bad5462
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothGatt.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothGatt.java148
1 files changed, 148 insertions, 0 deletions
diff --git a/framework/java/android/bluetooth/BluetoothGatt.java b/framework/java/android/bluetooth/BluetoothGatt.java
index 8036311c20..edfd8ba91f 100644
--- a/framework/java/android/bluetooth/BluetoothGatt.java
+++ b/framework/java/android/bluetooth/BluetoothGatt.java
@@ -12,6 +12,41 @@
* 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.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ *
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+ *
*/
package android.bluetooth;
@@ -150,6 +185,27 @@ public final class BluetoothGatt implements BluetoothProfile {
public static final int CONNECTION_PRIORITY_LOW_POWER = 2;
/**
+ * Connection subrate request - Balanced.
+ *
+ * @hide
+ */
+ public static final int SUBRATE_REQ_BALANCED = 0;
+
+ /**
+ * Connection subrate request - High.
+ *
+ * @hide
+ */
+ public static final int SUBRATE_REQ_HIGH = 1;
+
+ /**
+ * Connection Subrate Request - Low Power.
+ *
+ * @hide
+ */
+ public static final int SUBRATE_REQ_LOW_POWER = 2;
+
+ /**
* No authentication required.
*
* @hide
@@ -769,6 +825,34 @@ public final class BluetoothGatt implements BluetoothProfile {
}
});
}
+
+ /**
+ * Callback invoked when the given connection's subrate is changed
+ * @hide
+ */
+ @Override
+ public void onSubrateChange(String address, int subrateFactor, int latency,
+ int contNum, int timeout, int status) {
+ Log.d(TAG, "onSubrateChange() - Device=" + address
+ + " subrateFactor=" + subrateFactor + " latency=" + latency
+ + " contNum=" + contNum + " timeout=" + timeout + " status=" + status);
+
+ if (!address.equals(mDevice.getAddress())) {
+ return;
+ }
+
+ runOrQueueCallback(new Runnable() {
+ @Override
+ public void run() {
+ final BluetoothGattCallback callback = mCallback;
+ if (callback != null) {
+ callback.onSubrateChange(BluetoothGatt.this, subrateFactor, latency,
+ contNum, timeout, status);
+ }
+ }
+ });
+ }
+
};
/* package */ BluetoothGatt(IBluetoothGatt iGatt, BluetoothDevice device, int transport,
@@ -1911,6 +1995,70 @@ public final class BluetoothGatt implements BluetoothProfile {
}
/**
+ * Request LE subrate mode.
+ *
+ * <p>This function will send a LE subrate request to the
+ * remote device.
+ *
+ * @param subrateMode Request a specific subrate mode. Must be one of {@link
+ * BluetoothGatt#SUBRATE_REQ_BALANCED}, {@link BluetoothGatt#SUBRATE_REQ_HIGH}
+ * or {@link BluetoothGatt#SUBRATE_REQ_LOW_POWER}.
+ * @throws IllegalArgumentException If the parameters are outside of their specified range.
+ * @hide
+ */
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
+ public boolean requestSubrateMode(int subrateMode) {
+ if (subrateMode < SUBRATE_REQ_BALANCED
+ || subrateMode > SUBRATE_REQ_LOW_POWER) {
+ throw new IllegalArgumentException(" Subrate Mode not within valid range");
+ }
+
+ Log.d(TAG, "requestsubrateMode() - params: " + subrateMode);
+ if (mService == null || mClientIf == 0) return false;
+
+ try {
+ mService.subrateModeRequest(
+ mClientIf, mDevice.getAddress(), subrateMode, mAttributionSource);
+ } catch (RemoteException e) {
+ Log.e(TAG, "", e);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Request a LE subrate request.
+ *
+ * <p>This function will send a LE subrate request to the remote device.
+ *
+ * @return true, if the request is send to the Bluetooth stack.
+ * @hide
+ */
+ public boolean bleSubrateRequest(int subrateMin, int subrateMax,
+ int maxLatency, int contNumber,
+ int supervisionTimeout) {
+ Log.d(TAG, "bleSubrateRequest() - subrateMin=" + subrateMin
+ + " subrateMax=" + (subrateMax)
+ + " maxLatency= " + maxLatency + "contNumber="
+ + contNumber + " supervisionTimeout=" + supervisionTimeout);
+ if (mService == null || mClientIf == 0) return false;
+
+ try {
+ mService.leSubrateRequest(mClientIf, mDevice.getAddress(),
+ subrateMin, subrateMax, maxLatency,
+ contNumber, supervisionTimeout,
+ mAttributionSource);
+ } catch (RemoteException e) {
+ Log.e(TAG, "", e);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* @deprecated Not supported - please use {@link BluetoothManager#getConnectedDevices(int)}
* with {@link BluetoothProfile#GATT} as argument
* @throws UnsupportedOperationException