From 664d066d07b262205f860b039b78371718e4c6bb Mon Sep 17 00:00:00 2001 From: Jesse Smith Date: Sun, 7 Sep 2014 22:42:55 -0300 Subject: The following features have been added to the Linux port: Added battery level detection and AC/battery detection. Added detached audio mixer. Confirmed screen brightness adjustment works. Also cleaned up DEPENDENIES file, separating FreeBSD and Linux requirements. Both sections of the file now include full package/port names of dependencies on both operating systems to make it easy to get all build requirements, runtime requirements and optional components. --- libLumina/LuminaOS-Linux.cpp | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'libLumina') diff --git a/libLumina/LuminaOS-Linux.cpp b/libLumina/LuminaOS-Linux.cpp index ce5b8240..60fb35fe 100644 --- a/libLumina/LuminaOS-Linux.cpp +++ b/libLumina/LuminaOS-Linux.cpp @@ -42,7 +42,7 @@ void LOS::setScreenBrightness(int percent){ else if(percent>100){ percent=100; } // float pf = percent/100.0; //convert to a decimel //Run the command - QString cmd = "xbacklight -set %1"; + QString cmd = "xbacklight -set %1"; // cmd = cmd.arg( QString::number( int(65535*pf) ) ); cmd = cmd.arg( QString::number( percent ) ); int ret = LUtils::runCmd(cmd); @@ -61,8 +61,9 @@ QString info = LUtils::getCmdOutput("amixer get Master").join("").simplified();; QString current_volume; if(!info.isEmpty()){ start_position = info.indexOf("["); + start_position++; end_position = info.indexOf("%"); - current_volume = info.mid(start_position + 1, (end_position - start_position) - 1); + current_volume = info.mid(start_position, end_position - start_position); out = current_volume.toInt(); } return out; @@ -96,12 +97,12 @@ void LOS::changeAudioVolume(int percentdiff){ //Check if a graphical audio mixer is installed bool LOS::hasMixerUtility(){ - return false; //not implemented yet for Linux + return QFile::exists("/usr/bin/pavucontrol"); } //Launch the graphical audio mixer utility void LOS::startMixerUtility(){ - //not implemented yet for Linux + QProcess::startDetached("/usr/bin/pavucontrol"); } //System Shutdown @@ -116,17 +117,38 @@ void LOS::systemRestart(){ //start reboot sequence //Battery Availability bool LOS::hasBattery(){ - return false; //not implemented yet for Linux + QString my_status = LUtils::getCmdOutput("acpi -b").join(""); + bool no_battery = my_status.contains("No support"); + if (no_battery) return false; + return true; } //Battery Charge Level int LOS::batteryCharge(){ //Returns: percent charge (0-100), anything outside that range is counted as an error - return -1; //not implemented yet for Linux + QString my_status = LUtils::getCmdOutput("acpi -b").join(""); + int my_start = my_status.indexOf("%"); + // get the number right before the % sign + int my_end = my_start; + my_start--; + while ( (my_status[my_start] != ' ') && (my_start > 0) ) + my_start--; + my_start++; + int my_charge = my_status.mid(my_start, my_end - my_start).toInt(); + if ( (my_charge < 0) || (my_charge > 100) ) return -1; + return my_charge; } //Battery Charging State +// Many possible values are returned if the laptop is plugged in +// these include "Unknown, Full and No support. +// However, it seems just one status is returned when running +// on battery and that is "Discharging". So if the value we get +// is NOT Discharging then we assume the batter yis charging. bool LOS::batteryIsCharging(){ - return false; //not implemented yet for Linux + QString my_status = LUtils::getCmdOutput("acpi -b").join(""); + bool discharging = my_status.contains("Discharging"); + if (discharging) return false; + return true; } //Battery Time Remaining -- cgit