aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason W. Bacon <jwb@FreeBSD.org>2022-02-23 14:43:06 +0000
committerJason W. Bacon <jwb@FreeBSD.org>2022-02-23 14:46:06 +0000
commitf7972afbeec54358e5f80c54baf473b5add0ac92 (patch)
treec75420bef48e8ba009d585942b600b58a1dcb833
parente9b6c974ea1ddfe0f4c1a58a955147d3f3a22735 (diff)
downloadports-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
-rw-r--r--x11/lumina-core/Makefile2
-rw-r--r--x11/lumina-core/files/patch-libLumina_LuminaOS-FreeBSD.cpp72
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