Merge change 4757 into donut

* changes:
  Add getBatteryUsageHint() to BluetoothHeadset for power monitoring.
This commit is contained in:
Android (Google) Code Review
2009-06-19 11:29:57 -07:00
4 changed files with 43 additions and 1 deletions

View File

@@ -331,6 +331,31 @@ public class BluetoothHeadset {
return -1; return -1;
} }
/**
* Get battery usage hint for Bluetooth Headset service.
* This is a monotonically increasing integer. Wraps to 0 at
* Integer.MAX_INT, and at boot.
* Current implementation returns the number of AT commands handled since
* boot. This is a good indicator for spammy headset/handsfree units that
* can keep the device awake by polling for cellular status updates. As a
* rule of thumb, each AT command prevents the CPU from sleeping for 500 ms
* @return monotonically increasing battery usage hint, or a negative error
* code on error
* @hide
*/
public int getBatteryUsageHint() {
if (DBG) log("getBatteryUsageHint()");
if (mService != null) {
try {
return mService.getBatteryUsageHint();
} catch (RemoteException e) {Log.e(TAG, e.toString());}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
return -1;
}
/** /**
* Check class bits for possible HSP or HFP support. * Check class bits for possible HSP or HFP support.
* This is a simple heuristic that tries to guess if a device with the * This is a simple heuristic that tries to guess if a device with the

View File

@@ -40,6 +40,8 @@ public class HeadsetBase {
public static final int DIRECTION_INCOMING = 1; public static final int DIRECTION_INCOMING = 1;
public static final int DIRECTION_OUTGOING = 2; public static final int DIRECTION_OUTGOING = 2;
private static int sAtInputCount = 0; /* TODO: Consider not using a static variable */
private final BluetoothDevice mBluetooth; private final BluetoothDevice mBluetooth;
private final String mAddress; private final String mAddress;
private final int mRfcommChannel; private final int mRfcommChannel;
@@ -109,6 +111,14 @@ public class HeadsetBase {
acquireWakeLock(); acquireWakeLock();
long timestamp; long timestamp;
synchronized(HeadsetBase.class) {
if (sAtInputCount == Integer.MAX_VALUE) {
sAtInputCount = 0;
} else {
sAtInputCount++;
}
}
if (DBG) timestamp = System.currentTimeMillis(); if (DBG) timestamp = System.currentTimeMillis();
AtCommandResult result = mAtParser.process(input); AtCommandResult result = mAtParser.process(input);
if (DBG) Log.d(TAG, "Processing " + input + " took " + if (DBG) Log.d(TAG, "Processing " + input + " took " +
@@ -279,7 +289,11 @@ public class HeadsetBase {
} }
} }
private void log(String msg) { public static int getAtInputCount() {
return sAtInputCount;
}
private static void log(String msg) {
Log.d(TAG, msg); Log.d(TAG, msg);
} }
} }

View File

@@ -31,4 +31,5 @@ interface IBluetoothHeadset {
boolean stopVoiceRecognition(); boolean stopVoiceRecognition();
boolean setPriority(in String address, int priority); boolean setPriority(in String address, int priority);
int getPriority(in String address); int getPriority(in String address);
int getBatteryUsageHint();
} }

View File

@@ -1224,6 +1224,8 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub {
break; break;
} }
pw.println("getHeadsetAddress() = " + headset.getHeadsetAddress()); pw.println("getHeadsetAddress() = " + headset.getHeadsetAddress());
pw.println("getBatteryUsageHint() = " + headset.getBatteryUsageHint());
headset.close(); headset.close();
} }