summaryrefslogtreecommitdiffstats
path: root/core/java/android/bluetooth
diff options
context:
space:
mode:
authorPrerepa Viswanadham <dham@google.com>2014-07-22 17:00:09 -0700
committerPrerepa Viswanadham <dham@google.com>2014-07-23 18:54:46 +0000
commit8caac741a011ef245066f327e54cc6a0b77e6617 (patch)
tree17178a75172b76948bd969cf95e001b0880402ba /core/java/android/bluetooth
parente5ebd4bc76f37e13d2cb6d9d10f3bdb257562a6f (diff)
downloadframeworks_base-8caac741a011ef245066f327e54cc6a0b77e6617.zip
frameworks_base-8caac741a011ef245066f327e54cc6a0b77e6617.tar.gz
frameworks_base-8caac741a011ef245066f327e54cc6a0b77e6617.tar.bz2
Bug 15564216: Report Bluetooth tx/rx/idle activity info and energy reporting
Change-Id: I66fd83d8d59fbd93dec8886dfd313a81575e38a5
Diffstat (limited to 'core/java/android/bluetooth')
-rw-r--r--core/java/android/bluetooth/BluetoothActivityEnergyInfo.aidl19
-rw-r--r--core/java/android/bluetooth/BluetoothActivityEnergyInfo.java141
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java43
-rw-r--r--core/java/android/bluetooth/IBluetooth.aidl4
4 files changed, 207 insertions, 0 deletions
diff --git a/core/java/android/bluetooth/BluetoothActivityEnergyInfo.aidl b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.aidl
new file mode 100644
index 0000000..60cbf9f
--- /dev/null
+++ b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2014 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 BluetoothActivityEnergyInfo;
diff --git a/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java
new file mode 100644
index 0000000..ce87329
--- /dev/null
+++ b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2014 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;
+
+/**
+ * Record of energy and activity information from controller and
+ * underlying bt stack state.Timestamp the record with system
+ * time
+ * @hide
+ */
+public final class BluetoothActivityEnergyInfo implements Parcelable {
+ private final int mBluetoothStackState;
+ private final int mControllerTxTimeMs;
+ private final int mControllerRxTimeMs;
+ private final int mControllerIdleTimeMs;
+ private final int mControllerEnergyUsed;
+ private final long timestamp;
+
+ public static final int BT_STACK_STATE_INVALID = 0;
+ public static final int BT_STACK_STATE_STATE_ACTIVE = 1;
+ public static final int BT_STACK_STATE_STATE_SCANNING = 2;
+ public static final int BT_STACK_STATE_STATE_IDLE = 3;
+
+ public BluetoothActivityEnergyInfo(int stackState, int txTime, int rxTime,
+ int idleTime, int energyUsed) {
+ mBluetoothStackState = stackState;
+ mControllerTxTimeMs = txTime;
+ mControllerRxTimeMs = rxTime;
+ mControllerIdleTimeMs = idleTime;
+ mControllerEnergyUsed = energyUsed;
+ timestamp = System.currentTimeMillis();
+ }
+
+ @Override
+ public String toString() {
+ return "BluetoothActivityEnergyInfo{"
+ + " timestamp=" + timestamp
+ + " mBluetoothStackState=" + mBluetoothStackState
+ + " mControllerTxTimeMs=" + mControllerTxTimeMs
+ + " mControllerRxTimeMs=" + mControllerRxTimeMs
+ + " mControllerIdleTimeMs=" + mControllerIdleTimeMs
+ + " mControllerEnergyUsed=" + mControllerEnergyUsed
+ + " }";
+ }
+
+ public static final Parcelable.Creator<BluetoothActivityEnergyInfo> CREATOR =
+ new Parcelable.Creator<BluetoothActivityEnergyInfo>() {
+ public BluetoothActivityEnergyInfo createFromParcel(Parcel in) {
+ int stackState = in.readInt();
+ int txTime = in.readInt();
+ int rxTime = in.readInt();
+ int idleTime = in.readInt();
+ int energyUsed = in.readInt();
+ return new BluetoothActivityEnergyInfo(stackState, txTime, rxTime,
+ idleTime, energyUsed);
+ }
+ public BluetoothActivityEnergyInfo[] newArray(int size) {
+ return new BluetoothActivityEnergyInfo[size];
+ }
+ };
+
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(mBluetoothStackState);
+ out.writeInt(mControllerTxTimeMs);
+ out.writeInt(mControllerRxTimeMs);
+ out.writeInt(mControllerIdleTimeMs);
+ out.writeInt(mControllerEnergyUsed);
+ }
+
+ public int describeContents() {
+ return 0;
+ }
+
+ /**
+ * @return bt stack reported state
+ */
+ public int getBluetoothStackState() {
+ return mBluetoothStackState;
+ }
+
+ /**
+ * @return tx time in ms
+ */
+ public int getControllerTxTimeMillis() {
+ return mControllerTxTimeMs;
+ }
+
+ /**
+ * @return rx time in ms
+ */
+ public int getControllerRxTimeMillis() {
+ return mControllerRxTimeMs;
+ }
+
+ /**
+ * @return idle time in ms
+ */
+ public int getControllerIdleTimeMillis() {
+ return mControllerIdleTimeMs;
+ }
+
+ /**
+ * product of current(mA), voltage(V) and time(ms)
+ * @return energy used
+ */
+ public int getControllerEnergyUsed() {
+ return mControllerEnergyUsed;
+ }
+ /**
+ * @return timestamp(wall clock) of record creation
+ */
+ public long getTimeStamp() {
+ return timestamp;
+ }
+
+ /**
+ * @return if the record is valid
+ */
+ public boolean isValid() {
+ return ((getControllerTxTimeMillis() !=0) ||
+ (getControllerRxTimeMillis() !=0) ||
+ (getControllerIdleTimeMillis() !=0));
+ }
+}
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index faf8645..453d60c 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -377,6 +377,12 @@ public final class BluetoothAdapter {
private static final int ADDRESS_LENGTH = 17;
+ private static final int CONTROLLER_ENERGY_UPDATE_TIMEOUT_MILLIS = 30;
+ /** @hide */
+ public static final int ACTIVITY_ENERGY_INFO_CACHED = 0;
+ /** @hide */
+ public static final int ACTIVITY_ENERGY_INFO_REFRESHED = 1;
+
/**
* Lazily initialized singleton. Guaranteed final after first object
* constructed.
@@ -935,6 +941,43 @@ public final class BluetoothAdapter {
}
/**
+ * Return the record of {@link BluetoothActivityEnergyInfo} object that
+ * has the activity and energy info. This can be used to ascertain what
+ * the controller has been up to, since the last sample.
+ * @param updateType Type of info, cached vs refreshed.
+ *
+ * @return a record with {@link BluetoothActivityEnergyInfo} or null if
+ * report is unavailable or unsupported
+ * @hide
+ */
+ public BluetoothActivityEnergyInfo getControllerActivityEnergyInfo(int updateType) {
+ if (getState() != STATE_ON) return null;
+ try {
+ BluetoothActivityEnergyInfo record;
+ if (!mService.isActivityAndEnergyReportingSupported()) {
+ return null;
+ }
+ synchronized(this) {
+ if (updateType == ACTIVITY_ENERGY_INFO_REFRESHED) {
+ mService.getActivityEnergyInfoFromController();
+ wait(CONTROLLER_ENERGY_UPDATE_TIMEOUT_MILLIS);
+ }
+ record = mService.reportActivityInfo();
+ if (record.isValid()) {
+ return record;
+ } else {
+ return null;
+ }
+ }
+ } catch (InterruptedException e) {
+ Log.e(TAG, "getControllerActivityEnergyInfoCallback wait interrupted: " + e);
+ } catch (RemoteException e) {
+ Log.e(TAG, "getControllerActivityEnergyInfoCallback: " + e);
+ }
+ return null;
+ }
+
+ /**
* Return the set of {@link BluetoothDevice} objects that are bonded
* (paired) to the local adapter.
* <p>If Bluetooth state is not {@link #STATE_ON}, this API
diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl
index d334b91..ca55803 100644
--- a/core/java/android/bluetooth/IBluetooth.aidl
+++ b/core/java/android/bluetooth/IBluetooth.aidl
@@ -18,6 +18,7 @@ package android.bluetooth;
import android.bluetooth.IBluetoothCallback;
import android.bluetooth.IBluetoothStateChangeCallback;
+import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.BluetoothDevice;
import android.os.ParcelUuid;
import android.os.ParcelFileDescriptor;
@@ -88,4 +89,7 @@ interface IBluetooth
boolean isMultiAdvertisementSupported();
boolean isOffloadedFilteringSupported();
boolean isOffloadedScanBatchingSupported();
+ boolean isActivityAndEnergyReportingSupported();
+ void getActivityEnergyInfoFromController();
+ BluetoothActivityEnergyInfo reportActivityInfo();
}