mirror of
https://git.FreeBSD.org/ports.git
synced 2024-10-20 20:09:11 +00:00
Add an option to enable a patch by Nikita Staroverov that implements
ACPI support in klaptopdaemon. PR: ports/116354 Submitted by: Alex Keda <admin@lissyara.su>
This commit is contained in:
parent
a1cf1276b1
commit
1fc812435c
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=199687
@ -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>
|
||||
|
534
sysutils/klaptopdaemon/files/extrapatch-acpi-support
Normal file
534
sysutils/klaptopdaemon/files/extrapatch-acpi-support
Normal file
@ -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 ¤t, 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 ¤t, 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__)
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user