/* * W1Device.cc * * Created on: Oct 20, 2010 * Author: lamikr */ #include #include #include #include #include #include #include "DeviceConfig.hh" #include "Factory.hh" #include "Store.hh" #include "W1Device.hh" using namespace std; using namespace w1; using namespace plp; W1Device::W1Device(int family_code_param, string device_id_param, dirent *direntry_param) { string rootdir; string device_dir; string temp_str; rootdir = W1_SCAN_ROOTDIR; temp_str = W1_SLAVE_FILE; dir_path = rootdir + "/" + direntry_param->d_name; slave_file = dir_path + "/" + temp_str; log_debug("w1 data file: %s\n", slave_file.c_str()); family_code = family_code_param; id = device_id_param; name = ""; } W1Device::~W1Device() { list::iterator iter; Data *data; for(iter = memory_cache.begin(); iter != memory_cache.end(); iter++) { data = (Data *)*iter; delete(data); } memory_cache.clear(); } int W1Device::get_w1_family_code() { return family_code; } string W1Device::get_id() { return id; } string W1Device::get_name() { DeviceConfig *cfg; if (name.empty() == true) { cfg = Factory::get_device_config(id); if (cfg != NULL) { name = cfg->get_cfg_value("name"); delete(cfg); } } return name; } void W1Device::set_name(string name_param) { DeviceConfig *cfg; name = name_param; cfg = Factory::get_device_config(id); if (cfg != NULL) { cfg->set_cfg_value("name", name_param); delete(cfg); } } void W1Device::printout() { Data *data; string text; data = get_and_collect_data(); if (data != NULL) { text = data->to_string(); cout << text << endl; } else { log_error("Could not data for %s device: %s\n", get_device_type().c_str(), get_name().c_str()); } } string W1Device::to_string(double dbl_val, int digit_count) { string ret_val; ostringstream out; out << fixed << setprecision(digit_count) << dbl_val; ret_val = out.str(); return ret_val; } Data *W1Device::get_and_collect_data() { Data *ret_val; vector *vect; ret_val = NULL; vect = get_raw_data(); if (vect != NULL) { ret_val = new Data(vect, get_unit()); collect_data(ret_val); delete(vect); } return ret_val; } void W1Device::collect_data(Data *data) { // TODO: add mutex for memory_cache memory_cache.push_back(data); } void W1Device::save_data() { list::iterator iter; Data *data; int dec_precision; dec_precision = get_data_decimal_precision(); Store::save(id, &memory_cache, dec_precision); for(iter = memory_cache.begin(); iter != memory_cache.end(); iter++) { data = (Data *)*iter; delete(data); } memory_cache.clear(); }