diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-12-24 00:04:14 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-12-24 00:04:14 +0000 |
commit | 76f2c6785fe6d87fc132f4f3483e3f4c9a7c4f50 (patch) | |
tree | be3f299aede5edcf567fe2c6bf98a68ded7980c4 | |
parent | d43c35df538fc46f09a56beacc00b5274f657a93 (diff) | |
parent | b4d9a38de38fdb15809aa1b95c7cbc7260a4b2d2 (diff) | |
download | pixel-android11-qpr2-release.tar.gz |
Snap for 7048988 from b4d9a38de38fdb15809aa1b95c7cbc7260a4b2d2 to rvc-qpr2-releaseandroid-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android11-qpr2-release
Change-Id: Ife4f4a5f8908a02f855975e09222e9438e0dcaee
-rw-r--r-- | health/BatteryDefender.cpp | 35 | ||||
-rw-r--r-- | health/include/pixelhealth/BatteryDefender.h | 10 | ||||
-rw-r--r-- | health/test/TestBatteryDefender.cpp | 23 |
3 files changed, 50 insertions, 18 deletions
diff --git a/health/BatteryDefender.cpp b/health/BatteryDefender.cpp index 5873567d..4d937415 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) { @@ -75,11 +77,13 @@ void BatteryDefender::removeLineEndings(std::string *str) { str->erase(std::remove(str->begin(), str->end(), '\r'), str->end()); } -int BatteryDefender::readFileToInt(const char *path) { +int BatteryDefender::readFileToInt(const char *path, const bool optionalFile) { std::string buffer; int value = 0; // default if (!android::base::ReadFileToString(path, &buffer)) { - LOG(ERROR) << "Failed to read " << path; + if (optionalFile == false) { + LOG(ERROR) << "Failed to read " << path; + } } else { removeLineEndings(&buffer); if (!android::base::ParseInt(buffer.c_str(), &value)) { @@ -145,12 +149,18 @@ 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, mIgnoreWirelessFileError) != 0; mIsUsbPresent = chargerPresentWired; + mIsWirelessPresent = chargerPresentWireless; + + // Report wireless read error only once; some devices may not have a wireless adapter + mIgnoreWirelessFileError = true; - return chargerPresentWired || chargerWirelessOnline; + return chargerPresentWired || chargerPresentWireless; } bool BatteryDefender::isDefaultChargeLevel(const int start, const int stop) { @@ -334,7 +344,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 +362,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 +382,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..4a16bcc6 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; @@ -130,6 +133,7 @@ class BatteryDefender { bool mHasReachedHighCapacityLevel = false; bool mWasAcOnline = false; bool mWasUsbOnline = true; /* Default; in case neither AC/USB online becomes 1 */ + bool mIgnoreWirelessFileError = false; // Process state actions void stateMachine_runAction(const state_E state, @@ -148,11 +152,11 @@ class BatteryDefender { int64_t getDeltaTimeSeconds(int64_t *timeStartSecs); int32_t getTimeToActivate(void); void removeLineEndings(std::string *str); - int readFileToInt(const char *path); + int readFileToInt(const char *path, const bool optionalFile = false); 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")); |