diff options
author | Jason W. Bacon <jwb@FreeBSD.org> | 2022-02-23 14:43:06 +0000 |
---|---|---|
committer | Jason W. Bacon <jwb@FreeBSD.org> | 2022-02-23 14:46:06 +0000 |
commit | f7972afbeec54358e5f80c54baf473b5add0ac92 (patch) | |
tree | c75420bef48e8ba009d585942b600b58a1dcb833 /x11/lumina-core | |
parent | e9b6c974ea1ddfe0f4c1a58a955147d3f3a22735 (diff) | |
download | ports-f7972afbeec54358e5f80c54baf473b5add0ac92.tar.gz ports-f7972afbeec54358e5f80c54baf473b5add0ac92.zip |
x11/lumina-core: Replace apm battery monitoring with sysctls()
The apm command does not exist on arm, powerpc, or riscv.
This also reduces CPU time for lumina-desktop.
Patches have been proposed to upstream.
PR: 262018
Approved by: lbartoletti
Diffstat (limited to 'x11/lumina-core')
-rw-r--r-- | x11/lumina-core/Makefile | 2 | ||||
-rw-r--r-- | x11/lumina-core/files/patch-libLumina_LuminaOS-FreeBSD.cpp | 72 |
2 files changed, 73 insertions, 1 deletions
diff --git a/x11/lumina-core/Makefile b/x11/lumina-core/Makefile index 561f15426077..ad734e3c8e94 100644 --- a/x11/lumina-core/Makefile +++ b/x11/lumina-core/Makefile @@ -3,7 +3,7 @@ PORTNAME= lumina-core DISTVERSIONPREFIX= v DISTVERSION= 1.6.2 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= x11 MAINTAINER= lbartoletti@FreeBSD.org diff --git a/x11/lumina-core/files/patch-libLumina_LuminaOS-FreeBSD.cpp b/x11/lumina-core/files/patch-libLumina_LuminaOS-FreeBSD.cpp new file mode 100644 index 000000000000..9b27e4817de2 --- /dev/null +++ b/x11/lumina-core/files/patch-libLumina_LuminaOS-FreeBSD.cpp @@ -0,0 +1,72 @@ +--- libLumina/LuminaOS-FreeBSD.cpp.orig 2021-12-26 02:33:45 UTC ++++ libLumina/LuminaOS-FreeBSD.cpp +@@ -9,6 +9,7 @@ + #include <unistd.h> + #include <sys/types.h> + #include <sys/sysctl.h> ++#include <dev/acpica/acpiio.h> + + #include <QDebug> + //can't read xbrightness settings - assume invalid until set +@@ -289,31 +290,53 @@ void LOS::systemSuspend(){ + } + + //Battery Availability ++// apm command is not available on powerpc or arm + bool LOS::hasBattery(){ + static int hasbat = -1; ++ int life; ++ size_t len = sizeof(life); + if(hasbat < 0 ){ +- int val = batteryCharge(); +- if(val >= 0 && val <= 100){ hasbat = 1; } +- else{ hasbat = 0; } ++ if ( sysctlbyname("hw.acpi.battery.life", &life, &len, NULL, 0) == 0 ) ++ hasbat = 1; ++ else ++ hasbat = 0; + } + return (hasbat==1); + } + + //Battery Charge Level ++// apm command is not available on powerpc or arm + int LOS::batteryCharge(){ //Returns: percent charge (0-100), anything outside that range is counted as an error +- int charge = LUtils::getCmdOutput("apm -l").join("").toInt(); +- if(charge > 100){ charge = -1; } //invalid charge +- return charge; ++ int life; // sysctl name ++ size_t len = sizeof(life); ++ if ( (sysctlbyname("hw.acpi.battery.life", &life, &len, NULL, 0) != 0) || ++ (life > 100) ) ++ life = -1; //invalid charge ++ return life; + } + + //Battery Charging State ++// apm command is not available on powerpc or arm + bool LOS::batteryIsCharging(){ +- return (LUtils::getCmdOutput("apm -a").join("").simplified() == "1"); ++ int state; ++ size_t len = sizeof(state); ++ if ( (sysctlbyname("hw.acpi.battery.state", &state, &len, NULL, 0) == 0) && ++ (state == ACPI_BATT_STAT_CHARGING) ) ++ return true; ++ else ++ return false; + } + + //Battery Time Remaining ++// apm command is not available on powerpc or arm + int LOS::batterySecondsLeft(){ //Returns: estimated number of seconds remaining +- return LUtils::getCmdOutput("apm -t").join("").toInt(); ++ int min; ++ size_t len = sizeof(min); ++ if ( LOS::batteryIsCharging() || ++ (sysctlbyname("hw.acpi.battery.time", &min, &len, NULL, 0) != 0) ) ++ return -1; ++ else ++ return min * 60; + } + + //File Checksums |