X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FW1TemperatureSensor.cc;h=20dc3f388b9fb228736f9143c3d9188dc3b6b150;hb=c5db24757ed9d1461eca0a78b786a1261ea71380;hp=38baecbdb51be505a9af2fa479dcfe68c65e27df;hpb=5c90b2e54752b52c8e5851df68ab9d9063c52ffd;p=lib1wire.git diff --git a/src/W1TemperatureSensor.cc b/src/W1TemperatureSensor.cc index 38baecb..20dc3f3 100644 --- a/src/W1TemperatureSensor.cc +++ b/src/W1TemperatureSensor.cc @@ -7,12 +7,42 @@ #include #include #include +#include +#include #include "W1TemperatureSensor.hh" using namespace std; using namespace w1; +template +bool string_to_number(T& result, + const std::string& string_param, + std::ios_base& (*format)(std::ios_base&)) +{ + std::istringstream iss(string_param); + return !(iss >> format >> result).fail(); +} + +string convert_for_3_digits_value(string raw_value) { + string ret_val; + int int_val; + bool sucFlg; + double dbl_val; + + sucFlg = string_to_number(dbl_val, raw_value, dec); + if (sucFlg == 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(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) { @@ -51,6 +81,7 @@ string W1TemperatureSensor::get_value() { int pos; int length; string formatted_data; + int int_value; ret_val = ""; ifstream ifs(slave_file.c_str()); @@ -71,6 +102,7 @@ string W1TemperatureSensor::get_value() { } } } + ret_val = convert_for_3_digits_value(ret_val); formatted_data = get_formatted_data(ret_val); add_to_memory_cache(formatted_data); return ret_val;