]> pilppa.org Git - lib1wire.git/blobdiff - src_test/test_w1_datalog_write.cc
renamed the test_w1 to test_w1_datalog_write
[lib1wire.git] / src_test / test_w1_datalog_write.cc
diff --git a/src_test/test_w1_datalog_write.cc b/src_test/test_w1_datalog_write.cc
new file mode 100644 (file)
index 0000000..5b5e6eb
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * test_w1.cc
+ *
+ *  Created on: Oct 20, 2010
+ *      Author: lamikr
+ */
+#include <list>
+#include <string>
+#include <iostream>
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include <plp/log.h>
+
+#include "W1Store.hh"
+#include "W1Scanner.hh"
+
+using namespace w1;
+using namespace std;
+
+bool try_parse_long(const char *str, long *result) {
+       int     new_result;
+       char    *endptr;
+       bool    ret_val;
+
+       ret_val         = false;
+       errno           = 0;
+       new_result      = strtol(str, &endptr, 10);
+       if (errno != 0) {
+               log_error("invalid input %s, could not convert to integer.\n", str);
+       }
+       else {
+               if (endptr == str) {
+                       log_error("invalid input %s, could not convert to integer.\n", str);
+               }
+               else {
+                       *result = new_result;
+                       ret_val = true;
+               }
+       }
+       return ret_val;
+}
+
+int main(int argc, char** argv) {
+       W1Scanner               *scanner;
+       list<W1Device *>        device_list;
+       int                     round;
+       long                    scan_interval;
+       long                    store_interval;
+       string                  location;
+       bool                    err_flg;
+
+       // default values than can be overwritten with parameters
+       location        = "/tmp/";
+       scan_interval   = 600;
+       store_interval  = 6;
+       if (argc > 1) {
+               location        = argv[1];
+               log_info("storage location: %s\n", location.c_str());
+       }
+       else {
+               log_warning("No storage location parameter given, using default location: %s\n", location.c_str());
+       }
+       if (argc > 2) {
+               try_parse_long(argv[2], &scan_interval);
+       }
+       if (argc > 3) {
+               try_parse_long(argv[3], &store_interval);
+       }
+       log_info("start scanning, data saved to location: %s, scan interval: %d, store interval: %d\n", location.c_str(), scan_interval, store_interval);
+       W1Store::set_location_base_dir(location.c_str());
+       scanner         = new W1Scanner();
+       device_list     = scanner->get_device_list();
+       round           = 0;
+       if (device_list.size() > 0) {
+               while(1) {
+                       round++;
+                       for(list<W1Device *>::iterator list_iter = device_list.begin(); list_iter != device_list.end(); list_iter++) {
+                               W1Device *device = (W1Device *)*list_iter;
+
+                               device->printout();
+                               sleep(1);
+                               if (round >= store_interval) {
+                                       device->store();
+                               }
+                       }
+                       sleep(scan_interval);
+                       if (round >= store_interval) {
+                               round = 0;
+                       }
+               }
+       }
+       else {
+               log_debug("could not find 1-wire devices.\n");
+       }
+       return 0;
+}