/* * W1TemperatureSensor.cc * * Created on: Oct 20, 2010 * Author: lamikr */ #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) { string text; text = get_time() + ": device type = " + get_devicetype_name() + ", id = " + id + ", could not read file: " + slave_file; cout << text << endl; cout << "verify that you have w1_therm kernel module loaded." << endl; } else { ifs.close(); } } W1TemperatureSensor::~W1TemperatureSensor() { } bool W1TemperatureSensor::is_supported_family_code(int family_code) { bool ret_val; ret_val = false; switch(family_code) { case 0x10: case 0x28: ret_val = true; break; } return ret_val; } string W1TemperatureSensor::get_value() { string temp; string ret_val; string last_line; int pos; int length; string formatted_data; int int_value; ret_val = ""; ifstream ifs(slave_file.c_str()); if (ifs.is_open() == true) { 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="); if ((pos >= 0) && (pos + 2 < length)) { ret_val = last_line.substr(pos + 2); } } } ret_val = convert_for_3_digits_value(ret_val); return ret_val; } string W1TemperatureSensor::get_unit() { return "C"; } string W1TemperatureSensor::get_devicetype_name() { return "Temperature Sensor"; } /* void W1TemperatureSensor::printout() { string text; text = get_formatted_data(); cout << text << endl; } string W1TemperatureSensor::get_formatted_data() { string ret_val; ret_val = get_time() + ": device type = temperature sensor, id = " + id + ", value = " + get_value() + " " + get_unit(); return ret_val; } */