From 1178f46aac233e65b6350d4108f3f8afe7669e29 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sat, 12 Oct 2024 09:38:19 +0800 Subject: [PATCH] Battery (Linux): check if AC is connected --- src/detection/battery/battery_linux.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/detection/battery/battery_linux.c b/src/detection/battery/battery_linux.c index 5b0027fe0..025aee692 100644 --- a/src/detection/battery/battery_linux.c +++ b/src/detection/battery/battery_linux.c @@ -8,6 +8,19 @@ // https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-power +static bool checkAc(const char* id, FFstrbuf* tmpBuffer) +{ + if (ffStrStartsWith(id, "BAT")) + ffStrbufSetS(tmpBuffer, "/sys/class/power_supply/ADP1/online"); + else if (ffStrStartsWith(id, "macsmc-battery")) + ffStrbufSetS(tmpBuffer, "/sys/class/power_supply/macsmc-ac/online"); + else + ffStrbufClear(tmpBuffer); + + char online = '\0'; + return ffReadFileData(tmpBuffer->chars, 1, &online) == 1 && online == '1'; +} + static void parseBattery(int dfd, const char* id, FFBatteryOptions* options, FFlist* results) { FF_STRBUF_AUTO_DESTROY tmpBuffer = ffStrbufCreate(); @@ -78,12 +91,20 @@ static void parseBattery(int dfd, const char* id, FFBatteryOptions* options, FFl } } } - } - if (ffStrbufEqualS(&result->status, "Not charging") || ffStrbufEqualS(&result->status, "Full")) + if (checkAc(id, &tmpBuffer)) + ffStrbufAppendS(&result->status, ", AC Connected"); + } + else if (ffStrbufEqualS(&result->status, "Not charging") || ffStrbufEqualS(&result->status, "Full")) ffStrbufSetStatic(&result->status, "AC Connected"); + else if (ffStrbufEqualS(&result->status, "Charging")) + ffStrbufAppendS(&result->status, ", AC Connected"); else if (ffStrbufEqualS(&result->status, "Unknown")) + { ffStrbufClear(&result->status); + if (checkAc(id, &tmpBuffer)) + ffStrbufAppendS(&result->status, "AC Connected"); + } if (ffReadFileBufferRelative(dfd, "capacity_level", &tmpBuffer)) {