2 * W1TemperatureSensor.cc
4 * Created on: Oct 20, 2010
14 #include "W1TemperatureSensor.hh"
19 #define CONST_UNIT_CELCIUS "C"
21 template <class NumberDataType>
22 bool string_to_number(NumberDataType& result,
23 const std::string& string_param,
24 std::ios_base& (*format)(std::ios_base&))
26 std::istringstream iss(string_param);
27 return !(iss >> format >> result).fail();
30 double convert_w1_temperature_to_celcius(string raw_value,
36 suc_flg = string_to_number<double>(dbl_val, raw_value, dec);
37 if (suc_flg == true) {
38 dbl_val = dbl_val / 1000;
41 std::ostringstream out;
42 out << fixed << setprecision(3) << dbl_val;
47 log_error("Failed to convert temperature %s to celcius value.", raw_value.c_str());
53 W1TemperatureSensor::W1TemperatureSensor(string device_id_param,
54 string device_type_param,
55 dirent *direntry_param): W1Device(device_id_param, device_type_param, direntry_param) {
56 ifstream ifs(slave_file.c_str());
57 if (ifs.is_open() == false) {
58 log_error("%s: %s failed to read data from file: %s\n", id.c_str(), get_type().c_str(), slave_file.c_str());
59 log_error("Verify that you have w1_therm kernel module loaded.\n");
64 W1TemperatureSensor::~W1TemperatureSensor() {
65 log_debug("destructor\n");
68 vector<double> *W1TemperatureSensor::get_raw_data() {
69 vector<double> *ret_val;
79 ifstream ifs(slave_file.c_str());
80 if (ifs.is_open() == true) {
81 while(getline(ifs, tmp_str)) {
82 if (tmp_str.empty() == false) {
87 b_cnt = val_str.length();
89 pos = val_str.find("t=");
91 ((pos + 2) < b_cnt)) {
92 val_str = val_str.substr(pos + 2);
93 val_dbl = convert_w1_temperature_to_celcius(val_str, &err_flg);
95 ret_val = new vector<double>();
96 ret_val->push_back(val_dbl);
104 string W1TemperatureSensor::get_unit() {
105 return CONST_UNIT_CELCIUS;
108 unsigned int W1TemperatureSensor::get_data_decimal_precision() {