20#include "tdecpudevice.h"
28#include "tdehardwaredevices.h"
33#if defined(WITH_TDEHWLIB_DAEMONS)
34 #include <tqdbusdata.h>
35 #include <tqdbusmessage.h>
36 #include <tqdbusproxy.h>
37 #include <tqdbusvariant.h>
38 #include <tqdbusconnection.h>
42TDECPUDevice::TDECPUDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) {
47 m_transitionlatency = -1;
50TDECPUDevice::~TDECPUDevice() {
53double TDECPUDevice::frequency() {
57void TDECPUDevice::internalSetFrequency(
double fr) {
61double TDECPUDevice::minFrequency() {
62 return m_minfrequency;
65void TDECPUDevice::internalSetMinFrequency(
double fr) {
69double TDECPUDevice::maxFrequency() {
70 return m_maxfrequency;
73void TDECPUDevice::internalSetMaxFrequency(
double fr) {
77double TDECPUDevice::transitionLatency() {
78 return m_transitionlatency;
81void TDECPUDevice::internalSetTransitionLatency(
double tl) {
82 m_transitionlatency = tl;
85TQString TDECPUDevice::governor() {
89void TDECPUDevice::internalSetGovernor(TQString gr) {
93TQString TDECPUDevice::scalingDriver() {
94 return m_scalingdriver;
97void TDECPUDevice::internalSetScalingDriver(TQString dr) {
101TQStringList TDECPUDevice::dependentProcessors() {
105void TDECPUDevice::internalSetDependentProcessors(TQStringList dp) {
109TQStringList TDECPUDevice::availableFrequencies() {
110 return m_frequencies;
113void TDECPUDevice::internalSetAvailableFrequencies(TQStringList af) {
117TQStringList TDECPUDevice::availableGovernors() {
121void TDECPUDevice::internalSetAvailableGovernors(TQStringList gp) {
125void TDECPUDevice::internalSetCoreNumber(
int cn) {
129bool TDECPUDevice::canSetGovernor() {
130 TQString governornode = systemPath() +
"/cpufreq/scaling_governor";
131 int rval = access (governornode.ascii(), W_OK);
136#ifdef WITH_TDEHWLIB_DAEMONS
138 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
139 if (dbusConn.isConnected()) {
140 TQT_DBusProxy hardwareControl(
"org.trinitydesktop.hardwarecontrol",
"/org/trinitydesktop/hardwarecontrol",
"org.trinitydesktop.hardwarecontrol.CPUGovernor", dbusConn);
141 if (hardwareControl.canSend()) {
143 TQValueList<TQT_DBusData> params;
144 params << TQT_DBusData::fromInt32(coreNumber());
145 TQT_DBusMessage reply = hardwareControl.sendWithReply(
"CanSetCPUGovernor", params);
146 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
147 return reply[0].toBool();
157void TDECPUDevice::setGovernor(TQString gv) {
158 bool setGovernorDone =
false;
160 TQString governornode = systemPath() +
"/cpufreq/scaling_governor";
161 TQFile file( governornode );
162 if ( file.open( IO_WriteOnly ) ) {
163 TQTextStream stream( &file );
164 stream << gv.lower();
166 setGovernorDone =
true;
169#ifdef WITH_TDEHWLIB_DAEMONS
170 if ( !setGovernorDone ) {
171 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
172 if (dbusConn.isConnected()) {
173 TQT_DBusProxy hardwareControl(
"org.trinitydesktop.hardwarecontrol",
"/org/trinitydesktop/hardwarecontrol",
"org.trinitydesktop.hardwarecontrol.CPUGovernor", dbusConn);
174 if (hardwareControl.canSend()) {
176 TQValueList<TQT_DBusData> params;
177 params << TQT_DBusData::fromInt32(coreNumber()) << TQT_DBusData::fromString(gv.lower());
178 TQT_DBusMessage reply = hardwareControl.sendWithReply(
"SetCPUGovernor", params);
179 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
180 setGovernorDone =
true;
188 if ( setGovernorDone ) {
189 TDEGlobal::hardwareDevices()->processModifiedCPUs();
193bool TDECPUDevice::canSetMaximumScalingFrequency() {
194 TQString freqnode = systemPath() +
"/cpufreq/scaling_max_freq";
195 int rval = access (freqnode.ascii(), W_OK);
204void TDECPUDevice::setMaximumScalingFrequency(
double fr) {
205 TQString freqnode = systemPath() +
"/cpufreq/scaling_max_freq";
206 TQFile file( freqnode );
207 if ( file.open( IO_WriteOnly ) ) {
208 TQTextStream stream( &file );
209 stream << TQString(
"%1").arg(fr*1000000.0, 0,
'f', 0);
214 TDEGlobal::hardwareDevices()->processModifiedCPUs();
217int TDECPUDevice::coreNumber() {
221#include "tdecpudevice.moc"