Ticket #3502: statusbox.diff

File statusbox.diff, 4.5 KB (added by vdr@…, 12 years ago)
  • programs/mythfrontend/statusbox.cpp

     
    33#include <qsqldatabase.h>
    44#include <qwidgetstack.h>
    55#include <qvbox.h>
     6#include <qdir.h>
    67#include <qgrid.h>
    78#include <qregexp.h>
    89#include <qhostaddress.h>
     
    2425#include "mythdbcon.h"
    2526#include "cardutil.h"
    2627
     28#include "../../config.h"
     29#ifdef HAVE_LMSENSORS
     30    #define LMSENSOR_DEFAULT_CONFIG_FILE "/etc/sensors.conf"
     31    #include <sensors/sensors.h>
     32    #include <sensors/chips.h>
     33#endif
     34
    2735#define REC_CAN_BE_DELETED(rec) \
    2836    ((((rec)->programflags & FL_INUSEPLAYING) == 0) && \
    2937     ((((rec)->programflags & FL_INUSERECORDING) == 0) || \
     
    15001508        detailString = "";
    15011509    }
    15021510
     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
    15031618    contentTotalLines = count;
    15041619    update(ContentRect);
    15051620}