20 #include "tdecpudevice.h"
26 #include "tdeglobal.h"
28 #include "tdehardwaredevices.h"
33 #if defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_HAL)
34 #include <tqdbusdata.h>
35 #include <tqdbusmessage.h>
36 #include <tqdbusproxy.h>
37 #include <tqdbusvariant.h>
38 #include <tqdbusconnection.h>
39 #endif // defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_HAL)
42 TDECPUDevice::TDECPUDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) {
47 m_transitionlatency = -1;
50 TDECPUDevice::~TDECPUDevice() {
53 double TDECPUDevice::frequency() {
57 void TDECPUDevice::internalSetFrequency(
double fr) {
61 double TDECPUDevice::minFrequency() {
62 return m_minfrequency;
65 void TDECPUDevice::internalSetMinFrequency(
double fr) {
69 double TDECPUDevice::maxFrequency() {
70 return m_maxfrequency;
73 void TDECPUDevice::internalSetMaxFrequency(
double fr) {
77 double TDECPUDevice::transitionLatency() {
78 return m_transitionlatency;
81 void TDECPUDevice::internalSetTransitionLatency(
double tl) {
82 m_transitionlatency = tl;
85 TQString TDECPUDevice::governor() {
89 void TDECPUDevice::internalSetGovernor(TQString gr) {
93 TQString TDECPUDevice::scalingDriver() {
94 return m_scalingdriver;
97 void TDECPUDevice::internalSetScalingDriver(TQString dr) {
101 TQStringList TDECPUDevice::dependentProcessors() {
105 void TDECPUDevice::internalSetDependentProcessors(TQStringList dp) {
109 TQStringList TDECPUDevice::availableFrequencies() {
110 return m_frequencies;
113 void TDECPUDevice::internalSetAvailableFrequencies(TQStringList af) {
117 TQStringList TDECPUDevice::availableGovernors() {
121 void TDECPUDevice::internalSetAvailableGovernors(TQStringList gp) {
125 void TDECPUDevice::internalSetCoreNumber(
int cn) {
129 bool 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();
152 #endif // WITH_TDEHWLIB_DAEMONS
156 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
157 if (dbusConn.isConnected()) {
158 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
159 "org.freedesktop.Hal",
160 "/org/freedesktop/Hal/devices/computer",
161 "org.freedesktop.Hal.Device.CPUFreq",
162 "GetCPUFreqGovernor");
163 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
164 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
174 void TDECPUDevice::setGovernor(TQString gv) {
175 bool setGovernorDone = FALSE;
177 TQString governornode = systemPath() +
"/cpufreq/scaling_governor";
178 TQFile file( governornode );
179 if ( file.open( IO_WriteOnly ) ) {
180 TQTextStream stream( &file );
181 stream << gv.lower();
183 setGovernorDone = TRUE;
186 #ifdef WITH_TDEHWLIB_DAEMONS
187 if ( !setGovernorDone ) {
188 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
189 if (dbusConn.isConnected()) {
190 TQT_DBusProxy hardwareControl(
"org.trinitydesktop.hardwarecontrol",
"/org/trinitydesktop/hardwarecontrol",
"org.trinitydesktop.hardwarecontrol.CPUGovernor", dbusConn);
191 if (hardwareControl.canSend()) {
193 TQValueList<TQT_DBusData> params;
194 params << TQT_DBusData::fromInt32(coreNumber()) << TQT_DBusData::fromString(gv.lower());
195 TQT_DBusMessage reply = hardwareControl.sendWithReply(
"SetCPUGovernor", params);
196 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
197 setGovernorDone = TRUE;
202 #endif // WITH_TDEHWLIB_DAEMONS
205 if ( !setGovernorDone ) {
206 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
207 if (dbusConn.isConnected()) {
208 TQT_DBusProxy cpuFreqControl(
"org.freedesktop.Hal",
"/org/freedesktop/Hal/devices/computer",
"org.freedesktop.Hal.Device.CPUFreq", dbusConn);
209 if (cpuFreqControl.canSend()) {
211 TQValueList<TQT_DBusData> params;
212 params << TQT_DBusData::fromString(gv.lower());
213 TQT_DBusMessage reply = cpuFreqControl.sendWithReply(
"SetCPUFreqGovernor", params);
214 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
215 setGovernorDone = TRUE;
223 if ( setGovernorDone ) {
224 TDEGlobal::hardwareDevices()->processModifiedCPUs();
228 bool TDECPUDevice::canSetMaximumScalingFrequency() {
229 TQString freqnode = systemPath() +
"/cpufreq/scaling_max_freq";
230 int rval = access (freqnode.ascii(), W_OK);
239 void TDECPUDevice::setMaximumScalingFrequency(
double fr) {
240 TQString freqnode = systemPath() +
"/cpufreq/scaling_max_freq";
241 TQFile file( freqnode );
242 if ( file.open( IO_WriteOnly ) ) {
243 TQTextStream stream( &file );
244 stream << TQString(
"%1").arg(fr*1000000.0, 0,
'f', 0);
249 TDEGlobal::hardwareDevices()->processModifiedCPUs();
252 int TDECPUDevice::coreNumber() {
256 #include "tdecpudevice.moc"