| 1511 | // Hardware Monitor ----------------- |
| 1512 | QString sensor_data[4] = {"","","",""}; //source,cpu temp,fan speed,mb temp |
| 1513 | |
| 1514 | // Try ACPI first, then lmsensor 2nd |
| 1515 | QDir dir("/proc/acpi/thermal_zone"); |
| 1516 | QString acpiTempDir; |
| 1517 | if (dir.exists()) |
| 1518 | { |
| 1519 | QStringList lst = dir.entryList(); |
| 1520 | QRegExp rxp = QRegExp ("TH?M?", TRUE, FALSE); |
| 1521 | QString line, temp; |
| 1522 | for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it) |
| 1523 | { |
| 1524 | if ( (*it).contains(rxp)) |
| 1525 | { |
| 1526 | acpiTempDir = dir.absFilePath(*it); |
| 1527 | } |
| 1528 | } |
| 1529 | |
| 1530 | QFile acpiTempFile(acpiTempDir.append("/temperature")); |
| 1531 | if (acpiTempFile.open(IO_ReadOnly)) |
| 1532 | { |
| 1533 | QTextStream stream (&acpiTempFile); |
| 1534 | line = stream.readLine(); |
| 1535 | rxp = QRegExp ("(\\d+)", TRUE, FALSE); |
| 1536 | if (rxp.search(line) != -1 ) |
| 1537 | { |
| 1538 | sensor_data[0] = "ACPI"; |
| 1539 | sensor_data[1] = rxp.cap(1); |
| 1540 | } |
| 1541 | } |
| 1542 | acpiTempFile.close(); |
| 1543 | } |
| 1544 | |
| 1545 | #ifdef HAVE_LMSENSORS |
| 1546 | int chip_nr, a, b; |
| 1547 | char *label = NULL; |
| 1548 | double value; |
| 1549 | const sensors_chip_name *chip; |
| 1550 | const sensors_feature_data *data; |
| 1551 | char* lmsensorConfigName = LMSENSOR_DEFAULT_CONFIG_FILE; |
| 1552 | a = b = 0; |
| 1553 | FILE *lmsensorConfigFile = fopen(lmsensorConfigName, "r"); |
| 1554 | sensors_init(lmsensorConfigFile); |
| 1555 | fclose(lmsensorConfigFile); |
| 1556 | for (chip_nr = 0 ; (chip = sensors_get_detected_chips(&chip_nr)) ; ) |
| 1557 | { |
| 1558 | while ((data = sensors_get_all_features(*chip, &a, &b))) |
| 1559 | { |
| 1560 | if ((!sensors_get_label(*chip, data->number, &label)) && |
| 1561 | (!sensors_get_feature(*chip, data->number, &value))) |
| 1562 | { |
| 1563 | // Find label matching "CPU Temp" or "Temp/CPU" |
| 1564 | QRegExp rxp = QRegExp ("(CPU.+Temp)|(Temp.+CPU)", FALSE, FALSE); |
| 1565 | if (rxp.search(QString(label)) != -1 && value > 0) |
| 1566 | { |
| 1567 | sensor_data[0] = "ACPI"; |
| 1568 | sensor_data[1] = QString("%1").arg(value); |
| 1569 | } |
| 1570 | rxp = QRegExp ("CPU.+Fan", FALSE, FALSE); |
| 1571 | if (rxp.search(QString(label)) != -1 && value >= 0) |
| 1572 | { |
| 1573 | sensor_data[2] = QString("%1").arg(value); |
| 1574 | } |
| 1575 | rxp = QRegExp ("M/B.+Temp", FALSE, FALSE); |
| 1576 | if (rxp.search(QString(label)) != -1 && value >= 0) |
| 1577 | { |
| 1578 | sensor_data[3] = QString("%1").arg(value); |
| 1579 | } |
| 1580 | } |
| 1581 | } |
| 1582 | } |
| 1583 | sensors_cleanup(); |
| 1584 | #endif |
| 1585 | |
| 1586 | if(sensor_data[0] != "") |
| 1587 | { |
| 1588 | contentLines[count] = QObject::tr("Harware Monitor:"); |
| 1589 | detailString += contentLines[count] + "\n"; |
| 1590 | count++; |
| 1591 | |
| 1592 | contentLines[count] = QObject::tr(" Current CPU temperature: "+sensor_data[1]+" °C"); |
| 1593 | detailString += contentLines[count] + "\n"; |
| 1594 | count++; |
| 1595 | |
| 1596 | if(sensor_data[2] != "") |
| 1597 | { |
| 1598 | contentLines[count] = QObject::tr(" Current CPU fan speed: "+sensor_data[2]+" RPM"); |
| 1599 | detailString += contentLines[count] + "\n"; |
| 1600 | count++; |
| 1601 | } |
| 1602 | |
| 1603 | if(sensor_data[3] != "") |
| 1604 | { |
| 1605 | contentLines[count] = QObject::tr(" Current motherboard temperature: "+sensor_data[3]+" °C"); |
| 1606 | detailString += contentLines[count] + "\n"; |
| 1607 | count++; |
| 1608 | } |
| 1609 | |
| 1610 | for (detailLoop = detailBegin; detailLoop < count; detailLoop++) |
| 1611 | contentDetail[detailLoop] = detailString; |
| 1612 | |
| 1613 | detailBegin = count; |
| 1614 | detailString = ""; |
| 1615 | } |
| 1616 | |
| 1617 | |