Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40080208 authored by Bart Van Assche's avatar Bart Van Assche Committed by Gerrit Code Review
Browse files

Merge changes I4b9b76c9,I6f329491,I9c783193,I0798cc94

* changes:
  healthd: Convert multiple private methods into static nonmember functions
  healthd: Fix readFromFile()
  healthd: Make initHealthInfo() easier to read
  healthd: Improve readability of BatteryMonitor::init()
parents 242ed1bb 095c944b
Loading
Loading
Loading
Loading
+46 −46
Original line number Diff line number Diff line
@@ -121,14 +121,13 @@ static std::optional<T> mapSysfsString(const char* str, SysfsStringEnumMap<T> ma
}

static void initHealthInfo(HealthInfo* health_info) {
    *health_info = HealthInfo{};

    // Enum values may be zero initialized, so they need to be initialized properly.
    health_info->batteryCapacityLevel = BatteryCapacityLevel::UNSUPPORTED;
    health_info->batteryChargeTimeToFullNowSeconds =
            (int64_t)HealthInfo::BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED;
    health_info->batteryStatus = BatteryStatus::UNKNOWN;
    health_info->batteryHealth = BatteryHealth::UNKNOWN;
    *health_info = {
            .batteryCapacityLevel = BatteryCapacityLevel::UNSUPPORTED,
            .batteryChargeTimeToFullNowSeconds =
                    (int64_t)HealthInfo::BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED,
            .batteryStatus = BatteryStatus::UNKNOWN,
            .batteryHealth = BatteryHealth::UNKNOWN,
    };
}

BatteryMonitor::BatteryMonitor()
@@ -228,46 +227,48 @@ BatteryHealth getBatteryHealth(const char* status) {
    return *ret;
}

