/* * W1Device.cc * * Created on: Oct 20, 2010 * Author: lamikr */ #include #include #include #include "W1Device.hh" using namespace w1; using namespace std; W1Device::W1Device(dirent *direntry, int family_code_param, string id_param) { string rootdir; string device_dir; string temp_str; rootdir = W1_SCAN_ROOTDIR; temp_str = W1_SLAVE_FILE; dir_path = rootdir + "/" + direntry->d_name; slave_file = dir_path + "/" + temp_str; family_code = family_code_param; id = id_param; name = id_param; } W1Device::~W1Device() { } int W1Device::get_family_code() { return family_code; } string W1Device::get_id() { return id; } string W1Device::get_name() { return name; } void W1Device::set_name(string name_param) { name = name_param; } string W1Device::get_time() { time_t wtime; struct tm *ltime; char buffer[80]; string ret_val; time(&wtime); ltime = localtime(&wtime); strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", ltime); ret_val = buffer; return ret_val; } void W1Device::printout() { string text; text = get_formatted_data(); cout << text << endl; } string W1Device::get_formatted_data() { string ret_val; ret_val = get_formatted_data(get_value()); return ret_val; } string W1Device::get_formatted_data(string value) { string ret_val; ret_val = get_time() + ": device type = " + get_devicetype_name() + ", id = " + id + ", value = " + value + " " + get_unit(); return ret_val; } void W1Device::add_to_memory_cache(std::string formatted_data) { // TODO: add mutex for memory_cache memory_cache.push_back(formatted_data); } void W1Device::store() { string file_path = "/tmp/" + id + ".txt"; string text_line; ofstream data_file(file_path.c_str(), ios::app); cout << "storing to " << file_path << "data size " << memory_cache.size() << endl; // TODO: add mutex to protect memory_cache while it's read and emptied if (data_file.is_open()) { while(memory_cache.size() > 0) { text_line = memory_cache.front(); memory_cache.pop_front(); if (text_line.length() > 0) { cout << "storing line: " << text_line << endl; data_file << text_line << endl; } } data_file.close(); } else { cout << "could not open file " << file_path << " for writing data." << endl; } }