summaryrefslogtreecommitdiff
path: root/health
diff options
context:
space:
mode:
authorStephane Lee <stayfan@google.com>2020-12-18 22:42:40 -0800
committerStephane Lee <stayfan@google.com>2020-12-19 00:35:05 -0800
commit21397b722a567606adbf81f2abff7cfcbf225c8a (patch)
tree9cf87a1c4c301a17f425a96ff36ce0dbbd3e7538 /health
parent703d7ff76ffa0f26bb00deaf9dd290fc65bbe9f9 (diff)
downloadpixel-21397b722a567606adbf81f2abff7cfcbf225c8a.tar.gz
BatteryDefender: Use "present" instead of "online" for wireless adapters
This adapts to the kernel change that changes the semantics of the wireless nodes. Test: atest HealthTestCases Bug: 175614345 Change-Id: Ie3dd79d9608b7a47b5ad3fc4b73b57433b71aa70 (cherry picked from commit 1ce73fc4661d9aebf4f8daeaa4ce5aea4ec4b833)
Diffstat (limited to 'health')
-rw-r--r--health/BatteryDefender.cpp25
-rw-r--r--health/include/pixelhealth/BatteryDefender.h7
-rw-r--r--health/test/TestBatteryDefender.cpp23
3 files changed, 40 insertions, 15 deletions
diff --git a/health/BatteryDefender.cpp b/health/BatteryDefender.cpp
index 5873567d..542caff6 100644
--- a/health/BatteryDefender.cpp
+++ b/health/BatteryDefender.cpp
@@ -34,10 +34,12 @@ namespace google {
namespace pixel {
namespace health {
-BatteryDefender::BatteryDefender(const char *pathChargeLevelStart, const char *pathChargeLevelStop,
- const int32_t timeToActivateSecs,
+BatteryDefender::BatteryDefender(const char *pathWirelessPresent, const char *pathChargeLevelStart,
+ const char *pathChargeLevelStop, const int32_t timeToActivateSecs,
const int32_t timeToClearTimerSecs)
- : kPathChargeLevelStart(pathChargeLevelStart),
+
+ : kPathWirelessPresent(pathWirelessPresent),
+ kPathChargeLevelStart(pathChargeLevelStart),
kPathChargeLevelStop(pathChargeLevelStop),
kTimeToActivateSecs(timeToActivateSecs),
kTimeToClearTimerSecs(timeToClearTimerSecs) {
@@ -145,12 +147,14 @@ void BatteryDefender::writeChargeLevelsToFile(const int vendorStart, const int v
}
}
-bool BatteryDefender::isChargePowerAvailable(const bool chargerWirelessOnline) {
+bool BatteryDefender::isChargePowerAvailable(void) {
// USB presence is an indicator of power availability
const bool chargerPresentWired = readFileToInt(kPathUSBChargerPresent) != 0;
+ const bool chargerPresentWireless = readFileToInt(kPathWirelessPresent) != 0;
mIsUsbPresent = chargerPresentWired;
+ mIsWirelessPresent = chargerPresentWireless;
- return chargerPresentWired || chargerWirelessOnline;
+ return chargerPresentWired || chargerPresentWireless;
}
bool BatteryDefender::isDefaultChargeLevel(const int start, const int stop) {
@@ -334,7 +338,7 @@ void BatteryDefender::updateDefenderProperties(struct android::BatteryProperties
/**
* If the kernel is forcing the input current limit to 0, then the online status may
* need to be overwritten. Also, setting a charge limit below the current charge level
- * may disable the adapter. This does not occur for wireless adapters.
+ * may disable the adapter.
* Note; only override "online" if necessary (all "online"s are false).
*/
if (props->chargerUsbOnline == false && props->chargerAcOnline == false) {
@@ -352,6 +356,13 @@ void BatteryDefender::updateDefenderProperties(struct android::BatteryProperties
mWasAcOnline = props->chargerAcOnline;
mWasUsbOnline = props->chargerUsbOnline;
}
+
+ /* Do the same as above for wireless adapters */
+ if (props->chargerWirelessOnline == false) {
+ if (mIsWirelessPresent && props->batteryHealth == android::BATTERY_HEALTH_OVERHEAT) {
+ props->chargerWirelessOnline = true;
+ }
+ }
}
void BatteryDefender::update(struct android::BatteryProperties *props) {
@@ -365,7 +376,7 @@ void BatteryDefender::update(struct android::BatteryProperties *props) {
const int chargeLevelVendorStop =
android::base::GetIntProperty(kPropChargeLevelVendorStop, kChargeLevelDefaultStop);
mIsDefenderDisabled = isBatteryDefenderDisabled(chargeLevelVendorStart, chargeLevelVendorStop);
- mIsPowerAvailable = isChargePowerAvailable(props->chargerWirelessOnline);
+ mIsPowerAvailable = isChargePowerAvailable();
mTimeBetweenUpdateCalls = getDeltaTimeSeconds(&mTimePreviousSecs);
// Run state machine
diff --git a/health/include/pixelhealth/BatteryDefender.h b/health/include/pixelhealth/BatteryDefender.h
index bf3c4929..7819147e 100644
--- a/health/include/pixelhealth/BatteryDefender.h
+++ b/health/include/pixelhealth/BatteryDefender.h
@@ -44,7 +44,8 @@ const int DEFAULT_CAPACITY_LEVEL = 100;
class BatteryDefender {
public:
// Set default google charger paths - can be overridden for other devices
- BatteryDefender(const char *pathChargeLevelStart =
+ BatteryDefender(const char *pathWirelessPresent = "/sys/class/power_supply/wireless/present",
+ const char *pathChargeLevelStart =
"/sys/devices/platform/soc/soc:google,charger/charge_start_level",
const char *pathChargeLevelStop =
"/sys/devices/platform/soc/soc:google,charger/charge_stop_level",
@@ -71,6 +72,7 @@ class BatteryDefender {
[STATE_ACTIVE] = "ACTIVE",
};
+ const char *const kPathWirelessPresent;
const char *const kPathChargeLevelStart;
const char *const kPathChargeLevelStop;
const int32_t kTimeToActivateSecs;
@@ -114,6 +116,7 @@ class BatteryDefender {
int64_t mTimeBetweenUpdateCalls = 0;
int64_t mTimePreviousSecs;
bool mIsUsbPresent = false;
+ bool mIsWirelessPresent = false;
bool mIsPowerAvailable = false;
bool mIsDefenderDisabled = false;
int32_t mTimeToActivateSecsModified;
@@ -152,7 +155,7 @@ class BatteryDefender {
bool writeIntToFile(const char *path, const int value);
void writeTimeToFile(const char *path, const int value, int64_t *previous);
void writeChargeLevelsToFile(const int vendorStart, const int vendorStop);
- bool isChargePowerAvailable(const bool chargerWirelessOnline);
+ bool isChargePowerAvailable(void);
bool isDefaultChargeLevel(const int start, const int stop);
bool isBatteryDefenderDisabled(const int vendorStart, const int vendorStop);
void addTimeToChargeTimers(void);
diff --git a/health/test/TestBatteryDefender.cpp b/health/test/TestBatteryDefender.cpp
index f050cccb..7366aabd 100644
--- a/health/test/TestBatteryDefender.cpp
+++ b/health/test/TestBatteryDefender.cpp
@@ -134,6 +134,7 @@ class BatteryDefenderTest : public ::testing::Test {
};
const char *kPathWiredChargerPresent = "/sys/class/power_supply/usb/present";
+const char *kPathWirelessChargerPresent = "/sys/class/power_supply/wireless/present";
const char *kPathPersistChargerPresentTime = "/mnt/vendor/persist/battery/defender_charger_time";
const char *kPathPersistDefenderActiveTime = "/mnt/vendor/persist/battery/defender_active_time";
const char *kPathStartLevel = "/sys/devices/platform/soc/soc:google,charger/charge_start_level";
@@ -165,8 +166,18 @@ static void usbPresent(void) {
.WillByDefault(DoAll(SetArgPointee<1>(std::string("1")), Return(true)));
}
+static void wirelessPresent(void) {
+ ON_CALL(*mock, ReadFileToString(kPathWirelessChargerPresent, _, _))
+ .WillByDefault(DoAll(SetArgPointee<1>(std::string("1")), Return(true)));
+}
+
+static void wirelessNotPresent(void) {
+ ON_CALL(*mock, ReadFileToString(kPathWirelessChargerPresent, _, _))
+ .WillByDefault(DoAll(SetArgPointee<1>(std::string("0")), Return(true)));
+}
+
static void powerAvailable(void) {
- props.chargerWirelessOnline = 1;
+ wirelessPresent();
usbPresent();
}
@@ -433,7 +444,7 @@ TEST_F(BatteryDefenderTest, ConnectDisconnectCycle) {
InSequence s;
// Power ON
- props.chargerWirelessOnline = true;
+ wirelessPresent();
EXPECT_CALL(*mock, WriteStringToFile(std::to_string(1000), kPathPersistChargerPresentTime, _));
EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "CONNECTED"));
@@ -446,7 +457,7 @@ TEST_F(BatteryDefenderTest, ConnectDisconnectCycle) {
battDefender.update(&props);
// Power OFF
- props.chargerWirelessOnline = false;
+ wirelessNotPresent();
// Maintain kPathPersistChargerPresentTime = 1060
EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "CONNECTED"));
@@ -465,7 +476,7 @@ TEST_F(BatteryDefenderTest, ConnectDisconnectCycle) {
battDefender.update(&props);
// Power ON
- props.chargerWirelessOnline = true;
+ wirelessPresent();
// Maintain kPathPersistChargerPresentTime = 0
EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "CONNECTED"));
@@ -501,7 +512,7 @@ TEST_F(BatteryDefenderTest, ConnectDisconnectResumeTimeThreshold0) {
InSequence s;
// Power ON
- props.chargerWirelessOnline = true;
+ wirelessPresent();
EXPECT_CALL(*mock, WriteStringToFile(std::to_string(1000), kPathPersistChargerPresentTime, _));
EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "CONNECTED"));
@@ -514,7 +525,7 @@ TEST_F(BatteryDefenderTest, ConnectDisconnectResumeTimeThreshold0) {
battDefender.update(&props);
// Power OFF
- props.chargerWirelessOnline = false;
+ wirelessNotPresent();
EXPECT_CALL(*mock, WriteStringToFile(std::to_string(0), kPathPersistChargerPresentTime, _));
EXPECT_CALL(*mock, SetProperty(kPropBatteryDefenderState, "DISCONNECTED"));