build fix
[cpufrequi] / mainwindow.cpp
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3
4 #include "n900.h"
5 #include "cpufreq.h"
6
7 #include <QMessageBox>
8
9 MainWindow::MainWindow(QWidget *parent) :
10         QMainWindow(parent),
11         ui(new Ui::MainWindow)
12 {
13     ui->setupUi(this);
14
15     connect(ui->pushButtonRefresh, SIGNAL(clicked()), this, SLOT(RefreshInfo()));
16     //do something somehow
17     //connect(ui->comboBoxCPU, SIGNAL(currentIndexChanged(int)), SLOT(on_comboBoxCPU_Select()));
18     RefreshInfo();
19     ui->labelTimeInStates->hide();
20     InitCPU();
21 }
22
23 MainWindow::~MainWindow()
24 {
25     delete ui;
26 }
27
28 void MainWindow::RefreshInfo()
29 {
30     ui->labelTemperature->setText(QString(tr("Temperature: ")) + QString::number(omap_get_real_temperature()) + QChar(0x2103) + QString(tr(" real / "))+ QString::number(omap_get_raw_temperature()) + QString(tr(" raw")));
31 }
32
33 void MainWindow::InitCPU()
34 {
35     unsigned int cpu, nr_cpus;
36     unsigned long min, max;
37     unsigned int min_pctg = 0;
38     unsigned int max_pctg = 0;
39     struct cpufreq_policy *policy;
40     struct cpufreq_available_frequencies *freqs;
41     struct cpufreq_available_governors *governors;
42     unsigned int i;
43
44     // CPU's
45     ui->comboBoxCPU->clear();
46     nr_cpus = count_cpus();
47     //nr_cpus=1;
48     if(nr_cpus==1) {
49         ui->comboBoxCPU->addItem(QString::number(0),0);
50         ui->comboBoxCPU->hide();
51         ui->labelCPU->hide();
52     } else {
53         for (cpu=0; cpu < nr_cpus; cpu++) {
54             ui->comboBoxCPU->addItem(QString::number(cpu),cpu);
55         }
56     }
57     //ui->label_3->setText(QString::number(nr_cpus));
58     // CPU's END
59
60     // policy
61     policy = cpufreq_get_policy(ui->comboBoxCPU->currentText().toInt());
62     if (policy) {
63
64         if (cpufreq_get_hardware_limits(ui->comboBoxCPU->currentText().toInt(), &min, &max)) {
65             max = 0;
66         } else {
67             min_pctg = (policy->min * 100) / max;
68             max_pctg = (policy->max * 100) / max;
69         }
70     }
71     // policy END
72     // do not forget cpufreq_put_policy
73
74     // Governors
75     ui->comboBoxCPUGovernor->clear();
76     governors = cpufreq_get_available_governors(ui->comboBoxCPU->currentText().toInt());
77     if (governors) {
78         i=0;
79         while (governors->next) {
80             ui->comboBoxCPUGovernor->addItem(governors->governor,i);
81             governors = governors->next;
82             i++;
83         }
84         ui->comboBoxCPUGovernor->addItem(governors->governor,i);
85         cpufreq_put_available_governors(governors);
86     }
87     ui->comboBoxCPUGovernor->setCurrentIndex(ui->comboBoxCPUGovernor->findText(QString(policy->governor)));
88     // Governors END
89
90     // CPU Frequencies
91     ui->comboBoxCPUFreq->clear();
92     freqs = cpufreq_get_available_frequencies(ui->comboBoxCPU->currentText().toInt());
93     if (freqs) {
94         while (freqs->next) {
95             ui->comboBoxCPUFreq->addItem(QString::number(freqs->frequency),int(freqs->frequency));
96             freqs = freqs->next;
97         }
98         ui->comboBoxCPUFreq->addItem(QString::number(freqs->frequency),int(freqs->frequency));
99         //unsigned long hwfreq = cpufreq_get_freq_hardware(ui->comboBoxCPU->currentText().toInt());
100         //ui->comboBoxCPUFreq->setCurrentIndex();
101         cpufreq_put_available_frequencies(freqs);
102     }
103     ui->comboBoxCPUFreq->setCurrentIndex(ui->comboBoxCPUFreq->findText(QString::number(policy->max)));
104     cpufreq_put_policy(policy);
105     // CPU Frequencies END
106
107     // up_threshold
108     ui->lineEditUpThreshold->clear();
109     ui->lineEditUpThreshold->setText(QString::number(cpufreq_get_up_threshold(ui->comboBoxCPU->currentText().toInt())));
110     // up_threshold END
111
112     // sampling_rate
113     ui->lineEditSamplingRate->clear();
114     ui->lineEditSamplingRate->setText(QString::number(cpufreq_get_sampling_rate(ui->comboBoxCPU->currentText().toInt())));
115     // sampling_rate END
116
117     // ignore_nice_load
118     i = cpufreq_get_ignore_nice_load(ui->comboBoxCPU->currentText().toInt());
119     if(i==-1) {
120         ui->checkBoxIgnoreNiceLoad->hide();
121     } else {
122         ui->checkBoxIgnoreNiceLoad->show();
123         if(i)
124             ui->checkBoxIgnoreNiceLoad->setChecked(true);
125         else
126             ui->checkBoxIgnoreNiceLoad->setChecked(false);
127     }
128     // ignore_nice_load END
129
130     // SmartReflex
131     i = cpufreq_get_SmartReflex();
132     if(i==-1) {
133         ui->checkBoxSmartReflex->hide();
134     } else {
135         ui->checkBoxSmartReflex->show();
136         if(i)
137             ui->checkBoxSmartReflex->setChecked(true);
138         else
139             ui->checkBoxSmartReflex->setChecked(false);
140     }
141     // SmartReflex END
142 }
143
144 void MainWindow::changeEvent(QEvent *e)
145 {
146     QMainWindow::changeEvent(e);
147     switch (e->type()) {
148     case QEvent::LanguageChange:
149         ui->retranslateUi(this);
150         break;
151     default:
152         break;
153     }
154 }
155
156 void MainWindow::on_pushButtonClear_clicked()
157 {
158     ui->comboBoxCPU->clear();
159     ui->comboBoxCPUFreq->clear();
160     ui->comboBoxCPUGovernor->clear();
161     ui->lineEditUpThreshold->clear();
162     InitCPU();
163 }
164
165 void MainWindow::on_pushButtonApply_clicked()
166 {
167     struct cpufreq_policy *cur_pol = cpufreq_get_policy(ui->comboBoxCPU->currentText().toInt());
168     struct cpufreq_policy *new_pol = new cpufreq_policy();
169     new_pol->min = 0;
170     new_pol->max = 0;
171     new_pol->governor = NULL;
172     new_pol->max = ui->comboBoxCPUFreq->currentText().toInt();
173     new_pol->governor = ui->comboBoxCPUGovernor->currentText().toAscii().data();
174     if (!cur_pol) {
175         return;
176     }
177
178     if (!new_pol->min)
179         new_pol->min = cur_pol->min;
180
181     if (!new_pol->max)
182         new_pol->max = cur_pol->max;
183
184     if (!new_pol->governor)
185         new_pol->governor = cur_pol->governor;
186
187     //TODO add error check
188     cpufreq_set_policy(ui->comboBoxCPU->currentText().toInt(), new_pol);
189
190     if(strcmp(new_pol->governor,"userspace")==0)
191     //{
192         cpufreq_set_frequency(ui->comboBoxCPU->currentText().toInt(), new_pol->max);
193         //ui->label_3->setText("Ok");
194     //} else {
195         //ui->label_3->setText("No");
196     //}
197
198     //TODO add error check
199     if(strcmp(new_pol->governor,"ondemand")==0)
200     {
201         cpufreq_set_up_threshold(ui->comboBoxCPU->currentText().toInt(),ui->lineEditUpThreshold->text().toULong());
202         cpufreq_set_sampling_rate(ui->comboBoxCPU->currentText().toInt(),ui->lineEditSamplingRate->text().toULong());
203         if(ui->checkBoxIgnoreNiceLoad->isVisible())
204             cpufreq_set_ignore_nice_load(ui->comboBoxCPU->currentText().toInt(), (int) ui->checkBoxIgnoreNiceLoad->isChecked());
205
206         if(ui->checkBoxSmartReflex->isVisible()) {
207             if(ui->checkBoxSmartReflex->isChecked()) {
208                 cpufreq_set_SmartReflex(3);
209             } else {
210                 cpufreq_set_SmartReflex(0);
211             }
212         }
213     }
214     cpufreq_put_policy(cur_pol);
215     free(new_pol);
216
217     //QMessageBox::about(this,"About","hello");
218     //QMessageBox::about(0, "Trolltech", "<a href='http://www.trolltech.com'>Trolltech</a>");
219 }
220
221 void MainWindow::on_pushButtonAbout_clicked()
222 {
223     QMessageBox::about(this,tr("About"),tr("cpufreqUI version ") + QString(CPUFREQUI_VERSION) + tr("<br>Copyright (C) 2010 Alexander R. a.k.a. SR"));
224 }