aboutsummaryrefslogtreecommitdiff
path: root/libLumina
diff options
context:
space:
mode:
Diffstat (limited to 'libLumina')
-rw-r--r--libLumina/LuminaOS-Linux.cpp62
-rw-r--r--libLumina/libLumina.pro1
2 files changed, 57 insertions, 6 deletions
diff --git a/libLumina/LuminaOS-Linux.cpp b/libLumina/LuminaOS-Linux.cpp
index 9d891461..ce5b8240 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,28 +24,74 @@ 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("[");
+ end_position = info.indexOf("%");
+ current_volume = info.mid(start_position + 1, (end_position - start_position) - 1);
+ 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
diff --git a/libLumina/libLumina.pro b/libLumina/libLumina.pro
index fcf84980..9de16637 100644
--- a/libLumina/libLumina.pro
+++ b/libLumina/libLumina.pro
@@ -20,6 +20,7 @@ SOURCES += LuminaXDG.cpp \
LuminaX11.cpp \
LuminaOS-FreeBSD.cpp \
LuminaOS-Linux.cpp
+# new OS support can be added here
INCLUDEPATH += /usr/local/include
bgstack15