git: f7972afbeec5 - main - x11/lumina-core: Replace apm battery monitoring with sysctls()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 23 Feb 2022 14:46:07 UTC
The branch main has been updated by jwb: URL: https://cgit.FreeBSD.org/ports/commit/?id=f7972afbeec54358e5f80c54baf473b5add0ac92 commit f7972afbeec54358e5f80c54baf473b5add0ac92 Author: Jason W. Bacon <jwb@FreeBSD.org> AuthorDate: 2022-02-23 14:43:06 +0000 Commit: Jason W. Bacon <jwb@FreeBSD.org> CommitDate: 2022-02-23 14:46:06 +0000 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 --- x11/lumina-core/Makefile | 2 +- .../files/patch-libLumina_LuminaOS-FreeBSD.cpp | 72 ++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) 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