From 42a981ddee525c55cef40d5da987d0e3d5fa4b4c Mon Sep 17 00:00:00 2001 From: Ruchi Kandoi Date: Mon, 28 Sep 2015 13:35:59 -0700 Subject: [PATCH] healthd: Adds fake battery properties for devices with no battery. Devices which have no battery and are always plugged in will not have any battery property initialized. This causes the 'stable power' to never be switched which is required for updating apps. This change recognizes such a device and manually sets the battery to 100% and charger status to connected to AC mains. It will also fake the battery temperature. Bug: 24258855 Change-Id: I98e5ed0dbeb7f2ab6d3802cd7e0f3a269bd8f31f Signed-off-by: Ruchi Kandoi --- healthd/BatteryMonitor.cpp | 19 ++++++++++++++++++- healthd/BatteryMonitor.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/healthd/BatteryMonitor.cpp b/healthd/BatteryMonitor.cpp index 1cad427bd..396dfef5a 100644 --- a/healthd/BatteryMonitor.cpp +++ b/healthd/BatteryMonitor.cpp @@ -39,6 +39,7 @@ #define POWER_SUPPLY_SYSFS_PATH "/sys/class/" POWER_SUPPLY_SUBSYSTEM #define FAKE_BATTERY_CAPACITY 42 #define FAKE_BATTERY_TEMPERATURE 424 +#define ALWAYS_PLUGGED_CAPACITY 100 namespace android { @@ -199,6 +200,15 @@ bool BatteryMonitor::update(void) { mBatteryFixedTemperature : getIntField(mHealthdConfig->batteryTemperaturePath); + // For devices which do not have battery and are always plugged + // into power souce. + if (mAlwaysPluggedDevice) { + props.chargerAcOnline = true; + props.batteryPresent = true; + props.batteryStatus = BATTERY_STATUS_CHARGING; + props.batteryHealth = BATTERY_HEALTH_GOOD; + } + const int SIZE = 128; char buf[SIZE]; String8 btech; @@ -542,8 +552,15 @@ void BatteryMonitor::init(struct healthd_config *hc) { closedir(dir); } - if (!mChargerNames.size()) + // This indicates that there is no charger driver registered. + // Typically the case for devices which do not have a battery and + // and are always plugged into AC mains. + if (!mChargerNames.size()) { KLOG_ERROR(LOG_TAG, "No charger supplies found\n"); + mBatteryFixedCapacity = ALWAYS_PLUGGED_CAPACITY; + mBatteryFixedTemperature = FAKE_BATTERY_TEMPERATURE; + mAlwaysPluggedDevice = true; + } if (!mBatteryDevicePresent) { KLOG_WARNING(LOG_TAG, "No battery devices found\n"); hc->periodic_chores_interval_fast = -1; diff --git a/healthd/BatteryMonitor.h b/healthd/BatteryMonitor.h index 3425f2771..a61171fc6 100644 --- a/healthd/BatteryMonitor.h +++ b/healthd/BatteryMonitor.h @@ -46,6 +46,7 @@ class BatteryMonitor { struct healthd_config *mHealthdConfig; Vector mChargerNames; bool mBatteryDevicePresent; + bool mAlwaysPluggedDevice; int mBatteryFixedCapacity; int mBatteryFixedTemperature; struct BatteryProperties props;