mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-04 20:24:19 +01:00
Battery (FreeBSD): truly support FreeBSD
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "fastfetch.h"
|
||||
#include "common/sysctl.h"
|
||||
#include "battery.h"
|
||||
|
||||
#include <dev/acpica/acpiio.h>
|
||||
@@ -11,23 +12,23 @@ const char* ffDetectBattery(FF_MAYBE_UNUSED FFinstance* instance, FF_MAYBE_UNUSE
|
||||
//https://www.freebsd.org/cgi/man.cgi?acpi_battery(4)
|
||||
//https://gitlab.xfce.org/panel-plugins/xfce4-battery-plugin/-/blob/master/panel-plugin/libacpi.c
|
||||
|
||||
int units = ffSysctlGetInt("hw.acpi.battery.units", -100);
|
||||
if (units < 0)
|
||||
return "sysctlbyname(\"hw.acpi.battery.units\") failed";
|
||||
|
||||
if(units == 0)
|
||||
return NULL;
|
||||
|
||||
int acpifd = open("/dev/acpi", O_RDONLY);
|
||||
if(acpifd < 0)
|
||||
return "open(\"/dev/acpi\", O_RDONLY) failed";
|
||||
|
||||
int units = ioctl(acpifd, ACPIIO_BATT_GET_UNITS, 0);
|
||||
if(units < 0)
|
||||
{
|
||||
close(acpifd);
|
||||
return "No acpiio battery units found";
|
||||
}
|
||||
|
||||
for(int i = 0; i < units; ++i)
|
||||
{
|
||||
union acpi_battery_ioctl_arg battio;
|
||||
battio.unit = i;
|
||||
|
||||
if(ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) < 0 || (battio.battinfo.state & ACPI_BATT_STAT_NOT_PRESENT))
|
||||
if(ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) < 0 || (battio.battinfo.state == ACPI_BATT_STAT_NOT_PRESENT))
|
||||
continue;
|
||||
|
||||
BatteryResult* battery = ffListAdd(results);
|
||||
@@ -38,9 +39,9 @@ const char* ffDetectBattery(FF_MAYBE_UNUSED FFinstance* instance, FF_MAYBE_UNUSE
|
||||
ffStrbufInit(&battery->technology);
|
||||
|
||||
battery->capacity = battio.battinfo.cap;
|
||||
if(battio.battinfo.state & ACPI_BATT_STAT_INVALID)
|
||||
if(battio.battinfo.state == ACPI_BATT_STAT_INVALID)
|
||||
{
|
||||
ffStrbufAppendS(&battery->status, "Invalid");
|
||||
ffStrbufAppendS(&battery->status, "Unknown, ");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -49,10 +50,27 @@ const char* ffDetectBattery(FF_MAYBE_UNUSED FFinstance* instance, FF_MAYBE_UNUSE
|
||||
else if(battio.battinfo.state & ACPI_BATT_STAT_CHARGING)
|
||||
ffStrbufAppendS(&battery->status, "Charging, ");
|
||||
if(battio.battinfo.state & ACPI_BATT_STAT_CRITICAL)
|
||||
ffStrbufAppendS(&battery->status, "Ctritical");
|
||||
ffStrbufAppendS(&battery->status, "Ctritical, ");
|
||||
}
|
||||
|
||||
int acadStatus;
|
||||
if (ioctl(acpifd, ACPIIO_ACAD_GET_STATUS, &acadStatus) >= 0 && acadStatus)
|
||||
{
|
||||
ffStrbufAppendS(&battery->status, "AC connected");
|
||||
}
|
||||
else
|
||||
{
|
||||
ffStrbufTrimRight(&battery->status, ' ');
|
||||
ffStrbufTrimRight(&battery->status, ',');
|
||||
}
|
||||
|
||||
battio.unit = i;
|
||||
if (ioctl(acpifd, ACPIIO_BATT_GET_BIX, &battio) >= 0)
|
||||
{
|
||||
ffStrbufAppendS(&battery->manufacturer, battio.bix.oeminfo);
|
||||
ffStrbufAppendS(&battery->modelName, battio.bix.model);
|
||||
ffStrbufAppendS(&battery->technology, battio.bix.type);
|
||||
}
|
||||
}
|
||||
close(acpifd);
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user