aboutsummaryrefslogtreecommitdiff
path: root/libLumina/LuminaOS-Linux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libLumina/LuminaOS-Linux.cpp')
-rw-r--r--libLumina/LuminaOS-Linux.cpp94
1 files changed, 83 insertions, 11 deletions
diff --git a/libLumina/LuminaOS-Linux.cpp b/libLumina/LuminaOS-Linux.cpp
index 9d891461..60fb35fe 100644
--- a/libLumina/LuminaOS-Linux.cpp
+++ b/libLumina/LuminaOS-Linux.cpp
@@ -5,10 +5,14 @@
// See the LICENSE file for full details
//===========================================
#ifdef __linux__
+#include <QDebug>
#include "LuminaOS.h"
#include <unistd.h>
#include <stdio.h> // Needed for BUFSIZ
+//can't read xbrightness settings - assume invalid until set
+static int screenbrightness = -1;
+
// ==== ExternalDevicePaths() ====
QStringList LOS::ExternalDevicePaths(){
//Returns: QStringList[<type>::::<filesystem>::::<path>]
@@ -20,38 +24,85 @@ QStringList LOS::ExternalDevicePaths(){
//Read screen brightness information
int LOS::ScreenBrightness(){
- //Returns: Screen Brightness as a percentage (0-100, with -1 for errors)
- return -1; //not implemented yet for Linux
+ //Returns: Screen Brightness as a percentage (0-100, with -1 for errors)
+ if(screenbrightness==-1){
+ if(QFile::exists("/tmp/.lumina-currentxbrightness")){
+ int val = LUtils::readFile("/tmp/.lumina-currentxbrightness").join("").simplified().toInt();
+ screenbrightness = val;
+ }
+ }
+ return screenbrightness;
+
}
//Set screen brightness
void LOS::setScreenBrightness(int percent){
- //not implemented yet for Linux
+ //ensure bounds
+ if(percent<0){percent=0;}
+ else if(percent>100){ percent=100; }
+ // float pf = percent/100.0; //convert to a decimel
+ //Run the command
+ QString cmd = "xbacklight -set %1";
+ // cmd = cmd.arg( QString::number( int(65535*pf) ) );
+ cmd = cmd.arg( QString::number( percent ) );
+ int ret = LUtils::runCmd(cmd);
+ //Save the result for later
+ if(ret!=0){ screenbrightness = -1; }
+ else{ screenbrightness = percent; }
+ LUtils::writeFile("/tmp/.lumina-currentxbrightness", QStringList() << QString::number(screenbrightness), true);
+
}
//Read the current volume
int LOS::audioVolume(){ //Returns: audio volume as a percentage (0-100, with -1 for errors)
- return -1; //Not implemented yet for Linux
+QString info = LUtils::getCmdOutput("amixer get Master").join("").simplified();;
+ int out = -1;
+ int start_position, end_position;
+ QString current_volume;
+ if(!info.isEmpty()){
+ start_position = info.indexOf("[");
+ start_position++;
+ end_position = info.indexOf("%");
+ current_volume = info.mid(start_position, end_position - start_position);
+ out = current_volume.toInt();
+ }
+ return out;
+
+
}
//Set the current volume
void LOS::setAudioVolume(int percent){
- //not implemented yet for Linux
+ if(percent<0){percent=0;}
+ else if(percent>100){percent=100;}
+ QString info = "amixer -c 0 sset Master,0 " + QString::number(percent) + "%";
+ if(!info.isEmpty()){
+ //Run Command
+ LUtils::runCmd(info);
+ }
+
}
//Change the current volume a set amount (+ or -)
void LOS::changeAudioVolume(int percentdiff){
- //not implemented yet for Linux
+ int old_volume = audioVolume();
+ int new_volume = old_volume + percentdiff;
+ if (new_volume < 0)
+ new_volume = 0;
+ if (new_volume > 100)
+ new_volume = 100;
+ qDebug() << "Setting new volume to: " << new_volume;
+ setAudioVolume(new_volume);
}
//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
@@ -66,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
bgstack15