]> pilppa.org Git - lib1wire.git/blobdiff - src/W1CounterDevice.cc
added W1CounterDevice
[lib1wire.git] / src / W1CounterDevice.cc
diff --git a/src/W1CounterDevice.cc b/src/W1CounterDevice.cc
new file mode 100644 (file)
index 0000000..d339562
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * W1CounterDevice.cc
+ *
+ *  Created on: Oct 30, 2010
+ *      Author: lamikr
+ */
+
+#include <iostream>
+#include <fstream>
+
+#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) {
+       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 {
+               ifs.close();
+       }
+}
+
+W1CounterDevice::~W1CounterDevice() {
+       // 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;
+       int             pos;
+       int             length;
+       int             ii;
+
+       ret_val = "<could not read>";
+       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=");
+                               if ((pos >= 0) &&
+                                   (pos + 2 < length)) {
+                                       value_line      = value_line.substr(pos + 2);
+                               }
+                               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;
+}
+
+string W1CounterDevice::get_unit() {
+       return "";
+}
+
+string W1CounterDevice::get_devicetype_name() {
+       return "Counter Device";
+}