Battery (Linux): check if AC is connected

This commit is contained in:
Carter Li
2024-10-12 09:38:19 +08:00
parent 68406cd044
commit 1178f46aac
+23 -2
View File
@@ -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))
{