int BatteryMonitor::readFromFile(const String8& path, std::string* buf) {
static int readFromFile(const String8& path, std::string* buf) {
    buf->clear();
    if (android::base::ReadFileToString(path.c_str(), buf)) {
        *buf = android::base::Trim(*buf);
    }
    return buf->length();
}

BatteryMonitor::PowerSupplyType BatteryMonitor::readPowerSupplyType(const String8& path) {
static BatteryMonitor::PowerSupplyType readPowerSupplyType(const String8& path) {
    static SysfsStringEnumMap<int> supplyTypeMap[] = {
            {"Unknown", ANDROID_POWER_SUPPLY_TYPE_UNKNOWN},
            {"Battery", ANDROID_POWER_SUPPLY_TYPE_BATTERY},
            {"UPS", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"Mains", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB", ANDROID_POWER_SUPPLY_TYPE_USB},
            {"USB_DCP", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_HVDCP", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_CDP", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_ACA", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_C", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_PD", ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_PD_DRP", ANDROID_POWER_SUPPLY_TYPE_USB},
            {"Wireless", ANDROID_POWER_SUPPLY_TYPE_WIRELESS},
            {"Dock", ANDROID_POWER_SUPPLY_TYPE_DOCK},
            {"Unknown", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_UNKNOWN},
            {"Battery", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_BATTERY},
            {"UPS", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"Mains", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_USB},
            {"USB_DCP", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_HVDCP", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_CDP", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_ACA", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_C", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_PD", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_AC},
            {"USB_PD_DRP", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_USB},
            {"Wireless", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_WIRELESS},
            {"Dock", BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_DOCK},
            {NULL, 0},
    };
    std::string buf;

    if (readFromFile(path, &buf) <= 0)
        return ANDROID_POWER_SUPPLY_TYPE_UNKNOWN;
    if (readFromFile(path, &buf) <= 0) {
        return BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_UNKNOWN;
    }

    auto ret = mapSysfsString(buf.c_str(), supplyTypeMap);
    if (!ret) {
        KLOG_WARNING(LOG_TAG, "Unknown power supply type '%s'\n", buf.c_str());
        *ret = ANDROID_POWER_SUPPLY_TYPE_UNKNOWN;
        *ret = BatteryMonitor::ANDROID_POWER_SUPPLY_TYPE_UNKNOWN;
    }

    return static_cast<BatteryMonitor::PowerSupplyType>(*ret);
}

bool BatteryMonitor::getBooleanField(const String8& path) {
static bool getBooleanField(const String8& path) {
    std::string buf;
    bool value = false;

@@ -278,7 +279,7 @@ bool BatteryMonitor::getBooleanField(const String8& path) {
    return value;
}

int BatteryMonitor::getIntField(const String8& path) {
static int getIntField(const String8& path) {
    std::string buf;
    int value = 0;

@@ -288,7 +289,7 @@ int BatteryMonitor::getIntField(const String8& path) {
    return value;
}

bool BatteryMonitor::isScopedPowerSupply(const char* name) {
static bool isScopedPowerSupply(const char* name) {
    constexpr char kScopeDevice[] = "Device";

    String8 path;
@@ -411,19 +412,7 @@ void BatteryMonitor::updateValues(void) {
    }
}

void BatteryMonitor::logValues(void) {
    logValues(*mHealthInfo, *mHealthdConfig);
}

void BatteryMonitor::logValues(const HealthInfo_2_1& health_info,
                               const struct healthd_config& healthd_config) {
    HealthInfo aidl_health_info;
    (void)android::h2a::translate(health_info, &aidl_health_info);
    logValues(aidl_health_info, healthd_config);
}

void BatteryMonitor::logValues(const HealthInfo& props,
                               const struct healthd_config& healthd_config) {
static void doLogValues(const HealthInfo& props, const struct healthd_config& healthd_config) {
    char dmesgline[256];
    size_t len;
    if (props.batteryPresent) {
@@ -460,6 +449,17 @@ void BatteryMonitor::logValues(const HealthInfo& props,
    KLOG_WARNING(LOG_TAG, "%s\n", dmesgline);
}

void BatteryMonitor::logValues(const HealthInfo_2_1& health_info,
                               const struct healthd_config& healthd_config) {
    HealthInfo aidl_health_info;
    (void)android::h2a::translate(health_info, &aidl_health_info);
    doLogValues(aidl_health_info, healthd_config);
}

void BatteryMonitor::logValues(void) {
    doLogValues(*mHealthInfo, *mHealthdConfig);
}

bool BatteryMonitor::isChargerOnline() {
    const HealthInfo& props = *mHealthInfo;
    return props.chargerAcOnline | props.chargerUsbOnline | props.chargerWirelessOnline |
@@ -608,13 +608,13 @@ void BatteryMonitor::init(struct healthd_config *hc) {

        while ((entry = readdir(dir.get()))) {
            const char* name = entry->d_name;
            std::vector<String8>::iterator itIgnoreName;

            if (!strcmp(name, ".") || !strcmp(name, ".."))
                continue;

            itIgnoreName = find(hc->ignorePowerSupplyNames.begin(),
                                hc->ignorePowerSupplyNames.end(), String8(name));
            std::vector<String8>::iterator itIgnoreName =
                    find(hc->ignorePowerSupplyNames.begin(), hc->ignorePowerSupplyNames.end(),
                         String8(name));
            if (itIgnoreName != hc->ignorePowerSupplyNames.end())
                continue;

+0 −9
Original line number Diff line number Diff line
@@ -82,15 +82,6 @@ class BatteryMonitor {
    int mBatteryFixedCapacity;
    int mBatteryFixedTemperature;
    std::unique_ptr<aidl::android::hardware::health::HealthInfo> mHealthInfo;

    int readFromFile(const String8& path, std::string* buf);
    PowerSupplyType readPowerSupplyType(const String8& path);
    bool getBooleanField(const String8& path);
    int getIntField(const String8& path);
    bool isScopedPowerSupply(const char* name);

    static void logValues(const aidl::android::hardware::health::HealthInfo& health_info,
                          const struct healthd_config& healthd_config);
};

}; // namespace android