[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