2 * W1TemperatureSensor.cc
4 * Created on: Oct 20, 2010
13 #include "W1TemperatureSensor.hh"
20 template <class NumberDataType>
21 bool string_to_number(NumberDataType& result,
22 const std::string& string_param,
23 std::ios_base& (*format)(std::ios_base&))
25 std::istringstream iss(string_param);
26 return !(iss >> format >> result).fail();
29 string convert_celcius_value_to_three_digits(string raw_value) {
35 suc_flg = string_to_number<double>(dbl_val, raw_value, dec);
36 if (suc_flg == true) {
37 dbl_val = dbl_val / 1000;
38 std::ostringstream out;
39 out << fixed << setprecision(3) << dbl_val;
48 W1TemperatureSensor::W1TemperatureSensor(dirent *direntry,
49 int family_code_param,
50 string id_param): W1Device(direntry, family_code_param, id_param) {
51 log_debug("trying to open file: %s\n", slave_file.c_str());
52 ifstream ifs(slave_file.c_str());
53 if (ifs.is_open() == false) {
56 text = get_time() + ": device type = " + get_devicetype_name() + ", id = " + id + ", could not read file: " + slave_file + "\n";
57 log_debug(text.c_str());
58 log_debug("verify that you have w1_therm kernel module loaded.\n");
63 W1TemperatureSensor::~W1TemperatureSensor() {
66 bool W1TemperatureSensor::is_supported_family_code(int family_code) {
79 string W1TemperatureSensor::get_raw_value() {
85 string formatted_data;
88 ret_val = "<could not read>";
89 ifstream ifs(slave_file.c_str());
90 if (ifs.is_open() == true) {
91 while(getline(ifs, temp)) {
92 if (temp.length() > 0) {
97 length = last_line.length();
99 pos = last_line.find("t=");
101 (pos + 2 < length)) {
102 ret_val = last_line.substr(pos + 2);
106 ret_val = convert_celcius_value_to_three_digits(ret_val);
110 string W1TemperatureSensor::get_unit() {
114 string W1TemperatureSensor::get_devicetype_name() {
115 return "Temperature Sensor";