aboutsummaryrefslogtreecommitdiff
path: root/sysutils
diff options
context:
space:
mode:
authorMichael Nottebrock <lofi@FreeBSD.org>2007-09-18 08:59:53 +0000
committerMichael Nottebrock <lofi@FreeBSD.org>2007-09-18 08:59:53 +0000
commit1fc812435ce555f9eb9be2db8c67755f9fa6f1e1 (patch)
tree64c433ed47da16b5e722a41bd4007c44d57f0d51 /sysutils
parenta1cf1276b111b39a0b558c3d97d3e00da044f6b1 (diff)
downloadports-1fc812435ce555f9eb9be2db8c67755f9fa6f1e1.tar.gz
ports-1fc812435ce555f9eb9be2db8c67755f9fa6f1e1.zip
Notes
Diffstat (limited to 'sysutils')
-rw-r--r--sysutils/klaptopdaemon/Makefile13
-rw-r--r--sysutils/klaptopdaemon/files/extrapatch-acpi-support534
-rw-r--r--sysutils/klaptopdaemon/pkg-descr3
3 files changed, 547 insertions, 3 deletions
diff --git a/sysutils/klaptopdaemon/Makefile b/sysutils/klaptopdaemon/Makefile
index 79603d373d95..0730785819f6 100644
--- a/sysutils/klaptopdaemon/Makefile
+++ b/sysutils/klaptopdaemon/Makefile
@@ -16,10 +16,12 @@ DISTNAME= kdeutils-${PORTVERSION}
DIST_SUBDIR= KDE
MAINTAINER= kde@FreeBSD.org
-COMMENT= APM monitor for KDE
+COMMENT= Power management utility for KDE
CONFLICTS= kdeutils-3.1.* kdeutils-3.2.[0-3]
+OPTIONS= ACPI "Contributed ACPI support patch" off
+
USE_KDELIBS_VER=3
PREFIX= ${KDE_PREFIX}
@@ -32,8 +34,15 @@ WRKSRC= ${WRKDIR}/kdeutils-${PORTVERSION}
USE_LDCONFIG= yes
LDCONFIG_DIRS+= %%PREFIX%%/lib %%PREFIX%%/lib/kde3
+.include <bsd.port.pre.mk>
+
+.if defined(WITH_ACPI)
+EXTRA_PATCHES+= ${PATCHDIR}/extrapatch-acpi-support
+ONLY_FOR_ARCHS+=amd64
+.endif
+
pre-configure:
${ECHO_CMD} ${PORTNAME} > ${WRKSRC}/inst-apps
.include "${.CURDIR}/../../x11/kde3/Makefile.kde"
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
diff --git a/sysutils/klaptopdaemon/files/extrapatch-acpi-support b/sysutils/klaptopdaemon/files/extrapatch-acpi-support
new file mode 100644
index 000000000000..71f1a7cb65ef
--- /dev/null
+++ b/sysutils/klaptopdaemon/files/extrapatch-acpi-support
@@ -0,0 +1,534 @@
+--- klaptopdaemon/portable.cpp.orig 2007-09-14 18:54:04.000000000 +0400
++++ klaptopdaemon/portable.cpp 2007-09-14 18:54:18.000000000 +0400
+@@ -1,7 +1,7 @@
+ /*
+ * portable.cpp
+ *
+- * $Id: portable.cpp 629304 2007-02-02 09:55:28Z dfaure $
++ * $Id: portable.cpp 540996 2006-05-15 09:55:42Z mueller $
+ *
+ * Copyright (c) 1999 Paul Campbell <paul@taniwha.com>
+ *
+@@ -1957,19 +1957,19 @@
+ laptop_portable::get_button(LaptopButton l) // true if a button is pressed
+ {
+ if (::has_acpi()) {
+- QString name;
++ QString *name=0;
+ switch (l) {
+ case LidButton:
+- name = acpi_lid_name;
++ name = &acpi_lid_name;
+ break;
+ case PowerButton:
+- name = acpi_power_name;
++ name = &acpi_power_name;
+ break;
+ default:
+ break;
+ }
+- if (!name.isEmpty()) {
+- QFile f(name);
++ if (name) {
++ QFile f(*name);
+ if (f.open(IO_ReadOnly)) {
+ while (!f.atEnd()) {
+ QString l;
+@@ -2001,7 +2001,488 @@
+ return(0);
+ }
+
+-#elif defined(__FreeBSD__) && HAVE_MACHINE_APM_BIOS_H
++#elif defined(__FreeBSD__)
++
++#include <osreldate.h>
++
++#if __FreeBSD_version >= 502010
++
++/*
++** This is the FreeBSD-specific code for FreeBSD newer than 5.2.1.
++*/
++
++#include <sys/param.h>
++
++#include <errno.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <sysexits.h>
++#include <unistd.h>
++
++#include <dev/acpica/acpiio.h>
++
++#define ACPIDEV "/dev/acpi"
++
++
++#include <qpushbutton.h>
++#include <qobject.h>
++#include <kactivelabel.h>
++#include <kprocess.h>
++
++//
++// returns 1 if we support power management
++//
++/*
++791:int laptop_portable::has_apm(int type)
++806:int laptop_portable::has_acpi(int type)
++857:int laptop_portable::has_power_management()
++873:int laptop_portable::has_battery_time()
++886:int laptop_portable::has_suspend()
++903:int laptop_portable::has_standby()
++921:int laptop_portable::has_hibernation()
++940:KActiveLabel *laptop_portable::no_power_management_explanation(QWidget *parent)
++955:QLabel *laptop_portable::how_to_do_suspend_resume(QWidget *parent)
++1041:QLabel *laptop_portable::pcmcia_info(int x, QWidget *parent)
++1062:void laptop_portable::invoke_standby()
++1096:void laptop_portable::invoke_suspend()
++1135:void laptop_portable::invoke_hibernation()
++1184:struct power_result laptop_portable::poll_battery_state()
++1264:bool laptop_portable::has_lav()
++1269:float laptop_portable::get_load_average()
++1287:int laptop_portable::has_cpufreq() {
++1301:QString laptop_portable::cpu_frequency() {
++
++2067:int laptop_portable::has_battery_time()
++2092:int laptop_portable::has_suspend()
++2113:int laptop_portable::has_standby()
++2136:int laptop_portable::has_hibernation()
++2147:KActiveLabel *laptop_portable::no_power_management_explanation(QWidget *parent)
++2180:QLabel *laptop_portable::how_to_do_suspend_resume(QWidget *parent)
++2191:QLabel *laptop_portable::pcmcia_info(int x, QWidget *parent)
++2200:void laptop_portable::invoke_standby()
++2216:void laptop_portable::invoke_suspend()
++2231:void laptop_portable::invoke_hibernation()
++2252:int laptop_portable::has_acpi(int)
++2258:int laptop_portable::has_apm(int type)
++2285:struct power_result laptop_portable::poll_battery_state()
++2326:bool laptop_portable::has_lav() { return 0; }
++2328:float laptop_portable::get_load_average()
++2334:int laptop_portable::has_cpufreq() {
++2339:QString laptop_portable::cpu_frequency()
++*/
++#include <iostream>
++using namespace std;
++
++//
++// something changed maybe we need to check out environment again
++//
++void
++laptop_portable::power_management_restart()
++{
++ // INSERT HERE
++}
++
++int
++laptop_portable::has_power_management()
++{
++ /*int ret, fd;
++
++ fd = ::open(ACPIDEV, O_RDWR);
++ if (fd == -1)
++ fd = ::open(ACPIDEV, O_RDONLY);
++ if (fd == -1) {
++ return 0;
++ }
++ else {
++ ::close(fd);
++ return 1;
++ }*/
++ if (::access(ACPIDEV, O_RDWR) == -1)
++ if (::access(ACPIDEV, O_RDONLY) == -1) {
++ return 0;
++ }
++ else return 1;
++}
++//
++// returns 1 if the BIOS returns the time left in the battery rather than a % of full
++//
++int laptop_portable::has_battery_time()
++{
++ int ret, fd;
++ union acpi_battery_ioctl_arg battio;
++
++ battio.unit = 0;
++
++ fd = ::open(ACPIDEV, O_RDWR);
++ if (fd == -1)
++ fd = ::open(ACPIDEV, O_RDONLY);
++ if (fd == -1) {
++ return 0;
++ }
++
++ if (ioctl(fd, ACPIIO_BATT_GET_BIF, &battio) == -1) {
++ return (0);
++ }
++ ::close(fd);
++ return 1;
++}
++
++//
++// returns 1 if we can perform a change-to-suspend-mode operation for the user
++// (has_power_management() has already returned 1)
++//
++int laptop_portable::has_suspend()
++{
++ /*int ret, fd = ::open(APMDEV, O_RDWR);
++
++ if (fd == -1)
++ return 0;
++
++ struct apm_info info;
++ ret=ioctl(fd, APMIO_GETINFO, &info);
++ ::close(fd);
++
++ if (ret == -1)
++ return 0;
++
++ return (info.ai_capabilities & 0x02);*/
++ return 0;
++}
++//
++// returns 1 if we can perform a change-to-standby-mode operation for the user
++// (has_power_management() has already returned 1)
++//
++int laptop_portable::has_standby()
++{
++ /*int ret, fd = ::open(APMDEV, O_RDWR);
++
++ if (fd == -1)
++ return 0;
++
++ struct apm_info info;
++ ret=ioctl(fd, APMIO_GETINFO, &info);
++ ::close(fd);
++
++ if (ret == -1)
++ return 0;
++
++ return (info.ai_capabilities & 0x01);*/
++ return 0;
++}
++//
++// returns 1 if we can perform a change-to-hibernate-mode for a user
++// (has_power_management() has already returned 1) [hibernate is the save-to-disk mode
++// not supported by linux - different laptops have their own - the first here is for
++// a ThinkPad]
++//
++int laptop_portable::has_hibernation()
++{
++ if (::access(PATH_TPCTL, X_OK)==0)
++ return(1);
++ return(0);
++}
++
++//
++// explain to the user what they need to do if has_power_management() returned 0
++// to get any software they lack
++//
++KActiveLabel *laptop_portable::no_power_management_explanation(QWidget *parent)
++{
++ int fd;
++ KActiveLabel *explain;
++
++ fd = ::open(ACPIDEV, O_RDWR);
++ if (fd == -1) {
++ switch (errno) {
++ case ENOENT:
++ explain = new KActiveLabel(i18n("There is no /dev/acpi file on this system. Please review the FreeBSD handbook on how to add acpi support to your kernel(man 4 acpi)."), parent);
++ break;
++ case EACCES:
++ explain = new KActiveLabel(i18n("Your system has the proper device node for ACPI support, however you cannot access it. If you are logged in as root right now, you have a problem, otherwise contact your local sysadmin and ask for read/write access to /dev/acpi."), parent);
++ break;
++ case ENXIO:
++ explain = new KActiveLabel(i18n("Your kernel lacks support for ACPI."), parent);
++ break;
++ break;
++ default:
++ explain = new KActiveLabel(i18n("There was a generic error while opening /dev/acpi."), parent);
++ break;
++ }
++ } else {
++ close(fd);
++ explain = new KActiveLabel(i18n("ACPI has most likely been disabled."), parent);
++ }
++
++ return(explain);
++}
++
++//
++// explain to the user what they need to do to get suspend/resume to work from user mode
++//
++QLabel *laptop_portable::how_to_do_suspend_resume(QWidget *parent)
++{
++ QLabel* note = new QLabel(" ", parent);
++ return(note);
++}
++
++
++//
++// pcmcia support - this will be replaced by better - pcmcia support being worked on by
++// others
++//
++QLabel *laptop_portable::pcmcia_info(int x, QWidget *parent)
++{
++ if (x == 0)
++ return(new QLabel(i18n("No PCMCIA controller detected"), parent));
++ return(new QLabel(i18n(""), parent));
++}
++//
++// puts us into standby mode
++//
++void laptop_portable::invoke_standby()
++{
++ /*int fd = ::open(APMDEV, O_RDWR);
++
++ if (fd == -1)
++ return;
++
++ ioctl(fd, APMIO_STANDBY, NULL);
++ ::close(fd);*/
++
++ return;
++}
++
++//
++// puts us into suspend mode
++//
++void laptop_portable::invoke_suspend()
++{
++ /*int fd = ::open(APMDEV, O_RDWR);
++
++ if (fd == -1)
++ return;
++
++ ioctl(fd, APMIO_SUSPEND, NULL);
++ ::close(fd);*/
++
++ return;
++}
++//
++// puts us into hibernate mode
++//
++void laptop_portable::invoke_hibernation()
++{
++ KProcess thisProc;
++
++ if (::access(PATH_TPCTL, X_OK)==0) {
++ thisProc << PATH_TPCTL;
++ thisProc << "---hibernate";
++ thisProc.start(KProcess::Block);
++ return;
++ }
++}
++
++void
++laptop_portable::acpi_set_mask(bool, bool, bool, bool, bool )
++{
++ // INSERT HERE
++}
++
++int laptop_portable::has_acpi(int)
++{
++ if (::access(ACPIDEV, O_RDONLY) != 0) return 0;
++ return (1);
++}
++
++int laptop_portable::has_apm(int type)
++{
++ if (type == 1) // implement me .... this is the hook that pops up the panel for making /usr/sbin/apm setuid
++ return 0;
++ return (0);
++}
++
++void
++laptop_portable::apm_set_mask(bool , bool )
++{
++}
++
++
++//
++// adds extra widgets to the battery panel
++//
++void
++laptop_portable::extra_config(QWidget * /*parent*/, KConfig * /*config*/, QVBoxLayout * /*layout*/)
++{
++ // INSERT HERE
++}
++
++
++
++//
++// return current battery state
++//
++struct power_result laptop_portable::poll_battery_state()
++{
++ struct power_result p;
++
++ int ret, fd;
++ union acpi_battery_ioctl_arg battio;
++
++ battio.unit = ACPI_BATTERY_ALL_UNITS;
++ ret = 0;
++
++ fd = ::open(ACPIDEV, O_RDONLY);
++ if (fd == -1) {
++ goto bad;
++ }
++
++ if (ioctl(fd, ACPIIO_BATT_GET_BATTINFO, &battio) == -1) {
++ goto bad;
++ }
++
++ if (ioctl(fd, ACPIIO_ACAD_GET_STATUS, &ret) == -1) {
++ goto bad;
++ }
++
++ ::close(fd);
++
++ p.powered = ret;
++ p.percentage = battio.battinfo.cap;
++ p.time = battio.battinfo.min;
++ return(p);
++
++bad:
++ p.powered = 1;
++ p.percentage = 100;
++ p.time = 0;
++ return(p);
++}
++
++//
++// return the system load
++//
++
++bool laptop_portable::has_lav() { return 1; }
++
++float laptop_portable::get_load_average()
++{
++ // INSERT HERE
++ return(-1);
++}
++
++int laptop_portable::has_cpufreq() {
++ // INSERT HERE
++ return 0;
++}
++
++QString laptop_portable::cpu_frequency() {
++ // INSERT HERE
++ return "";
++}
++
++int
++laptop_portable::has_brightness()
++{
++ // INSERT HERE
++ return 0;
++}
++
++void
++laptop_portable::set_brightness(bool /*blank*/, int /*val*/) // val = 0-255 255 brightest, 0 means dimmest (if !blank it must be still visible),
++{
++ // INSERT HERE
++}
++
++int
++laptop_portable::get_brightness()
++{
++ // INSERT HERE
++ return(-1); // means can't extract it
++}
++
++bool
++laptop_portable::get_system_performance(bool, int &current, QStringList &s, bool *&) // do something to help get system profiles from places like ACPI
++{
++ // INSERT HERE
++ current = 0;
++ s.clear();
++ return(0); // if no profiles are available
++}
++
++bool
++laptop_portable::get_system_throttling(bool, int &current, QStringList &s, bool *&) // do something to help get system throttling data from places like ACPI
++{
++ // INSERT HERE
++ current = 0;
++ s.clear();
++ return(0);
++}
++
++void
++laptop_portable::set_system_performance(QString)
++{
++ // INSERT HERE
++}
++
++void
++laptop_portable::set_system_throttling(QString)
++{
++ // INSERT HERE
++}
++
++bool
++laptop_portable::has_button(LaptopButton) // true if we have support for a particular button
++{
++ // INSERT HERE
++ return(0);
++}
++
++bool
++laptop_portable::get_button(LaptopButton) // true if a button is pressed
++{
++ // INSERT HERE
++ return(0);
++}
++
++void
++laptop_portable::get_battery_status(int &num_batteries, QStringList &names, QStringList &state, QStringList &values) // get multiple battery status
++{
++ struct power_result r;
++
++ if (!has_power_management()) {
++ num_batteries = 0;
++ names.clear();
++ state.clear();
++ values.clear();
++ return;
++ }
++
++ // INSERT HERE
++
++ num_batteries = 1;
++ r = poll_battery_state();
++ names.append("BAT1");
++ state.append("yes");
++ QString s;
++ s.setNum(r.percentage);
++ values.append(s);
++}
++
++bool
++laptop_portable::has_software_suspend(int /*type*/)
++{
++ return false; // (::has_software_suspend(type));
++}
++
++void
++laptop_portable::software_suspend_set_mask(bool /*hibernate*/)
++{
++ // software_suspend_is_preferred = hibernate;
++}
++
++#endif
++
++#if defined(__FreeBSD__) && defined(HAVE_MACHINE_APM_BIOS_H) && (__FreeBSD_version < 502010)
+
+ /*
+ ** This is the FreeBSD-specific code.
+@@ -2426,6 +2907,7 @@
+ // software_suspend_is_preferred = hibernate;
+ }
+
++#endif
+
+ #elif defined(__NetBSD_APM__)
+
diff --git a/sysutils/klaptopdaemon/pkg-descr b/sysutils/klaptopdaemon/pkg-descr
index a542523efdc1..6d45c0758fee 100644
--- a/sysutils/klaptopdaemon/pkg-descr
+++ b/sysutils/klaptopdaemon/pkg-descr
@@ -1 +1,2 @@
-Klaptopdaemon is an APM monitor for KDE, useful for monitoring battery status.
+Klaptopdaemon is a power management utility for KDE, useful for monitoring
+battery status.