2011-12-19 72 views
4

長篇小說我試圖編寫一個可以檢查cpu溫度的應用程序。使用libsensors(3)手冊頁,我至少可以獲得libsensors_version編號。截至目前,這裏是我的代碼:有人能夠正確使用libsensors嗎?

#include <sensors/sensors.h> 
#include "SensorData.h" 
#include <string> 
#include <sstream> 


using namespace std; 

SensorData::SensorData() 
{ 
    sensors_init(NULL); 
} 

SensorData::~SensorData() 
{ 
    sensors_cleanup(); 
} 

string SensorData::GetVersion() 
{ 
    ostringstream Converter; 
    Converter<<"Version: "<<libsensors_version; 
    return Converter.str(); 
} 

void SensorData::FetchTemp() 
{ 
    //sensors_get_value() 
} 

與該男子頁我知道sensors_get_value預計

const sensors_chip_name *name 
int subfeat_nr 
double *value 

要傳遞給它。問題是我不知道這些是什麼。幾乎文檔中的每個函數都有這個問題。他們都期望我不知道如何提供模糊的東西。

所以這裏是問題的大部分:有沒有人有任何工作我可以看看這個庫的例子?或者至少有人知道如何給這些函數提供他們需要的值?

編輯:

因爲似乎沒有人知道關於這個庫,沒有人知道不同的方式來獲得的溫度?

回答

10

您可以通過瀏覽源代碼找到如何使用API​​。 sensors程序的代碼不太複雜。

爲了讓您一開始,這裏有一個快速的功能:

  • 枚舉所有的芯片
  • 枚舉所有的功能
  • 打印其可讀子功能的值

你可以只需將它按原樣添加到現有的骨架類中即可。

(此代碼是隻用於演示目的,不經過徹底的。)

void SensorData::FetchTemp() 
{ 
    sensors_chip_name const * cn; 
    int c = 0; 
    while ((cn = sensors_get_detected_chips(0, &c)) != 0) { 
     std::cout << "Chip: " << cn->prefix << "/" << cn->path << std::endl; 

     sensors_feature const *feat; 
     int f = 0; 

     while ((feat = sensors_get_features(cn, &f)) != 0) { 
      std::cout << f << ": " << feat->name << std::endl; 

      sensors_subfeature const *subf; 
      int s = 0; 

      while ((subf = sensors_get_all_subfeatures(cn, feat, &s)) != 0) { 
       std::cout << f << ":" << s << ":" << subf->name 
          << "/" << subf->number << " = "; 
       double val; 
       if (subf->flags & SENSORS_MODE_R) { 
        int rc = sensors_get_value(cn, subf->number, &val); 
        if (rc < 0) { 
         std::cout << "err: " << rc; 
        } else { 
         std::cout << val; 
        } 
       } 
       std::cout << std::endl; 
      } 
     } 
    } 
} 
+0

真正看到代碼幫助很多。謝謝。今晚晚些時候我必須放棄。 – CountMurphy 2011-12-19 17:50:08

+0

這工作出色! – CountMurphy 2011-12-20 03:33:35

2

GNOME面板小程序傳感器與工作libsensors(和其他後端);完整的源代碼可以從Sourceforge,在這裏:http://sensors-applet.sourceforge.net/index.php?content=source

...特別是libsensors插件看上去還算清晰......我相信這應該是一個可用的GitWeb鏈接直接到該代碼:http://sensors-applet.git.sourceforge.net/git/gitweb.cgi?p=sensors-applet/sensors-applet;a=blob;f=plugins/libsensors/libsensors-plugin.c;h=960c19f4c36902dee4e20b690f2e3dfe6c715279;hb=HEAD