[Xfce4-commits] <xfce4-battery-plugin:master> Implement read_acpi_state()/read_acpi_info() on FreeBSD, from bug #2814
Landry Breuil
noreply at xfce.org
Tue Apr 17 21:50:01 CEST 2012
Updating branch refs/heads/master
to 5fdc701440f97cee111a2a47c85f7d838aab7e13 (commit)
from cd4eb2055bad8ef84445e8b89ea3d0431190d5ab (commit)
commit 5fdc701440f97cee111a2a47c85f7d838aab7e13
Author: Landry Breuil <landry at xfce.org>
Date: Tue Apr 17 21:46:48 2012 +0200
Implement read_acpi_state()/read_acpi_info() on FreeBSD, from bug #2814
panel-plugin/libacpi.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/panel-plugin/libacpi.c b/panel-plugin/libacpi.c
index 0e368f4..530194d 100644
--- a/panel-plugin/libacpi.c
+++ b/panel-plugin/libacpi.c
@@ -30,6 +30,16 @@
#include <dirent.h>
#include <glob.h>
+#ifdef __FreeBSD__
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <dev/acpica/acpiio.h>
+#define ACPIDEV "/dev/acpi"
+static int acpifd;
+#define UNKNOWN_CAP 0xffffffff
+#define UNKNOWN_VOLTAGE 0xffffffff
+#endif
+
#if HAVE_SYSCTL
#if defined(__NetBSD__) || defined (__OpenBSD__)
@@ -730,6 +740,24 @@ int read_acpi_info(int battery)
#endif
}
acpiinfo->present = retval;
+
+#ifdef __FreeBSD__
+ union acpi_battery_ioctl_arg battio;
+ acpifd = open(ACPIDEV, O_RDONLY);
+
+ battio.unit = battery;
+ if (ioctl(acpifd, ACPIIO_BATT_GET_BIF, &battio) == -1) {
+ return 0;
+ }
+ close(acpifd);
+
+ acpiinfo->design_capacity = battio.bif.dcap;
+ acpiinfo->last_full_capacity = battio.bif.lfcap;
+ acpiinfo->battery_technology = battio.bif.btech;
+ acpiinfo->design_voltage = battio.bif.dvol;
+ acpiinfo->design_capacity_warning = battio.bif.wcap;
+ acpiinfo->design_capacity_low = battio.bif.lcap;
+#endif
return 1;
#else
return 0;
@@ -966,6 +994,29 @@ int read_acpi_state(int battery)
#endif
}
acpistate->percentage =retval;
+
+#ifdef __FreeBSD__
+ union acpi_battery_ioctl_arg battio;
+ acpifd = open(ACPIDEV, O_RDONLY);
+
+ battio.unit = battery;
+ if (ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) == -1) {
+ return 0;
+ }
+
+ acpistate->state = battio.battinfo.state;
+ acpistate->prate = battio.battinfo.rate;
+ acpistate->rcapacity = acpiinfo->last_full_capacity * battio.battinfo.cap / 100;
+ acpistate->rtime = battio.battinfo.min;
+ acpistate->percentage = battio.battinfo.cap;
+
+ battio.unit = battery;
+ if (ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) == -1) {
+ return 0;
+ }
+ close(acpifd);
+ acpistate->pvoltage = battio.bst.volt;
+#endif
return 1;
#else
return 0;
More information about the Xfce4-commits
mailing list