From: Daniel Klaffenbach Date: Wed, 27 Oct 2010 23:25:33 +0000 (+0200) Subject: Fix slider on PR 1.3 X-Git-Tag: v0.3.4~1 X-Git-Url: https://vcs.maemo.org/git/?p=qcpufreq;a=commitdiff_plain;h=98145e1c8e6a33931ff7871f58800a71f63f2bce Fix slider on PR 1.3 * Do not use inverted slider * Changed scaling step handling (not inverted any more) * Read constant sysfs values only once --- diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index bee8f12..3b96ee8 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #if defined(Q_WS_MAEMO_5) #include #endif @@ -39,10 +40,6 @@ MainWindow::MainWindow(QWidget *parent) : helperProcess( this ), //create a new, stackable help window helpWindow( this ), - //set minFreq to 0 - minFreq(0), - //are we using a power kernel? - powerKernel(false), //create UI refresh timer refreshTimer( this ), //create a QGraphicsScene for the little chip icon @@ -57,6 +54,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); + init(); refresh(); // enable auto rotation @@ -84,13 +82,6 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->actionOverclocking, SIGNAL(toggled(bool)), this, SLOT(setOverclocking())); - //check if we are running on a power kernel - if ( getScalingFreq(0) > 600000 ) { - powerKernel = true; - } else { - powerKernel = false; - } - //disable overclocking button on vanilla kernels if (!powerKernel) { ui->actionOverclocking->setDisabled(true); @@ -231,32 +222,7 @@ int MainWindow::getMaxFreq() */ int MainWindow::getMinFreq() { - if (this->minFreq == 0) { - QString min = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_min_freq" ); - //check if avoid file exists (only on power kernel) - QFile file( "/sys/devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); - if (file.exists()) { - QString avoid = readSysFile( "devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); - QStringList avoidList = avoid.split( " " ); - - //check if min is in avoid_frequencies - for (int i = getScalingStep( min.toInt() ); i>0; --i) { - if (!avoidList.contains(min.setNum( getScalingFreq(i) ))) { - this->minFreq = min.toInt(); - return this->minFreq; - } - } - - //should not happen at all - this->minFreq = 125000; - return this->minFreq; - } else { - this->minFreq = min.toInt(); - return this->minFreq; - } - } else { - return this->minFreq; - } + return this->minFreq; } @@ -265,16 +231,13 @@ int MainWindow::getMinFreq() */ int MainWindow::getScalingFreq(int step) { - QString tmp = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" ); - QStringList freqs = tmp.split( " " ); step = step - 1; if ( step < 0 ) step = 0; - if ( step > getScalingSteps() ) - step = getScalingSteps(); + if ( step > getScalingSteps() - 1 ) + step = getScalingSteps() - 1; - tmp = freqs[ step ]; - return tmp.toInt(); + return this->scalingFrequencies[ step ].toInt(); } @@ -296,9 +259,7 @@ QString MainWindow::getScalingGovernor() */ int MainWindow::getScalingSteps() { - QString tmp = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" ); - QStringList freqs = tmp.split( " " ); - return (freqs.size() - 1); + return this->scalingSteps; } @@ -309,12 +270,9 @@ int MainWindow::getScalingSteps() */ int MainWindow::getScalingStep( int freq ) { - for( int i = 1; i <= getScalingSteps(); ++i ) { - if ( getScalingFreq(i) == freq ) - return i; - } - - return 1; + QString tmp; + tmp.setNum(freq); + return this->scalingFrequencies.indexOf(tmp) + 1; } @@ -344,6 +302,55 @@ int MainWindow::getSmartReflexState() /** + * Initializes internal variables, such as: + * - scalingSteps + * - scalingFrequencies + * - minFreq + * - powerKernel + */ +void MainWindow::init() +{ + this->minFreq = 0; + QString freqs = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" ); + QStringList freqList = freqs.split( " " ); + //change the order of the QStringList - last element becomes first + for (int i=freqList.size() - 1; i>=0; --i) { + if (freqList.at(i) != "") + this->scalingFrequencies << freqList.at(i); + } + this->scalingSteps = (this->scalingFrequencies.size()); + + //set minFreq and check avoid_frequencies + QString min = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_min_freq" ); + qDebug() << min; + //check if avoid file exists (only on power kernel) + QFile file( "/sys/devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); + if (file.exists()) { + QString avoid = readSysFile( "devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); + QStringList avoidList = avoid.split( " " ); + + //check if min is in avoid_frequencies + for (int i = getScalingStep( min.toInt() ); i <= this->scalingSteps; ++i) { + min.setNum( getScalingFreq(i) ); + if (!avoidList.contains(min)) { + this->minFreq = min.toInt(); + break; + } + } + } else { + this->minFreq = min.toInt(); + } + + //check if we are using a power kernel + if ( getScalingFreq(getScalingSteps()) > 600000 ) { + this->powerKernel = true; + } else { + this->powerKernel = false; + } +} + + +/** * Reads any file in /sys/ * * \param sys_file : full path to sys file - omit "/sys/" @@ -404,7 +411,7 @@ void MainWindow::refresh() //display frequency slider ui->freq_adjust->setMinimum( 1 ); ui->freq_adjust->setMaximum( getScalingSteps() ); - ui->freq_adjust->setInvertedAppearance( true ); + //ui->freq_adjust->setInvertedAppearance( true ); ui->freq_adjust->setSliderPosition( getScalingStep(getMaxFreq()) ); //ui->retranslateUi(this); diff --git a/src/mainwindow.h b/src/mainwindow.h index af0eed2..ba8d386 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -23,6 +23,7 @@ #include #include #include +#include #include "helpwindow.h" @@ -65,12 +66,18 @@ private: QProcess helperProcess; //! The help window HelpWindow helpWindow; + //! Initializes the application + void init(); int minFreq; //! Are we using a power kernel? bool powerKernel; QString readSysFile( QString sys_file ); //! the timer for refreshing the UI QTimer refreshTimer; + //! The amount of scaling steps + int scalingSteps; + //! The available scaling frequencies + QStringList scalingFrequencies; //! the QGraphicsScene will contain the large chip icon displayed in the UI QGraphicsScene scene; bool showSudoError;