Date: Mon, 21 Mar 2011 21:32:48 +1100 (AEDT) From: John Marshall <john.marshall@riverwillow.com.au> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/155745: [patch] sysutils/xfce4-battery-plugin 1.0.0 always shows 0% for ACPI battery Message-ID: <201103211032.p2LAWmPa026050@rwpc08.mby-g.riverwillow.net.au> Resent-Message-ID: <201103211050.p2LAo177074815@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>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@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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103211032.p2LAWmPa026050>