ports/155745: [patch] sysutils/xfce4-battery-plugin 1.0.0 always shows 0% for ACPI battery

John Marshall john.marshall at riverwillow.com.au
Mon Mar 21 10:50:01 UTC 2011


>Number:         155745
>Category:       ports
>Synopsis:       [patch] sysutils/xfce4-battery-plugin 1.0.0 always shows 0% for ACPI battery
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Mar 21 10:50:01 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     John Marshall
>Release:        FreeBSD 8.2-RELEASE i386
>Organization:
Riverwillow Pty Ltd
>Environment:
System: FreeBSD rwpc08 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 09:28:08 AEDT 2011 root at rwpc08:/build/obj/usr/src/sys/RWPC08 i386


	
>Description:

There is an outstanding bug in the plugin source which results in ACPI
batteries on FreeBSD always showing 0%.  The previous version of the
port included a patch to address this, but that was sent to the attic
with the 1.0.0 update.  Some years ago, two patches were submitted to
the Xfce folks but insufficient testers were available to convince the
developers to commit.

 <http://bugzilla.xfce.org/show_bug.cgi?id=2814>

I took what looks to be the preferred patch (submitted by Shigeru
Fujiwara on 2007-01-28) and realigned it to suit the current version of
the source file.  It "works for me" on FreeBSD/i386 8.2 and Xfce 4.8.0.

>How-To-Repeat:
	
>Fix:

 - Modify Makefile: Bump PORTREVISION
 - Add files/patch-panel-plugin_libacpi.c


--- xfce4-battery-plugin.diff begins here ---
diff -urN sysutils/xfce4-battery-plugin.orig/Makefile sysutils/xfce4-battery-plugin/Makefile
--- sysutils/xfce4-battery-plugin.orig/Makefile	2011-03-19 18:31:38.000000000 +1100
+++ sysutils/xfce4-battery-plugin/Makefile	2011-03-21 19:55:10.000000000 +1100
@@ -7,6 +7,7 @@
 
 PORTNAME=	xfce4-battery-plugin
 PORTVERSION=	1.0.0
+PORTREVISION=	1
 CATEGORIES=	sysutils xfce
 MASTER_SITES=	${MASTER_SITE_XFCE}
 MASTER_SITE_SUBDIR=/src/panel-plugins/${PORTNAME}/${PORTVERSION:R}
diff -urN sysutils/xfce4-battery-plugin.orig/files/patch-panel-plugin_libacpi.c sysutils/xfce4-battery-plugin/files/patch-panel-plugin_libacpi.c
--- sysutils/xfce4-battery-plugin.orig/files/patch-panel-plugin_libacpi.c	1970-01-01 10:00:00.000000000 +1000
+++ sysutils/xfce4-battery-plugin/files/patch-panel-plugin_libacpi.c	2011-03-21 19:35:31.000000000 +1100
@@ -0,0 +1,82 @@
+--- panel-plugin/libacpi.c.orig	2011-01-03 23:38:40.000000000 +1100
++++ panel-plugin/libacpi.c	2011-03-21 15:38:01.000000000 +1100
+@@ -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__)
+@@ -484,6 +494,7 @@
+   }
+ 
+   return 1;
++
+ #else
+ #ifdef HAVE_SYSCTL
+   static char buf[BUFSIZ];
+@@ -730,6 +741,24 @@
+ #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 +995,29 @@
+ #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;
--- xfce4-battery-plugin.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list