X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FW1TemperatureSensor.cc;h=b02bb29dd01518738b2fd59136d3b94f8a7d37d4;hb=dcc5fd94e2ec65898dd8bda440cb0539e1f60373;hp=a2b53375a954a4ed7e542675180cdbe5db1e6330;hpb=f61cc31d6bd16c50ca5900eebc5760bcb61a8bcc;p=lib1wire.git diff --git a/src/W1TemperatureSensor.cc b/src/W1TemperatureSensor.cc index a2b5337..b02bb29 100644 --- a/src/W1TemperatureSensor.cc +++ b/src/W1TemperatureSensor.cc @@ -5,24 +5,56 @@ * Author: lamikr */ #include -#include #include +#include +#include +#include "W1Util.hh" #include "W1TemperatureSensor.hh" +#include + using namespace std; using namespace w1; -W1TemperatureSensor::W1TemperatureSensor(dirent *direntry, int family_code_param, string id_param): W1Device(direntry, family_code_param, id_param) { - ifstream ifs(slave_file.c_str()); - if (ifs.is_open() == false) { - string text; +template +bool string_to_number(NumberDataType& result, + const std::string& string_param, + std::ios_base& (*format)(std::ios_base&)) +{ + std::istringstream iss(string_param); + return !(iss >> format >> result).fail(); +} - text = get_time() + ": device type = temperature sensor, id = " + id + ", could not read file: " + slave_file; - cout << text << endl; - cout << "verify that you have w1_therm kernel module loaded" << endl; +string convert_celcius_value_to_three_digits(string raw_value) { + string ret_val; + bool suc_flg; + double dbl_val; + + suc_flg = string_to_number(dbl_val, raw_value, dec); + if (suc_flg == true) { + dbl_val = dbl_val / 1000; + std::ostringstream out; + out << fixed << setprecision(3) << dbl_val; + ret_val = out.str(); } else { + ret_val = raw_value; + } + return ret_val; +} + +W1TemperatureSensor::W1TemperatureSensor(int family_code_param, + string device_id_param, + dirent *direntry_param): W1Device(family_code_param, device_id_param, direntry_param) { + string text; + + log_debug("trying to open file: %s\n", slave_file.c_str()); + ifstream ifs(slave_file.c_str()); + if (ifs.is_open() == false) { + text = get_time() + ": device type = " + get_device_type() + ", id = " + id + ", could not read file: " + slave_file + "\n"; + log_debug(text.c_str()); + log_debug("verify that you have w1_therm kernel module loaded.\n"); ifs.close(); } } @@ -43,13 +75,13 @@ bool W1TemperatureSensor::is_supported_family_code(int family_code) { return ret_val; } -string W1TemperatureSensor::get_value() { - vector text_file; - string temp; - string ret_val; - string last_line; - int pos; - int length; +string W1TemperatureSensor::get_raw_value() { + string temp; + string ret_val; + string last_line; + int pos; + int length; + string format; ret_val = ""; ifstream ifs(slave_file.c_str()); @@ -57,19 +89,19 @@ string W1TemperatureSensor::get_value() { while(getline(ifs, temp)) { if (temp.length() > 0) { last_line = temp; - //cout << ret_val << endl; } } ifs.close(); length = last_line.length(); if (length > 0) { - pos = last_line.find("t="); + pos = last_line.find("t="); if ((pos >= 0) && (pos + 2 < length)) { ret_val = last_line.substr(pos + 2); } } } + ret_val = convert_celcius_value_to_three_digits(ret_val); return ret_val; } @@ -77,9 +109,6 @@ string W1TemperatureSensor::get_unit() { return "C"; } -void W1TemperatureSensor::printout() { - string text; - - text = get_time() + ": device type = temperature sensor, id = " + id + ", value = " + get_value(); - cout << text << endl; +string W1TemperatureSensor::get_device_type() { + return "Temperature Sensor"; }