#include <iostream>
#include <fstream>
+#include <sstream>
+#include <iomanip>
+
+#include <vector>
+
+#include <plp/log.h>
#include "W1CounterDevice.hh"
using namespace std;
using namespace w1;
-W1CounterDevice::W1CounterDevice(dirent *direntry,
- int family_code_param,
- string id_param): W1Device(direntry, family_code_param, id_param) {
+template <class NumberDataType>
+bool string_to_number(NumberDataType& result,
+ const std::string& string_param,
+ std::ios_base& (*format)(std::ios_base&))
+{
+ std::istringstream iss(string_param);
+ return !(iss >> format >> result).fail();
+}
+
+W1CounterDevice::W1CounterDevice(string device_id_param,
+ string device_type_param,
+ dirent *direntry_param): W1Device(device_id_param, device_type_param, direntry_param) {
+ string text;
+
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_ds2423 kernel module loaded." << endl;
- }
- else {
+ log_error("%s: %s failed to read data from file: %s\n", id.c_str(), get_type().c_str(), slave_file.c_str());
+ log_error("Verify that you have w1_ds2423 kernel module loaded.\n");
ifs.close();
}
}
// TODO Auto-generated destructor stub
}
-bool W1CounterDevice::is_supported_family_code(int family_code) {
- bool ret_val;
-
- ret_val = false;
- switch(family_code) {
- case 0x1d:
- ret_val = true;
- break;
- }
- return ret_val;
-}
-
-string W1CounterDevice::get_value() {
- string ret_val;
- string value_line;
+vector<double> *W1CounterDevice::get_raw_data() {
int pos;
- int length;
- int ii;
+ int b_cnt;
+ string val_str;
+ int val_int;
+ vector<double> *ret_val;
- ret_val = "<could not read>";
+ ret_val = NULL;
ifstream ifs(slave_file.c_str());
if (ifs.is_open() == true) {
- ret_val = "";
- while(getline(ifs, value_line)) {
- length = value_line.length();
- if (length > 0) {
- pos = value_line.find("c=");
+ while(getline(ifs, val_str)) {
+ b_cnt = val_str.length();
+ if (b_cnt > 0) {
+ pos = val_str.find("crc=YES c=");
if ((pos >= 0) &&
- (pos + 2 < length)) {
- value_line = value_line.substr(pos + 2);
+ ((pos + 10) < b_cnt)) {
+ if (ret_val == NULL) {
+ ret_val = new vector<double>();
+ }
+ val_str = val_str.substr(pos + 10);
+ string_to_number<int>(val_int, val_str, dec);
+ ret_val->push_back(val_int);
}
- else {
- value_line = "";
- }
- }
- else {
- value_line = "";
- }
- if (ret_val.length() == 0) {
- ret_val = value_line;
- }
- else {
- ret_val = ret_val + "|" + value_line;
}
}
ifs.close();
}
- add_to_memory_cache(ret_val);
return ret_val;
}
return "";
}
-string W1CounterDevice::get_devicetype_name() {
- return "Counter Device";
+unsigned int W1CounterDevice::get_data_decimal_precision() {
+ return 0;
}