Loading services/core/Android.bp +5 −3 Original line number Original line Diff line number Diff line Loading @@ -138,9 +138,11 @@ java_library_static { "android.hardware.boot-V1.1-java", "android.hardware.boot-V1.1-java", "android.hardware.boot-V1.2-java", "android.hardware.boot-V1.2-java", "android.hardware.broadcastradio-V2.0-java", "android.hardware.broadcastradio-V2.0-java", "android.hardware.health-V1.0-java", "android.hardware.health-V1.0-java", // HIDL "android.hardware.health-V2.0-java", "android.hardware.health-V2.0-java", // HIDL "android.hardware.health-V2.1-java", "android.hardware.health-V2.1-java", // HIDL "android.hardware.health-V1-java", // AIDL "android.hardware.health-translate-java", "android.hardware.light-V1-java", "android.hardware.light-V1-java", "android.hardware.tv.cec-V1.1-java", "android.hardware.tv.cec-V1.1-java", "android.hardware.weaver-V1.0-java", "android.hardware.weaver-V1.0-java", Loading services/core/java/com/android/server/BatteryService.java +83 −68 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,7 @@ package com.android.server; package com.android.server; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import static com.android.server.health.Utils.copy; import static com.android.server.health.Utils.copyV1Battery; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager; Loading @@ -26,7 +26,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.database.ContentObserver; import android.database.ContentObserver; import android.hardware.health.V1_0.HealthInfo; import android.hardware.health.HealthInfo; import android.hardware.health.V2_1.BatteryCapacityLevel; import android.hardware.health.V2_1.BatteryCapacityLevel; import android.metrics.LogMaker; import android.metrics.LogMaker; import android.os.BatteryManager; import android.os.BatteryManager; Loading Loading @@ -138,7 +138,6 @@ public final class BatteryService extends SystemService { private HealthInfo mHealthInfo; private HealthInfo mHealthInfo; private final HealthInfo mLastHealthInfo = new HealthInfo(); private final HealthInfo mLastHealthInfo = new HealthInfo(); private android.hardware.health.V2_1.HealthInfo mHealthInfo2p1; private boolean mBatteryLevelCritical; private boolean mBatteryLevelCritical; private int mLastBatteryStatus; private int mLastBatteryStatus; private int mLastBatteryHealth; private int mLastBatteryHealth; Loading Loading @@ -354,8 +353,8 @@ public final class BatteryService extends SystemService { } } private boolean shouldShutdownLocked() { private boolean shouldShutdownLocked() { if (mHealthInfo2p1.batteryCapacityLevel != BatteryCapacityLevel.UNSUPPORTED) { if (mHealthInfo.batteryCapacityLevel != BatteryCapacityLevel.UNSUPPORTED) { return (mHealthInfo2p1.batteryCapacityLevel == BatteryCapacityLevel.CRITICAL); return (mHealthInfo.batteryCapacityLevel == BatteryCapacityLevel.CRITICAL); } } if (mHealthInfo.batteryLevel > 0) { if (mHealthInfo.batteryLevel > 0) { return false; return false; Loading Loading @@ -397,7 +396,7 @@ public final class BatteryService extends SystemService { // shut down gracefully if temperature is too high (> 68.0C by default) // shut down gracefully if temperature is too high (> 68.0C by default) // wait until the system has booted before attempting to display the // wait until the system has booted before attempting to display the // shutdown dialog. // shutdown dialog. if (mHealthInfo.batteryTemperature > mShutdownBatteryTemperature) { if (mHealthInfo.batteryTemperatureTenthsCelsius > mShutdownBatteryTemperature) { mHandler.post(new Runnable() { mHandler.post(new Runnable() { @Override @Override public void run() { public void run() { Loading @@ -414,27 +413,23 @@ public final class BatteryService extends SystemService { } } } } private void update(android.hardware.health.V2_1.HealthInfo info) { private void update(android.hardware.health.HealthInfo info) { traceBegin("HealthInfoUpdate"); traceBegin("HealthInfoUpdate"); Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryChargeCounter", Trace.traceCounter( info.legacy.legacy.batteryChargeCounter); Trace.TRACE_TAG_POWER, "BatteryChargeCounter", info.batteryChargeCounterUah); Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryCurrent", Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryCurrent", info.batteryCurrentMicroamps); info.legacy.legacy.batteryCurrent); Trace.traceCounter(Trace.TRACE_TAG_POWER, "PlugType", plugType(info)); Trace.traceCounter(Trace.TRACE_TAG_POWER, "PlugType", Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryStatus", info.batteryStatus); plugType(info.legacy.legacy)); Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryStatus", info.legacy.legacy.batteryStatus); synchronized (mLock) { synchronized (mLock) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { mHealthInfo = info.legacy.legacy; mHealthInfo = info; mHealthInfo2p1 = info; // Process the new values. // Process the new values. processValuesLocked(false); processValuesLocked(false); mLock.notifyAll(); // for any waiters on new info mLock.notifyAll(); // for any waiters on new info } else { } else { copy(mLastHealthInfo, info.legacy.legacy); copyV1Battery(mLastHealthInfo, info); } } } } traceEnd(); traceEnd(); Loading Loading @@ -470,11 +465,16 @@ public final class BatteryService extends SystemService { // Let the battery stats keep track of the current level. // Let the battery stats keep track of the current level. try { try { mBatteryStats.setBatteryState(mHealthInfo.batteryStatus, mHealthInfo.batteryHealth, mBatteryStats.setBatteryState( mPlugType, mHealthInfo.batteryLevel, mHealthInfo.batteryTemperature, mHealthInfo.batteryStatus, mHealthInfo.batteryVoltage, mHealthInfo.batteryChargeCounter, mHealthInfo.batteryHealth, mHealthInfo.batteryFullCharge, mPlugType, mHealthInfo2p1.batteryChargeTimeToFullNowSeconds); mHealthInfo.batteryLevel, mHealthInfo.batteryTemperatureTenthsCelsius, mHealthInfo.batteryVoltageMillivolts, mHealthInfo.batteryChargeCounterUah, mHealthInfo.batteryFullChargeUah, mHealthInfo.batteryChargeTimeToFullNowSeconds); } catch (RemoteException e) { } catch (RemoteException e) { // Should never happen. // Should never happen. } } Loading @@ -482,17 +482,18 @@ public final class BatteryService extends SystemService { shutdownIfNoPowerLocked(); shutdownIfNoPowerLocked(); shutdownIfOverTempLocked(); shutdownIfOverTempLocked(); if (force || (mHealthInfo.batteryStatus != mLastBatteryStatus || if (force mHealthInfo.batteryHealth != mLastBatteryHealth || || (mHealthInfo.batteryStatus != mLastBatteryStatus mHealthInfo.batteryPresent != mLastBatteryPresent || || mHealthInfo.batteryHealth != mLastBatteryHealth mHealthInfo.batteryLevel != mLastBatteryLevel || || mHealthInfo.batteryPresent != mLastBatteryPresent mPlugType != mLastPlugType || || mHealthInfo.batteryLevel != mLastBatteryLevel mHealthInfo.batteryVoltage != mLastBatteryVoltage || || mPlugType != mLastPlugType mHealthInfo.batteryTemperature != mLastBatteryTemperature || || mHealthInfo.batteryVoltageMillivolts != mLastBatteryVoltage mHealthInfo.maxChargingCurrent != mLastMaxChargingCurrent || || mHealthInfo.batteryTemperatureTenthsCelsius != mLastBatteryTemperature mHealthInfo.maxChargingVoltage != mLastMaxChargingVoltage || || mHealthInfo.maxChargingCurrentMicroamps != mLastMaxChargingCurrent mHealthInfo.batteryChargeCounter != mLastChargeCounter || || mHealthInfo.maxChargingVoltageMicrovolts != mLastMaxChargingVoltage mInvalidCharger != mLastInvalidCharger)) { || mHealthInfo.batteryChargeCounterUah != mLastChargeCounter || mInvalidCharger != mLastInvalidCharger)) { if (mPlugType != mLastPlugType) { if (mPlugType != mLastPlugType) { if (mLastPlugType == BATTERY_PLUGGED_NONE) { if (mLastPlugType == BATTERY_PLUGGED_NONE) { Loading Loading @@ -549,8 +550,11 @@ public final class BatteryService extends SystemService { if (mHealthInfo.batteryLevel != mLastBatteryLevel) { if (mHealthInfo.batteryLevel != mLastBatteryLevel) { // Don't do this just from voltage or temperature changes, that is // Don't do this just from voltage or temperature changes, that is // too noisy. // too noisy. EventLog.writeEvent(EventLogTags.BATTERY_LEVEL, EventLog.writeEvent( mHealthInfo.batteryLevel, mHealthInfo.batteryVoltage, mHealthInfo.batteryTemperature); EventLogTags.BATTERY_LEVEL, mHealthInfo.batteryLevel, mHealthInfo.batteryVoltageMillivolts, mHealthInfo.batteryTemperatureTenthsCelsius); } } if (mBatteryLevelCritical && !mLastBatteryLevelCritical && if (mBatteryLevelCritical && !mLastBatteryLevelCritical && mPlugType == BATTERY_PLUGGED_NONE) { mPlugType == BATTERY_PLUGGED_NONE) { Loading Loading @@ -656,11 +660,11 @@ public final class BatteryService extends SystemService { mLastBatteryPresent = mHealthInfo.batteryPresent; mLastBatteryPresent = mHealthInfo.batteryPresent; mLastBatteryLevel = mHealthInfo.batteryLevel; mLastBatteryLevel = mHealthInfo.batteryLevel; mLastPlugType = mPlugType; mLastPlugType = mPlugType; mLastBatteryVoltage = mHealthInfo.batteryVoltage; mLastBatteryVoltage = mHealthInfo.batteryVoltageMillivolts; mLastBatteryTemperature = mHealthInfo.batteryTemperature; mLastBatteryTemperature = mHealthInfo.batteryTemperatureTenthsCelsius; mLastMaxChargingCurrent = mHealthInfo.maxChargingCurrent; mLastMaxChargingCurrent = mHealthInfo.maxChargingCurrentMicroamps; mLastMaxChargingVoltage = mHealthInfo.maxChargingVoltage; mLastMaxChargingVoltage = mHealthInfo.maxChargingVoltageMicrovolts; mLastChargeCounter = mHealthInfo.batteryChargeCounter; mLastChargeCounter = mHealthInfo.batteryChargeCounterUah; mLastBatteryLevelCritical = mBatteryLevelCritical; mLastBatteryLevelCritical = mBatteryLevelCritical; mLastInvalidCharger = mInvalidCharger; mLastInvalidCharger = mInvalidCharger; } } Loading @@ -683,13 +687,17 @@ public final class BatteryService extends SystemService { intent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); intent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); intent.putExtra(BatteryManager.EXTRA_ICON_SMALL, icon); intent.putExtra(BatteryManager.EXTRA_ICON_SMALL, icon); intent.putExtra(BatteryManager.EXTRA_PLUGGED, mPlugType); intent.putExtra(BatteryManager.EXTRA_PLUGGED, mPlugType); intent.putExtra(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltage); intent.putExtra(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltageMillivolts); intent.putExtra(BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperature); intent.putExtra( BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperatureTenthsCelsius); intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mHealthInfo.batteryTechnology); intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mHealthInfo.batteryTechnology); intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger); intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger); intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrent); intent.putExtra( intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltage); BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrentMicroamps); intent.putExtra(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); intent.putExtra( BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltageMicrovolts); intent.putExtra(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounterUah); if (DEBUG) { if (DEBUG) { Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. scale:" + BATTERY_SCALE Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. scale:" + BATTERY_SCALE + ", info:" + mHealthInfo.toString()); + ", info:" + mHealthInfo.toString()); Loading @@ -709,9 +717,9 @@ public final class BatteryService extends SystemService { event.putBoolean(BatteryManager.EXTRA_BATTERY_LOW, mSentLowBatteryBroadcast); event.putBoolean(BatteryManager.EXTRA_BATTERY_LOW, mSentLowBatteryBroadcast); event.putInt(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); event.putInt(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); event.putInt(BatteryManager.EXTRA_PLUGGED, mPlugType); event.putInt(BatteryManager.EXTRA_PLUGGED, mPlugType); event.putInt(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltage); event.putInt(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltageMillivolts); event.putInt(BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperature); event.putInt(BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperatureTenthsCelsius); event.putInt(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); event.putInt(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounterUah); event.putLong(BatteryManager.EXTRA_EVENT_TIMESTAMP, now); event.putLong(BatteryManager.EXTRA_EVENT_TIMESTAMP, now); boolean queueWasEmpty = mBatteryLevelsEventQueue.isEmpty(); boolean queueWasEmpty = mBatteryLevelsEventQueue.isEmpty(); Loading Loading @@ -903,7 +911,7 @@ public final class BatteryService extends SystemService { } } try { try { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } boolean update = true; boolean update = true; switch (key) { switch (key) { Loading @@ -926,10 +934,10 @@ public final class BatteryService extends SystemService { mHealthInfo.batteryLevel = Integer.parseInt(value); mHealthInfo.batteryLevel = Integer.parseInt(value); break; break; case "counter": case "counter": mHealthInfo.batteryChargeCounter = Integer.parseInt(value); mHealthInfo.batteryChargeCounterUah = Integer.parseInt(value); break; break; case "temp": case "temp": mHealthInfo.batteryTemperature = Integer.parseInt(value); mHealthInfo.batteryTemperatureTenthsCelsius = Integer.parseInt(value); break; break; case "invalid": case "invalid": mInvalidCharger = Integer.parseInt(value); mInvalidCharger = Integer.parseInt(value); Loading Loading @@ -973,7 +981,7 @@ public final class BatteryService extends SystemService { private void setChargerAcOnline(boolean online, boolean forceUpdate) { private void setChargerAcOnline(boolean online, boolean forceUpdate) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } mHealthInfo.chargerAcOnline = online; mHealthInfo.chargerAcOnline = online; mUpdatesStopped = true; mUpdatesStopped = true; Loading @@ -982,7 +990,7 @@ public final class BatteryService extends SystemService { private void setBatteryLevel(int level, boolean forceUpdate) { private void setBatteryLevel(int level, boolean forceUpdate) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } mHealthInfo.batteryLevel = level; mHealthInfo.batteryLevel = level; mUpdatesStopped = true; mUpdatesStopped = true; Loading @@ -991,7 +999,7 @@ public final class BatteryService extends SystemService { private void unplugBattery(boolean forceUpdate, PrintWriter pw) { private void unplugBattery(boolean forceUpdate, PrintWriter pw) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } mHealthInfo.chargerAcOnline = false; mHealthInfo.chargerAcOnline = false; mHealthInfo.chargerUsbOnline = false; mHealthInfo.chargerUsbOnline = false; Loading @@ -1003,7 +1011,7 @@ public final class BatteryService extends SystemService { private void resetBattery(boolean forceUpdate, @Nullable PrintWriter pw) { private void resetBattery(boolean forceUpdate, @Nullable PrintWriter pw) { if (mUpdatesStopped) { if (mUpdatesStopped) { mUpdatesStopped = false; mUpdatesStopped = false; copy(mHealthInfo, mLastHealthInfo); copyV1Battery(mHealthInfo, mLastHealthInfo); Binder.withCleanCallingIdentity(() -> processValuesLocked(forceUpdate, pw)); Binder.withCleanCallingIdentity(() -> processValuesLocked(forceUpdate, pw)); } } if (mBatteryInputSuspended) { if (mBatteryInputSuspended) { Loading Loading @@ -1038,16 +1046,16 @@ public final class BatteryService extends SystemService { pw.println(" AC powered: " + mHealthInfo.chargerAcOnline); pw.println(" AC powered: " + mHealthInfo.chargerAcOnline); pw.println(" USB powered: " + mHealthInfo.chargerUsbOnline); pw.println(" USB powered: " + mHealthInfo.chargerUsbOnline); pw.println(" Wireless powered: " + mHealthInfo.chargerWirelessOnline); pw.println(" Wireless powered: " + mHealthInfo.chargerWirelessOnline); pw.println(" Max charging current: " + mHealthInfo.maxChargingCurrent); pw.println(" Max charging current: " + mHealthInfo.maxChargingCurrentMicroamps); pw.println(" Max charging voltage: " + mHealthInfo.maxChargingVoltage); pw.println(" Max charging voltage: " + mHealthInfo.maxChargingVoltageMicrovolts); pw.println(" Charge counter: " + mHealthInfo.batteryChargeCounter); pw.println(" Charge counter: " + mHealthInfo.batteryChargeCounterUah); pw.println(" status: " + mHealthInfo.batteryStatus); pw.println(" status: " + mHealthInfo.batteryStatus); pw.println(" health: " + mHealthInfo.batteryHealth); pw.println(" health: " + mHealthInfo.batteryHealth); pw.println(" present: " + mHealthInfo.batteryPresent); pw.println(" present: " + mHealthInfo.batteryPresent); pw.println(" level: " + mHealthInfo.batteryLevel); pw.println(" level: " + mHealthInfo.batteryLevel); pw.println(" scale: " + BATTERY_SCALE); pw.println(" scale: " + BATTERY_SCALE); pw.println(" voltage: " + mHealthInfo.batteryVoltage); pw.println(" voltage: " + mHealthInfo.batteryVoltageMillivolts); pw.println(" temperature: " + mHealthInfo.batteryTemperature); pw.println(" temperature: " + mHealthInfo.batteryTemperatureTenthsCelsius); pw.println(" technology: " + mHealthInfo.batteryTechnology); pw.println(" technology: " + mHealthInfo.batteryTechnology); } else { } else { Shell shell = new Shell(); Shell shell = new Shell(); Loading @@ -1070,16 +1078,23 @@ public final class BatteryService extends SystemService { batteryPluggedValue = OsProtoEnums.BATTERY_PLUGGED_WIRELESS; batteryPluggedValue = OsProtoEnums.BATTERY_PLUGGED_WIRELESS; } } proto.write(BatteryServiceDumpProto.PLUGGED, batteryPluggedValue); proto.write(BatteryServiceDumpProto.PLUGGED, batteryPluggedValue); proto.write(BatteryServiceDumpProto.MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrent); proto.write( proto.write(BatteryServiceDumpProto.MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltage); BatteryServiceDumpProto.MAX_CHARGING_CURRENT, proto.write(BatteryServiceDumpProto.CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); mHealthInfo.maxChargingCurrentMicroamps); proto.write( BatteryServiceDumpProto.MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltageMicrovolts); proto.write( BatteryServiceDumpProto.CHARGE_COUNTER, mHealthInfo.batteryChargeCounterUah); proto.write(BatteryServiceDumpProto.STATUS, mHealthInfo.batteryStatus); proto.write(BatteryServiceDumpProto.STATUS, mHealthInfo.batteryStatus); proto.write(BatteryServiceDumpProto.HEALTH, mHealthInfo.batteryHealth); proto.write(BatteryServiceDumpProto.HEALTH, mHealthInfo.batteryHealth); proto.write(BatteryServiceDumpProto.IS_PRESENT, mHealthInfo.batteryPresent); proto.write(BatteryServiceDumpProto.IS_PRESENT, mHealthInfo.batteryPresent); proto.write(BatteryServiceDumpProto.LEVEL, mHealthInfo.batteryLevel); proto.write(BatteryServiceDumpProto.LEVEL, mHealthInfo.batteryLevel); proto.write(BatteryServiceDumpProto.SCALE, BATTERY_SCALE); proto.write(BatteryServiceDumpProto.SCALE, BATTERY_SCALE); proto.write(BatteryServiceDumpProto.VOLTAGE, mHealthInfo.batteryVoltage); proto.write(BatteryServiceDumpProto.VOLTAGE, mHealthInfo.batteryVoltageMillivolts); proto.write(BatteryServiceDumpProto.TEMPERATURE, mHealthInfo.batteryTemperature); proto.write( BatteryServiceDumpProto.TEMPERATURE, mHealthInfo.batteryTemperatureTenthsCelsius); proto.write(BatteryServiceDumpProto.TECHNOLOGY, mHealthInfo.batteryTechnology); proto.write(BatteryServiceDumpProto.TECHNOLOGY, mHealthInfo.batteryTechnology); } } proto.flush(); proto.flush(); Loading Loading @@ -1207,14 +1222,14 @@ public final class BatteryService extends SystemService { @Override @Override public int getBatteryChargeCounter() { public int getBatteryChargeCounter() { synchronized (mLock) { synchronized (mLock) { return mHealthInfo.batteryChargeCounter; return mHealthInfo.batteryChargeCounterUah; } } } } @Override @Override public int getBatteryFullCharge() { public int getBatteryFullCharge() { synchronized (mLock) { synchronized (mLock) { return mHealthInfo.batteryFullCharge; return mHealthInfo.batteryFullChargeUah; } } } } Loading services/core/java/com/android/server/health/HealthHalCallbackHidl.java +4 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.health; package com.android.server.health; import static android.hardware.health.Translate.h2aTranslate; import android.annotation.NonNull; import android.annotation.NonNull; import android.hardware.health.V2_0.IHealth; import android.hardware.health.V2_0.IHealth; import android.hardware.health.V2_0.Result; import android.hardware.health.V2_0.Result; Loading Loading @@ -64,12 +66,12 @@ class HealthHalCallbackHidl extends IHealthInfoCallback.Stub propsLatest.batteryChargeTimeToFullNowSeconds = propsLatest.batteryChargeTimeToFullNowSeconds = Constants.BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED; Constants.BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED; mCallback.update(propsLatest); mCallback.update(h2aTranslate(propsLatest)); } } @Override @Override public void healthInfoChanged_2_1(android.hardware.health.V2_1.HealthInfo props) { public void healthInfoChanged_2_1(android.hardware.health.V2_1.HealthInfo props) { mCallback.update(props); mCallback.update(h2aTranslate(props)); } } // on new service registered // on new service registered Loading services/core/java/com/android/server/health/HealthInfoCallback.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,5 @@ public interface HealthInfoCallback { * * * @param props the new health info. * @param props the new health info. */ */ // TODO(b/177269435): AIDL void update(android.hardware.health.HealthInfo props); void update(android.hardware.health.V2_1.HealthInfo props); } } services/core/java/com/android/server/health/HealthServiceWrapper.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -68,8 +68,7 @@ public abstract class HealthServiceWrapper { * service-specific error when calling {@code getHealthInfo}, e.g. it is unsupported. * service-specific error when calling {@code getHealthInfo}, e.g. it is unsupported. * @throws RemoteException for any transaction-level errors * @throws RemoteException for any transaction-level errors */ */ // TODO(b/177269435): AIDL public abstract android.hardware.health.HealthInfo getHealthInfo() throws RemoteException; public abstract android.hardware.health.V1_0.HealthInfo getHealthInfo() throws RemoteException; /** /** * Create a new HealthServiceWrapper instance. * Create a new HealthServiceWrapper instance. Loading Loading
services/core/Android.bp +5 −3 Original line number Original line Diff line number Diff line Loading @@ -138,9 +138,11 @@ java_library_static { "android.hardware.boot-V1.1-java", "android.hardware.boot-V1.1-java", "android.hardware.boot-V1.2-java", "android.hardware.boot-V1.2-java", "android.hardware.broadcastradio-V2.0-java", "android.hardware.broadcastradio-V2.0-java", "android.hardware.health-V1.0-java", "android.hardware.health-V1.0-java", // HIDL "android.hardware.health-V2.0-java", "android.hardware.health-V2.0-java", // HIDL "android.hardware.health-V2.1-java", "android.hardware.health-V2.1-java", // HIDL "android.hardware.health-V1-java", // AIDL "android.hardware.health-translate-java", "android.hardware.light-V1-java", "android.hardware.light-V1-java", "android.hardware.tv.cec-V1.1-java", "android.hardware.tv.cec-V1.1-java", "android.hardware.weaver-V1.0-java", "android.hardware.weaver-V1.0-java", Loading
services/core/java/com/android/server/BatteryService.java +83 −68 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,7 @@ package com.android.server; package com.android.server; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import static com.android.server.health.Utils.copy; import static com.android.server.health.Utils.copyV1Battery; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager; Loading @@ -26,7 +26,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.database.ContentObserver; import android.database.ContentObserver; import android.hardware.health.V1_0.HealthInfo; import android.hardware.health.HealthInfo; import android.hardware.health.V2_1.BatteryCapacityLevel; import android.hardware.health.V2_1.BatteryCapacityLevel; import android.metrics.LogMaker; import android.metrics.LogMaker; import android.os.BatteryManager; import android.os.BatteryManager; Loading Loading @@ -138,7 +138,6 @@ public final class BatteryService extends SystemService { private HealthInfo mHealthInfo; private HealthInfo mHealthInfo; private final HealthInfo mLastHealthInfo = new HealthInfo(); private final HealthInfo mLastHealthInfo = new HealthInfo(); private android.hardware.health.V2_1.HealthInfo mHealthInfo2p1; private boolean mBatteryLevelCritical; private boolean mBatteryLevelCritical; private int mLastBatteryStatus; private int mLastBatteryStatus; private int mLastBatteryHealth; private int mLastBatteryHealth; Loading Loading @@ -354,8 +353,8 @@ public final class BatteryService extends SystemService { } } private boolean shouldShutdownLocked() { private boolean shouldShutdownLocked() { if (mHealthInfo2p1.batteryCapacityLevel != BatteryCapacityLevel.UNSUPPORTED) { if (mHealthInfo.batteryCapacityLevel != BatteryCapacityLevel.UNSUPPORTED) { return (mHealthInfo2p1.batteryCapacityLevel == BatteryCapacityLevel.CRITICAL); return (mHealthInfo.batteryCapacityLevel == BatteryCapacityLevel.CRITICAL); } } if (mHealthInfo.batteryLevel > 0) { if (mHealthInfo.batteryLevel > 0) { return false; return false; Loading Loading @@ -397,7 +396,7 @@ public final class BatteryService extends SystemService { // shut down gracefully if temperature is too high (> 68.0C by default) // shut down gracefully if temperature is too high (> 68.0C by default) // wait until the system has booted before attempting to display the // wait until the system has booted before attempting to display the // shutdown dialog. // shutdown dialog. if (mHealthInfo.batteryTemperature > mShutdownBatteryTemperature) { if (mHealthInfo.batteryTemperatureTenthsCelsius > mShutdownBatteryTemperature) { mHandler.post(new Runnable() { mHandler.post(new Runnable() { @Override @Override public void run() { public void run() { Loading @@ -414,27 +413,23 @@ public final class BatteryService extends SystemService { } } } } private void update(android.hardware.health.V2_1.HealthInfo info) { private void update(android.hardware.health.HealthInfo info) { traceBegin("HealthInfoUpdate"); traceBegin("HealthInfoUpdate"); Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryChargeCounter", Trace.traceCounter( info.legacy.legacy.batteryChargeCounter); Trace.TRACE_TAG_POWER, "BatteryChargeCounter", info.batteryChargeCounterUah); Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryCurrent", Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryCurrent", info.batteryCurrentMicroamps); info.legacy.legacy.batteryCurrent); Trace.traceCounter(Trace.TRACE_TAG_POWER, "PlugType", plugType(info)); Trace.traceCounter(Trace.TRACE_TAG_POWER, "PlugType", Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryStatus", info.batteryStatus); plugType(info.legacy.legacy)); Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryStatus", info.legacy.legacy.batteryStatus); synchronized (mLock) { synchronized (mLock) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { mHealthInfo = info.legacy.legacy; mHealthInfo = info; mHealthInfo2p1 = info; // Process the new values. // Process the new values. processValuesLocked(false); processValuesLocked(false); mLock.notifyAll(); // for any waiters on new info mLock.notifyAll(); // for any waiters on new info } else { } else { copy(mLastHealthInfo, info.legacy.legacy); copyV1Battery(mLastHealthInfo, info); } } } } traceEnd(); traceEnd(); Loading Loading @@ -470,11 +465,16 @@ public final class BatteryService extends SystemService { // Let the battery stats keep track of the current level. // Let the battery stats keep track of the current level. try { try { mBatteryStats.setBatteryState(mHealthInfo.batteryStatus, mHealthInfo.batteryHealth, mBatteryStats.setBatteryState( mPlugType, mHealthInfo.batteryLevel, mHealthInfo.batteryTemperature, mHealthInfo.batteryStatus, mHealthInfo.batteryVoltage, mHealthInfo.batteryChargeCounter, mHealthInfo.batteryHealth, mHealthInfo.batteryFullCharge, mPlugType, mHealthInfo2p1.batteryChargeTimeToFullNowSeconds); mHealthInfo.batteryLevel, mHealthInfo.batteryTemperatureTenthsCelsius, mHealthInfo.batteryVoltageMillivolts, mHealthInfo.batteryChargeCounterUah, mHealthInfo.batteryFullChargeUah, mHealthInfo.batteryChargeTimeToFullNowSeconds); } catch (RemoteException e) { } catch (RemoteException e) { // Should never happen. // Should never happen. } } Loading @@ -482,17 +482,18 @@ public final class BatteryService extends SystemService { shutdownIfNoPowerLocked(); shutdownIfNoPowerLocked(); shutdownIfOverTempLocked(); shutdownIfOverTempLocked(); if (force || (mHealthInfo.batteryStatus != mLastBatteryStatus || if (force mHealthInfo.batteryHealth != mLastBatteryHealth || || (mHealthInfo.batteryStatus != mLastBatteryStatus mHealthInfo.batteryPresent != mLastBatteryPresent || || mHealthInfo.batteryHealth != mLastBatteryHealth mHealthInfo.batteryLevel != mLastBatteryLevel || || mHealthInfo.batteryPresent != mLastBatteryPresent mPlugType != mLastPlugType || || mHealthInfo.batteryLevel != mLastBatteryLevel mHealthInfo.batteryVoltage != mLastBatteryVoltage || || mPlugType != mLastPlugType mHealthInfo.batteryTemperature != mLastBatteryTemperature || || mHealthInfo.batteryVoltageMillivolts != mLastBatteryVoltage mHealthInfo.maxChargingCurrent != mLastMaxChargingCurrent || || mHealthInfo.batteryTemperatureTenthsCelsius != mLastBatteryTemperature mHealthInfo.maxChargingVoltage != mLastMaxChargingVoltage || || mHealthInfo.maxChargingCurrentMicroamps != mLastMaxChargingCurrent mHealthInfo.batteryChargeCounter != mLastChargeCounter || || mHealthInfo.maxChargingVoltageMicrovolts != mLastMaxChargingVoltage mInvalidCharger != mLastInvalidCharger)) { || mHealthInfo.batteryChargeCounterUah != mLastChargeCounter || mInvalidCharger != mLastInvalidCharger)) { if (mPlugType != mLastPlugType) { if (mPlugType != mLastPlugType) { if (mLastPlugType == BATTERY_PLUGGED_NONE) { if (mLastPlugType == BATTERY_PLUGGED_NONE) { Loading Loading @@ -549,8 +550,11 @@ public final class BatteryService extends SystemService { if (mHealthInfo.batteryLevel != mLastBatteryLevel) { if (mHealthInfo.batteryLevel != mLastBatteryLevel) { // Don't do this just from voltage or temperature changes, that is // Don't do this just from voltage or temperature changes, that is // too noisy. // too noisy. EventLog.writeEvent(EventLogTags.BATTERY_LEVEL, EventLog.writeEvent( mHealthInfo.batteryLevel, mHealthInfo.batteryVoltage, mHealthInfo.batteryTemperature); EventLogTags.BATTERY_LEVEL, mHealthInfo.batteryLevel, mHealthInfo.batteryVoltageMillivolts, mHealthInfo.batteryTemperatureTenthsCelsius); } } if (mBatteryLevelCritical && !mLastBatteryLevelCritical && if (mBatteryLevelCritical && !mLastBatteryLevelCritical && mPlugType == BATTERY_PLUGGED_NONE) { mPlugType == BATTERY_PLUGGED_NONE) { Loading Loading @@ -656,11 +660,11 @@ public final class BatteryService extends SystemService { mLastBatteryPresent = mHealthInfo.batteryPresent; mLastBatteryPresent = mHealthInfo.batteryPresent; mLastBatteryLevel = mHealthInfo.batteryLevel; mLastBatteryLevel = mHealthInfo.batteryLevel; mLastPlugType = mPlugType; mLastPlugType = mPlugType; mLastBatteryVoltage = mHealthInfo.batteryVoltage; mLastBatteryVoltage = mHealthInfo.batteryVoltageMillivolts; mLastBatteryTemperature = mHealthInfo.batteryTemperature; mLastBatteryTemperature = mHealthInfo.batteryTemperatureTenthsCelsius; mLastMaxChargingCurrent = mHealthInfo.maxChargingCurrent; mLastMaxChargingCurrent = mHealthInfo.maxChargingCurrentMicroamps; mLastMaxChargingVoltage = mHealthInfo.maxChargingVoltage; mLastMaxChargingVoltage = mHealthInfo.maxChargingVoltageMicrovolts; mLastChargeCounter = mHealthInfo.batteryChargeCounter; mLastChargeCounter = mHealthInfo.batteryChargeCounterUah; mLastBatteryLevelCritical = mBatteryLevelCritical; mLastBatteryLevelCritical = mBatteryLevelCritical; mLastInvalidCharger = mInvalidCharger; mLastInvalidCharger = mInvalidCharger; } } Loading @@ -683,13 +687,17 @@ public final class BatteryService extends SystemService { intent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); intent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); intent.putExtra(BatteryManager.EXTRA_ICON_SMALL, icon); intent.putExtra(BatteryManager.EXTRA_ICON_SMALL, icon); intent.putExtra(BatteryManager.EXTRA_PLUGGED, mPlugType); intent.putExtra(BatteryManager.EXTRA_PLUGGED, mPlugType); intent.putExtra(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltage); intent.putExtra(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltageMillivolts); intent.putExtra(BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperature); intent.putExtra( BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperatureTenthsCelsius); intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mHealthInfo.batteryTechnology); intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mHealthInfo.batteryTechnology); intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger); intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger); intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrent); intent.putExtra( intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltage); BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrentMicroamps); intent.putExtra(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); intent.putExtra( BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltageMicrovolts); intent.putExtra(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounterUah); if (DEBUG) { if (DEBUG) { Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. scale:" + BATTERY_SCALE Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. scale:" + BATTERY_SCALE + ", info:" + mHealthInfo.toString()); + ", info:" + mHealthInfo.toString()); Loading @@ -709,9 +717,9 @@ public final class BatteryService extends SystemService { event.putBoolean(BatteryManager.EXTRA_BATTERY_LOW, mSentLowBatteryBroadcast); event.putBoolean(BatteryManager.EXTRA_BATTERY_LOW, mSentLowBatteryBroadcast); event.putInt(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); event.putInt(BatteryManager.EXTRA_SCALE, BATTERY_SCALE); event.putInt(BatteryManager.EXTRA_PLUGGED, mPlugType); event.putInt(BatteryManager.EXTRA_PLUGGED, mPlugType); event.putInt(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltage); event.putInt(BatteryManager.EXTRA_VOLTAGE, mHealthInfo.batteryVoltageMillivolts); event.putInt(BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperature); event.putInt(BatteryManager.EXTRA_TEMPERATURE, mHealthInfo.batteryTemperatureTenthsCelsius); event.putInt(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); event.putInt(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounterUah); event.putLong(BatteryManager.EXTRA_EVENT_TIMESTAMP, now); event.putLong(BatteryManager.EXTRA_EVENT_TIMESTAMP, now); boolean queueWasEmpty = mBatteryLevelsEventQueue.isEmpty(); boolean queueWasEmpty = mBatteryLevelsEventQueue.isEmpty(); Loading Loading @@ -903,7 +911,7 @@ public final class BatteryService extends SystemService { } } try { try { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } boolean update = true; boolean update = true; switch (key) { switch (key) { Loading @@ -926,10 +934,10 @@ public final class BatteryService extends SystemService { mHealthInfo.batteryLevel = Integer.parseInt(value); mHealthInfo.batteryLevel = Integer.parseInt(value); break; break; case "counter": case "counter": mHealthInfo.batteryChargeCounter = Integer.parseInt(value); mHealthInfo.batteryChargeCounterUah = Integer.parseInt(value); break; break; case "temp": case "temp": mHealthInfo.batteryTemperature = Integer.parseInt(value); mHealthInfo.batteryTemperatureTenthsCelsius = Integer.parseInt(value); break; break; case "invalid": case "invalid": mInvalidCharger = Integer.parseInt(value); mInvalidCharger = Integer.parseInt(value); Loading Loading @@ -973,7 +981,7 @@ public final class BatteryService extends SystemService { private void setChargerAcOnline(boolean online, boolean forceUpdate) { private void setChargerAcOnline(boolean online, boolean forceUpdate) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } mHealthInfo.chargerAcOnline = online; mHealthInfo.chargerAcOnline = online; mUpdatesStopped = true; mUpdatesStopped = true; Loading @@ -982,7 +990,7 @@ public final class BatteryService extends SystemService { private void setBatteryLevel(int level, boolean forceUpdate) { private void setBatteryLevel(int level, boolean forceUpdate) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } mHealthInfo.batteryLevel = level; mHealthInfo.batteryLevel = level; mUpdatesStopped = true; mUpdatesStopped = true; Loading @@ -991,7 +999,7 @@ public final class BatteryService extends SystemService { private void unplugBattery(boolean forceUpdate, PrintWriter pw) { private void unplugBattery(boolean forceUpdate, PrintWriter pw) { if (!mUpdatesStopped) { if (!mUpdatesStopped) { copy(mLastHealthInfo, mHealthInfo); copyV1Battery(mLastHealthInfo, mHealthInfo); } } mHealthInfo.chargerAcOnline = false; mHealthInfo.chargerAcOnline = false; mHealthInfo.chargerUsbOnline = false; mHealthInfo.chargerUsbOnline = false; Loading @@ -1003,7 +1011,7 @@ public final class BatteryService extends SystemService { private void resetBattery(boolean forceUpdate, @Nullable PrintWriter pw) { private void resetBattery(boolean forceUpdate, @Nullable PrintWriter pw) { if (mUpdatesStopped) { if (mUpdatesStopped) { mUpdatesStopped = false; mUpdatesStopped = false; copy(mHealthInfo, mLastHealthInfo); copyV1Battery(mHealthInfo, mLastHealthInfo); Binder.withCleanCallingIdentity(() -> processValuesLocked(forceUpdate, pw)); Binder.withCleanCallingIdentity(() -> processValuesLocked(forceUpdate, pw)); } } if (mBatteryInputSuspended) { if (mBatteryInputSuspended) { Loading Loading @@ -1038,16 +1046,16 @@ public final class BatteryService extends SystemService { pw.println(" AC powered: " + mHealthInfo.chargerAcOnline); pw.println(" AC powered: " + mHealthInfo.chargerAcOnline); pw.println(" USB powered: " + mHealthInfo.chargerUsbOnline); pw.println(" USB powered: " + mHealthInfo.chargerUsbOnline); pw.println(" Wireless powered: " + mHealthInfo.chargerWirelessOnline); pw.println(" Wireless powered: " + mHealthInfo.chargerWirelessOnline); pw.println(" Max charging current: " + mHealthInfo.maxChargingCurrent); pw.println(" Max charging current: " + mHealthInfo.maxChargingCurrentMicroamps); pw.println(" Max charging voltage: " + mHealthInfo.maxChargingVoltage); pw.println(" Max charging voltage: " + mHealthInfo.maxChargingVoltageMicrovolts); pw.println(" Charge counter: " + mHealthInfo.batteryChargeCounter); pw.println(" Charge counter: " + mHealthInfo.batteryChargeCounterUah); pw.println(" status: " + mHealthInfo.batteryStatus); pw.println(" status: " + mHealthInfo.batteryStatus); pw.println(" health: " + mHealthInfo.batteryHealth); pw.println(" health: " + mHealthInfo.batteryHealth); pw.println(" present: " + mHealthInfo.batteryPresent); pw.println(" present: " + mHealthInfo.batteryPresent); pw.println(" level: " + mHealthInfo.batteryLevel); pw.println(" level: " + mHealthInfo.batteryLevel); pw.println(" scale: " + BATTERY_SCALE); pw.println(" scale: " + BATTERY_SCALE); pw.println(" voltage: " + mHealthInfo.batteryVoltage); pw.println(" voltage: " + mHealthInfo.batteryVoltageMillivolts); pw.println(" temperature: " + mHealthInfo.batteryTemperature); pw.println(" temperature: " + mHealthInfo.batteryTemperatureTenthsCelsius); pw.println(" technology: " + mHealthInfo.batteryTechnology); pw.println(" technology: " + mHealthInfo.batteryTechnology); } else { } else { Shell shell = new Shell(); Shell shell = new Shell(); Loading @@ -1070,16 +1078,23 @@ public final class BatteryService extends SystemService { batteryPluggedValue = OsProtoEnums.BATTERY_PLUGGED_WIRELESS; batteryPluggedValue = OsProtoEnums.BATTERY_PLUGGED_WIRELESS; } } proto.write(BatteryServiceDumpProto.PLUGGED, batteryPluggedValue); proto.write(BatteryServiceDumpProto.PLUGGED, batteryPluggedValue); proto.write(BatteryServiceDumpProto.MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrent); proto.write( proto.write(BatteryServiceDumpProto.MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltage); BatteryServiceDumpProto.MAX_CHARGING_CURRENT, proto.write(BatteryServiceDumpProto.CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); mHealthInfo.maxChargingCurrentMicroamps); proto.write( BatteryServiceDumpProto.MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltageMicrovolts); proto.write( BatteryServiceDumpProto.CHARGE_COUNTER, mHealthInfo.batteryChargeCounterUah); proto.write(BatteryServiceDumpProto.STATUS, mHealthInfo.batteryStatus); proto.write(BatteryServiceDumpProto.STATUS, mHealthInfo.batteryStatus); proto.write(BatteryServiceDumpProto.HEALTH, mHealthInfo.batteryHealth); proto.write(BatteryServiceDumpProto.HEALTH, mHealthInfo.batteryHealth); proto.write(BatteryServiceDumpProto.IS_PRESENT, mHealthInfo.batteryPresent); proto.write(BatteryServiceDumpProto.IS_PRESENT, mHealthInfo.batteryPresent); proto.write(BatteryServiceDumpProto.LEVEL, mHealthInfo.batteryLevel); proto.write(BatteryServiceDumpProto.LEVEL, mHealthInfo.batteryLevel); proto.write(BatteryServiceDumpProto.SCALE, BATTERY_SCALE); proto.write(BatteryServiceDumpProto.SCALE, BATTERY_SCALE); proto.write(BatteryServiceDumpProto.VOLTAGE, mHealthInfo.batteryVoltage); proto.write(BatteryServiceDumpProto.VOLTAGE, mHealthInfo.batteryVoltageMillivolts); proto.write(BatteryServiceDumpProto.TEMPERATURE, mHealthInfo.batteryTemperature); proto.write( BatteryServiceDumpProto.TEMPERATURE, mHealthInfo.batteryTemperatureTenthsCelsius); proto.write(BatteryServiceDumpProto.TECHNOLOGY, mHealthInfo.batteryTechnology); proto.write(BatteryServiceDumpProto.TECHNOLOGY, mHealthInfo.batteryTechnology); } } proto.flush(); proto.flush(); Loading Loading @@ -1207,14 +1222,14 @@ public final class BatteryService extends SystemService { @Override @Override public int getBatteryChargeCounter() { public int getBatteryChargeCounter() { synchronized (mLock) { synchronized (mLock) { return mHealthInfo.batteryChargeCounter; return mHealthInfo.batteryChargeCounterUah; } } } } @Override @Override public int getBatteryFullCharge() { public int getBatteryFullCharge() { synchronized (mLock) { synchronized (mLock) { return mHealthInfo.batteryFullCharge; return mHealthInfo.batteryFullChargeUah; } } } } Loading
services/core/java/com/android/server/health/HealthHalCallbackHidl.java +4 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.health; package com.android.server.health; import static android.hardware.health.Translate.h2aTranslate; import android.annotation.NonNull; import android.annotation.NonNull; import android.hardware.health.V2_0.IHealth; import android.hardware.health.V2_0.IHealth; import android.hardware.health.V2_0.Result; import android.hardware.health.V2_0.Result; Loading Loading @@ -64,12 +66,12 @@ class HealthHalCallbackHidl extends IHealthInfoCallback.Stub propsLatest.batteryChargeTimeToFullNowSeconds = propsLatest.batteryChargeTimeToFullNowSeconds = Constants.BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED; Constants.BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED; mCallback.update(propsLatest); mCallback.update(h2aTranslate(propsLatest)); } } @Override @Override public void healthInfoChanged_2_1(android.hardware.health.V2_1.HealthInfo props) { public void healthInfoChanged_2_1(android.hardware.health.V2_1.HealthInfo props) { mCallback.update(props); mCallback.update(h2aTranslate(props)); } } // on new service registered // on new service registered Loading
services/core/java/com/android/server/health/HealthInfoCallback.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,5 @@ public interface HealthInfoCallback { * * * @param props the new health info. * @param props the new health info. */ */ // TODO(b/177269435): AIDL void update(android.hardware.health.HealthInfo props); void update(android.hardware.health.V2_1.HealthInfo props); } }
services/core/java/com/android/server/health/HealthServiceWrapper.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -68,8 +68,7 @@ public abstract class HealthServiceWrapper { * service-specific error when calling {@code getHealthInfo}, e.g. it is unsupported. * service-specific error when calling {@code getHealthInfo}, e.g. it is unsupported. * @throws RemoteException for any transaction-level errors * @throws RemoteException for any transaction-level errors */ */ // TODO(b/177269435): AIDL public abstract android.hardware.health.HealthInfo getHealthInfo() throws RemoteException; public abstract android.hardware.health.V1_0.HealthInfo getHealthInfo() throws RemoteException; /** /** * Create a new HealthServiceWrapper instance. * Create a new HealthServiceWrapper instance. Loading