battery monitor with KDE 64 bit
Doug Ambrisko
ambrisko at ambrisko.com
Wed Mar 26 20:42:52 PDT 2008
Dan Langille writes:
| I'm running 7.0 amd64 with KDE 3.5
|
| sysutils/klaptopdaemon works only on i386
|
| What battery monitor software are you using?
Try to convert it from APM to ACPI. This patch to sysutils/xbatt
works for me on both i386/amd64.
Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/xbatt/Makefile,v
retrieving revision 1.15
diff -u -p -r1.15 Makefile
--- Makefile 19 May 2007 20:23:41 -0000 1.15
+++ Makefile 27 Mar 2008 03:07:19 -0000
@@ -14,7 +14,7 @@ MASTER_SITES= http://www.clave.gr.jp/~et
MAINTAINER= nobu at psrc.isac.co.jp
COMMENT= Laptop battery status display for X11
-ONLY_FOR_ARCHS= i386
+ONLY_FOR_ARCHS= i386 amd64
USE_IMAKE= yes
USE_XPM= yes
--- /dev/null 2008-03-26 20:00:00.000000000 -0700
+++ files/patch-acpi 2007-03-21 15:06:19.000000000 -0700
@@ -0,0 +1,69 @@
+--- xbatt.c.orig Wed Mar 21 14:21:28 2007
++++ xbatt.c Wed Mar 21 15:05:10 2007
+@@ -60,9 +60,13 @@
+ #endif
+
+ #ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/sysctl.h>
++/*
+ # include <machine/apm_bios.h>
+ # define APMDEV21 "/dev/apm0"
+ # define APMDEV22 "/dev/apm"
++*/
+ #endif
+
+ #include "pixmaps/battery.xpm"
+@@ -185,6 +189,7 @@ main(
+ XtAppContext appContext;
+
+ #if !defined(NOAPM) && defined(__FreeBSD__)
++#if DJA
+ /* initialize APM Interface */
+ if ((apmfd = open(APMDEV21, O_RDWR)) == -1) {
+ if ((apmfd = open(APMDEV22, O_RDWR)) == -1) {
+@@ -194,6 +199,7 @@ main(
+ }
+ }
+ #endif
++#endif
+
+ /* start X-Window session */
+ XtSetLanguageProc( NULL, NULL, NULL );
+@@ -317,6 +323,7 @@ struct status getBatteryStatus()
+ {
+ struct status ret;
+ #ifdef __FreeBSD__
++#if DJA
+ struct apm_info info;
+
+ #ifndef NOAPM
+@@ -370,6 +377,28 @@ struct status getBatteryStatus()
+ ret.charge = APM_STAT_BATT_HIGH; /* I only want to know, */
+ /* chrging or not. */
+ }
++#else
++ int remain, charge, len, error, junk;
++
++ bzero(&ret, sizeof(ret));
++ len = sizeof(remain);
++ error = sysctlbyname("hw.acpi.battery.life",
++ &remain, &len, NULL, 0);
++ if (error == 0)
++ remain == 0;
++
++ len = sizeof(charge);
++ error = sysctlbyname("hw.acpi.battery.state",
++ &charge, &len, NULL, 0);
++ if (error == 0 && charge == 0) {
++ ret.acline = APM_STAT_LINE_ON;
++ ret.charge = APM_STAT_BATT_CHARGING;
++ } else {
++ ret.acline = APM_STAT_LINE_OFF;
++ ret.charge = APM_STAT_BATT_HIGH;
++ }
++ ret.remain = remain;
++#endif
+ #endif /* FreeBSD */
+
+ #ifdef __linux__
The #if DJA can be removed. I left it in to compare the old and
new code. If this seems to be a reasonable approach then I can
remove the DJA part and send it to the maintainer.
Doug A.
Doug A.
More information about the freebsd-mobile
mailing list